ERC-721
Website Down
Overview
Max Total Supply
2,831 MOJI
Holders
608
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MOJILoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Niftymoji
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-02-25 */ pragma solidity ^0.5.16; /* ___________________________________________________________________ _ _ ______ | | / / / --|-/|-/-----__---/----__----__---_--_----__-------/-------__------ |/ |/ /___) / / ' / ) / / ) /___) / / ) __/__|____(___ _/___(___ _(___/_/_/__/_(___ _____/______(___/__o_o_ ███╗ ██╗██╗███████╗████████╗██╗ ██╗ ███╗ ███╗ ██████╗ ██╗██╗ ████╗ ██║██║██╔════╝╚══██╔══╝╚██╗ ██╔╝ ████╗ ████║██╔═══██╗ ██║██║ ██╔██╗ ██║██║█████╗ ██║ ╚████╔╝ ██╔████╔██║██║ ██║ ██║██║ ██║╚██╗██║██║██╔══╝ ██║ ╚██╔╝ ██║╚██╔╝██║██║ ██║██ ██║██║ ██║ ╚████║██║██║ ██║ ██║ ██║ ╚═╝ ██║╚██████╔╝╚█████╔╝██║ ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚════╝ ╚═╝ === 'Niftymoji' NFT Management contract with following features === => ERC721 Compliance => ERC165 Compliance => SafeMath implementation => Generation of new digital assets => Destroyal of digital assets ============= Independant Audit of the code ============ => Multiple Freelancers Auditors ------------------------------------------------------------------- Copyright (c) 2019 onwards Niftymoji Inc. ( https://niftymoji.com ) ------------------------------------------------------------------- */ /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address payable internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. * @notice Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address payable newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address payable newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/Strings.sol pragma solidity ^0.5.2; library Strings { // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) { return strConcat(_a, _b, _c, _d, ""); } function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b) internal pure returns (string memory) { return strConcat(_a, _b, "", "", ""); } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } function fromAddress(address addr) internal pure returns(string memory) { bytes20 addrBytes = bytes20(addr); bytes16 hexAlphabet = "0123456789abcdef"; bytes memory result = new bytes(42); result[0] = '0'; result[1] = 'x'; for (uint i = 0; i < 20; i++) { result[i * 2 + 2] = hexAlphabet[uint8(addrBytes[i] >> 4)]; result[i * 2 + 3] = hexAlphabet[uint8(addrBytes[i] & 0x0f)]; } return string(result); } } // File: openzeppelin-solidity/contracts/introspection/IERC165.sol pragma solidity ^0.5.2; /** * @title IERC165 * @dev https://eips.ethereum.org/EIPS/eip-165 */ interface IERC165 { /** * @notice Query if a contract implements an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol pragma solidity ^0.5.2; /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) public view returns (uint256 balance); function ownerOf(uint256 tokenId) public view returns (address owner); function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function transferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.5.2; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safeTransfer`. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.2; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/utils/Address.sol pragma solidity ^0.5.2; /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: openzeppelin-solidity/contracts/drafts/Counters.sol pragma solidity ^0.5.2; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids * * Include with `using Counters for Counters.Counter;` * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the SafeMath * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never * directly accessed. */ library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } // File: openzeppelin-solidity/contracts/introspection/ERC165.sol pragma solidity ^0.5.2; /** * @title ERC165 * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /* * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor () internal { _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev internal method for registering an interface */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff); _supportedInterfaces[interfaceId] = true; } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol pragma solidity ^0.5.2; interface OldNiftymoji{ function powerNLucks(uint256 tokenID) external returns(uint256, uint256); } /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is ERC165, IERC721 { using SafeMath for uint256; using Address for address; using Counters for Counters.Counter; struct powerNLuck { uint256 power; uint256 luck; } uint256 public totalSupply; //uint256 is tokenNo and powerNLuck is associated details in uint256 mapping (uint256 => powerNLuck) public powerNLucks; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => Counters.Counter) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * 0x80ac58cd === * bytes4(keccak256('balanceOf(address)')) ^ * bytes4(keccak256('ownerOf(uint256)')) ^ * bytes4(keccak256('approve(address,uint256)')) ^ * bytes4(keccak256('getApproved(uint256)')) ^ * bytes4(keccak256('setApprovalForAll(address,bool)')) ^ * bytes4(keccak256('isApprovedForAll(address,address)')) ^ * bytes4(keccak256('transferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @dev Gets the balance of the specified address * @param owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address owner) public view returns (uint256) { require(owner != address(0)); return _ownedTokensCount[owner].current(); } /** * @dev Gets the owner of the specified token ID * @param tokenId uint256 ID of the token to query the owner of * @return address currently marked as the owner of the given token ID */ function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; require(owner != address(0)); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param to address to be approved for the given token ID * @param tokenId uint256 ID of the token to be approved */ function approve(address to, uint256 tokenId) public { address owner = ownerOf(tokenId); require(to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId)); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf * @param to operator address to set the approval * @param approved representing the status of the approval to be set */ function setApprovalForAll(address to, bool approved) public { require(to != msg.sender); _operatorApprovals[msg.sender][to] = approved; emit ApprovalForAll(msg.sender, to, approved); } /** * @dev Tells whether an operator is approved by a given owner * @param owner owner address which you want to query the approval of * @param operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address owner, address operator) public view returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Transfers the ownership of a given token ID to another address * Usage of this method is discouraged, use `safeTransferFrom` whenever possible * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function transferFrom(address from, address to, uint256 tokenId) public { require(_isApprovedOrOwner(msg.sender, tokenId)); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public { transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } /** * @dev Returns whether the specified token exists * @param tokenId uint256 ID of the token to query the existence of * @return bool whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @dev Returns whether the given spender can transfer a given token ID * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId, uint256 _userSeed) internal { require(to != address(0)); require(!_exists(tokenId)); require(totalSupply <= 3187, 'Excedend Max Token Supply'); _tokenOwner[tokenId] = to; _ownedTokensCount[to].increment(); totalSupply++; //generating random numbers for luck and power based on previous blockhash and user seed //this method of entropy is not very secure, but kept it as consent of client uint256 _luck = uint256(keccak256(abi.encodePacked(blockhash( block.number -1), _userSeed))) % 100; //0-99 uint256 _power = uint256(keccak256(abi.encodePacked(blockhash( block.number -10), now, _userSeed))) % 100; //0-99 //assigning lucky no and power to tokenId powerNLucks[tokenId].luck = _luck+1; //this will cause it will never be zero. powerNLucks[tokenId].power = _power+1; //this will cause it will never be zero. emit Transfer(address(0), to, tokenId); } function _mintSyncedTokens(uint256 tokenID, address user) internal { _tokenOwner[tokenID] = user; _ownedTokensCount[user].increment(); totalSupply++; //generating random numbers for luck and power based on previous blockhash and user seed //this method of entropy is not very secure, but kept it as consent of client (uint256 _power, uint256 _luck) = OldNiftymoji(0x40b16A1b6bEA856745FeDf7E0946494B895611a2).powerNLucks(tokenID); //mainnet //(uint256 _power, uint256 _luck) = OldNiftymoji(0x03f701FB8EA5441A9Bf98B65461e795931B55298).powerNLucks(tokenID); //testnet //assigning lucky no and power to tokenId powerNLucks[tokenID].luck = _luck; //this will cause it will never be zero. powerNLucks[tokenID].power = _power; //this will cause it will never be zero. emit Transfer(address(0), user, tokenID); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner); _clearApproval(tokenId); _ownedTokensCount[owner].decrement(); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from); require(to != address(0)); _clearApproval(tokenId); _ownedTokensCount[from].decrement(); _ownedTokensCount[to].increment(); _tokenOwner[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke `onERC721Received` on a target address * The call is not executed if the target address is not a contract * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool) { if (!to.isContract()) { return true; } bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data); return (retval == _ERC721_RECEIVED); } /** * @dev Private function to clear current approval of a given token ID * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol pragma solidity ^0.5.2; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Enumerable is IERC721 { //function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId); function tokenByIndex(uint256 index) public view returns (uint256); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Enumerable.sol pragma solidity ^0.5.2; /** * @title ERC-721 Non-Fungible Token with optional enumeration extension logic * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => uint256[]) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /* * 0x780e9d63 === * bytes4(keccak256('totalSupply()')) ^ * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^ * bytes4(keccak256('tokenByIndex(uint256)')) */ /** * @dev Constructor function */ constructor () public { // register the supported interface to conform to ERC721Enumerable via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner * @param owner address owning the tokens list to be accessed * @param index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < balanceOf(owner)); return _ownedTokens[owner][index]; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupplyEnum() public view returns (uint256) { return _allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens * @param index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 index) public view returns (uint256) { require(index < totalSupplyEnum()); return _allTokens[index]; } /** * @dev Gets the list of token IDs of the requested owner * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to address the beneficiary that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId,0); _addTokenToOwnerEnumeration(to, tokenId); _addTokenToAllTokensEnumeration(tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _removeTokenFromOwnerEnumeration(owner, tokenId); // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund _ownedTokensIndex[tokenId] = 0; _removeTokenFromAllTokensEnumeration(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _ownedTokens[from].length.sub(1); uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by // lastTokenId, or just over the end of the array if the token was the last one). } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length.sub(1); uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array _allTokens.length--; _allTokensIndex[tokenId] = 0; } } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol pragma solidity ^0.5.2; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol pragma solidity ^0.5.2; contract ERC721Metadata is ERC165, IERC721Metadata, ERC721 { // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /* * 0x5b5e139f === * bytes4(keccak256('name()')) ^ * bytes4(keccak256('symbol()')) ^ * bytes4(keccak256('tokenURI(uint256)')) */ /** * @dev Constructor function */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } /** * @dev Gets the token name * @return string representing the token name */ function name() external view returns (string memory) { return _name; } /** * @dev Gets the token symbol * @return string representing the token symbol */ function symbol() external view returns (string memory) { return _symbol; } /** * @dev Returns an URI for a given token ID * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenURI(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId)); return _tokenURIs[tokenId]; } /** * @dev Internal function to set the token URI for a given token * Reverts if the token ID does not exist * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal { require(_exists(tokenId)); _tokenURIs[tokenId] = uri; } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol pragma solidity ^0.5.2; /** * @title Full ERC721 Token * This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata { constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) { // solhint-disable-previous-line no-empty-blocks } } // File: contracts/TradeableERC721Token.sol pragma solidity ^0.5.2; contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } /** * @title TradeableERC721Token * TradeableERC721Token - ERC721 contract that whitelists a trading address, and has minting functionality. */ contract TradeableERC721Token is ERC721Full, Ownable { using Strings for string; uint256 public tokenPrice=5 * (10**16) ; //price of token to buy address proxyRegistryAddress; uint256 private _currentTokenId = 0; constructor(string memory _name, string memory _symbol) ERC721Full(_name, _symbol) public { } /** * @dev Mints a token to an address with a tokenURI. * @param _to address of the future owner of the token */ function mintTo(address _to) public onlyOwner { uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId,0); _incrementTokenId(); } function setTokenPrice(uint256 _tokenPrice) public onlyOwner returns(bool) { tokenPrice = _tokenPrice; return true; } function buyToken(uint256 _userSeed) public payable returns(bool) { uint256 paidAmount = msg.value; require(paidAmount == tokenPrice, "Invalid amount paid"); uint256 newTokenId = _getNextTokenId(); _mint(msg.sender, newTokenId,_userSeed); _incrementTokenId(); _owner.transfer(paidAmount); return true; } function batchMintToken(address[] memory _buyer) public onlyOwner returns(bool) { uint256 buyerLength = _buyer.length; require(buyerLength <= 100, "please try less then 101"); for(uint256 i=0;i<buyerLength;i++) { uint256 newTokenId = _getNextTokenId(); _mint(_buyer[i], newTokenId,0); _incrementTokenId(); } return true; } /** * @dev calculates the next token ID based on value of _currentTokenId * @return uint256 for the next token ID */ function _getNextTokenId() private view returns (uint256) { return _currentTokenId.add(1); } /** * @dev increments the value of _currentTokenId */ function _incrementTokenId() private { _currentTokenId++; } function baseTokenURI() public view returns (string memory) { return ""; } function tokenURI(uint256 _tokenId) external view returns (string memory) { return Strings.strConcat(baseTokenURI(),Strings.uint2str(_tokenId) ); } /** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll( address owner, address operator ) public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } function changeProxyURL(address newProxyAddress) public onlyOwner returns(bool){ proxyRegistryAddress = newProxyAddress; return true; } function syncFromOldContract(uint256[] memory tokens, address[] memory users) public onlyOwner returns(bool) { uint256 arrayLength = tokens.length; require(arrayLength <= 150, 'Too many tokens IDs'); //processing each entries for(uint8 i=0; i< arrayLength; i++ ){ if(!_exists(tokens[i])){ _mintSyncedTokens(tokens[i], users[i]); _incrementTokenId(); } } return true; } } // File: contracts/OpenSeaAsset.sol pragma solidity ^0.5.2; /** * @title OpenSea Asset * OpenSea Asset - A contract for easily creating custom assets on OpenSea. */ contract Niftymoji is TradeableERC721Token { string private _baseTokenURI; uint256 public changePowerPrice = 20000000000000000; //0.02 ETH uint256 public changeLuckPrice = 20000000000000000; //0.02 ETH constructor( string memory _name, string memory _symbol, string memory baseURI ) TradeableERC721Token(_name, _symbol) public { _baseTokenURI = baseURI; } function openSeaVersion() public pure returns (string memory) { return "1.2.0"; } function baseTokenURI() public view returns (string memory) { return _baseTokenURI; } function setBaseTokenURI(string memory uri) public onlyOwner { _baseTokenURI = uri; } function changePowerLuckPrice(uint256 powerPrice, uint256 luckPrice) public onlyOwner returns(bool){ changePowerPrice = powerPrice; changeLuckPrice = luckPrice; return true; } /** * Status: 0 = only power, 1 = only luck, 2 = both power and luck */ function changePowerLuck(uint256 tokenID, uint8 status) public payable returns(bool){ require(msg.sender == ownerOf(tokenID), 'This token is not owned by caller'); if(status == 0){ require(msg.value == changePowerPrice, 'Invalid ETH amount'); //generating random numbers for luck and power based on previous blockhash and timestamp //this method of entropy is not very secure, but kept it as consent of client uint256 _power = uint256(keccak256(abi.encodePacked(blockhash( block.number -10), now))) % 100; //0-99 powerNLucks[tokenID].power = _power+1; //this will cause it will never be zero. } else if(status == 1){ require(msg.value == changeLuckPrice, 'Invalid ETH amount'); uint256 _luck = uint256(keccak256(abi.encodePacked(blockhash( block.number -1)))) % 100; //0-99 powerNLucks[tokenID].luck = _luck+1; //this will cause it will never be zero. } else if(status == 2){ require(msg.value == (changePowerPrice + changeLuckPrice), 'Invalid ETH amount'); uint256 _luck = uint256(keccak256(abi.encodePacked(blockhash( block.number -1)))) % 100; //0-99 uint256 _power = uint256(keccak256(abi.encodePacked(blockhash( block.number -10), now))) % 100; //0-99 //assigning lucky no and power to tokenId powerNLucks[tokenID].luck = _luck+1; //this will cause it will never be zero. powerNLucks[tokenID].power = _power+1; //this will cause it will never be zero. } _owner.transfer(msg.value); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"}],"name":"batchMintToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_userSeed","type":"uint256"}],"name":"buyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"changeLuckPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"}],"name":"changePowerLuck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"powerPrice","type":"uint256"},{"internalType":"uint256","name":"luckPrice","type":"uint256"}],"name":"changePowerLuckPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"changePowerPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newProxyAddress","type":"address"}],"name":"changeProxyURL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"openSeaVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"powerNLucks","outputs":[{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"syncFromOldContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyEnum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266b1a2bc2ec50000600f55600060115566470de4df82000060135566470de4df8200006014553480156200003757600080fd5b5060405162003bc438038062003bc4833981810160405260608110156200005d57600080fd5b81019080805160405193929190846401000000008211156200007e57600080fd5b838201915060208201858111156200009557600080fd5b8251866001820283011164010000000082111715620000b357600080fd5b8083526020830192505050908051906020019080838360005b83811015620000e9578082015181840152602081019050620000cc565b50505050905090810190601f168015620001175780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013b57600080fd5b838201915060208201858111156200015257600080fd5b82518660018202830111640100000000821117156200017057600080fd5b8083526020830192505050908051906020019080838360005b83811015620001a657808201518184015260208101905062000189565b50505050905090810190601f168015620001d45780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001f857600080fd5b838201915060208201858111156200020f57600080fd5b82518660018202830111640100000000821117156200022d57600080fd5b8083526020830192505050908051906020019080838360005b838110156200026357808201518184015260208101905062000246565b50505050905090810190601f168015620002915780820380516001836020036101000a031916815260200191505b50604052505050828281818181620002b66301ffc9a760e01b6200041660201b60201c565b620002ce6380ac58cd60e01b6200041660201b60201c565b620002e663780e9d6360e01b6200041660201b60201c565b81600b9080519060200190620002fe929190620004b6565b5080600c908051906020019062000317929190620004b6565b5062000330635b5e139f60e01b6200041660201b60201c565b5050505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505080601290805190602001906200040c929190620004b6565b5050505062000565565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200044a57600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004f957805160ff19168380011785556200052a565b828001600101855582156200052a579182015b82811115620005295782518255916020019190600101906200050c565b5b5090506200053991906200053d565b5090565b6200056291905b808211156200055e57600081600090555060010162000544565b5090565b90565b61364f80620005756000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063a22cb465116100a0578063ce6073f31161006f578063ce6073f314610e58578063d547cfb714610fc9578063e6d5c54714611059578063e985e9c514611136578063f2fde38b146111bf5761020f565b8063a22cb46514610c0a578063ac98628414610c67578063b88d4fde14610c92578063c87b56dd14610da45761020f565b80638a4a33be116100e75780638a4a33be14610a4b5780638abd2be314610aa15780638da5cb5b14610af45780638f32d59b14610b4b57806395d89b4114610b7a5761020f565b8063715018a61461098d578063755edd17146109a45780637ff9b596146109f55780638977f8f314610a205761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e146107905780634f6ccce71461080b5780636352211e1461085a5780636a61e5fc146108d557806370a08231146109285761020f565b80632f745c591461056057806330176e13146105cf5780633acf3adc146106975780634060b25e146107005761020f565b80630a21f56f116101e25780630a21f56f146103ec57806318160ddd146104495780631e0bd2fe1461047457806323b872dd1461049f5780632d296bf11461051a5761020f565b806301ffc9a71461021457806306fdde0314610286578063081812fc14610316578063095ea7b314610391575b600080fd5b34801561022057600080fd5b5061026c6004803603602081101561023757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611210565b604051808215151515815260200191505060405180910390f35b34801561029257600080fd5b5061029b611277565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102db5780820151818401526020810190506102c0565b50505050905090810190601f1680156103085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032257600080fd5b5061034f6004803603602081101561033957600080fd5b8101908080359060200190929190505050611319565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039d57600080fd5b506103ea600480360360408110156103b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611368565b005b3480156103f857600080fd5b5061042f6004803603604081101561040f57600080fd5b8101908080359060200190929190803590602001909291905050506114a9565b604051808215151515815260200191505060405180910390f35b34801561045557600080fd5b5061045e6114d4565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104896114da565b6040518082815260200191505060405180910390f35b3480156104ab57600080fd5b50610518600480360360608110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e0565b005b6105466004803603602081101561053057600080fd5b8101908080359060200190929190505050611503565b604051808215151515815260200191505060405180910390f35b34801561056c57600080fd5b506105b96004803603604081101561058357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611613565b6040518082815260200191505060405180910390f35b3480156105db57600080fd5b50610695600480360360208110156105f257600080fd5b810190808035906020019064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611686565b005b3480156106a357600080fd5b506106e6600480360360208110156106ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116b1565b604051808215151515815260200191505060405180910390f35b34801561070c57600080fd5b5061071561170e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075557808201518184015260208101905061073a565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561079c57600080fd5b50610809600480360360608110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061174b565b005b34801561081757600080fd5b506108446004803603602081101561082e57600080fd5b810190808035906020019092919050505061176b565b6040518082815260200191505060405180910390f35b34801561086657600080fd5b506108936004803603602081101561087d57600080fd5b810190808035906020019092919050505061179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108e157600080fd5b5061090e600480360360208110156108f857600080fd5b810190808035906020019092919050505061181b565b604051808215151515815260200191505060405180910390f35b34801561093457600080fd5b506109776004803603602081101561094b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061183e565b6040518082815260200191505060405180910390f35b34801561099957600080fd5b506109a26118c7565b005b3480156109b057600080fd5b506109f3600480360360208110156109c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611999565b005b348015610a0157600080fd5b50610a0a6119ce565b6040518082815260200191505060405180910390f35b348015610a2c57600080fd5b50610a356119d4565b6040518082815260200191505060405180910390f35b348015610a5757600080fd5b50610a8460048036036020811015610a6e57600080fd5b81019080803590602001909291905050506119da565b604051808381526020018281526020019250505060405180910390f35b610ada60048036036040811015610ab757600080fd5b8101908080359060200190929190803560ff1690602001909291905050506119fe565b604051808215151515815260200191505060405180910390f35b348015610b0057600080fd5b50610b09611e15565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5757600080fd5b50610b60611e3f565b604051808215151515815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f611e97565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bcf578082015181840152602081019050610bb4565b50505050905090810190601f168015610bfc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c1657600080fd5b50610c6560048036036040811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f39565b005b348015610c7357600080fd5b50610c7c612073565b6040518082815260200191505060405180910390f35b348015610c9e57600080fd5b50610da260048036036080811015610cb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612080565b005b348015610db057600080fd5b50610ddd60048036036020811015610dc757600080fd5b81019080803590602001909291905050506120a6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e1d578082015181840152602081019050610e02565b50505050905090810190601f168015610e4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6457600080fd5b50610faf60048036036040811015610e7b57600080fd5b8101908080359060200190640100000000811115610e9857600080fd5b820183602082011115610eaa57600080fd5b80359060200191846020830284011164010000000083111715610ecc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610f2c57600080fd5b820183602082011115610f3e57600080fd5b80359060200191846020830284011164010000000083111715610f6057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506120c8565b604051808215151515815260200191505060405180910390f35b348015610fd557600080fd5b50610fde6121e4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561101e578082015181840152602081019050611003565b50505050905090810190601f16801561104b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561106557600080fd5b5061111c6004803603602081101561107c57600080fd5b810190808035906020019064010000000081111561109957600080fd5b8201836020820111156110ab57600080fd5b803590602001918460208302840111640100000000831117156110cd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612286565b604051808215151515815260200191505060405180910390f35b34801561114257600080fd5b506111a56004803603604081101561115957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612370565b604051808215151515815260200191505060405180910390f35b3480156111cb57600080fd5b5061120e600480360360208110156111e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a1565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b5050505050905090565b6000611324826124be565b61132d57600080fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006113738261179f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113ae57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ee57506113ed8133612370565b5b6113f757600080fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006114b3611e3f565b6114bc57600080fd5b82601381905550816014819055506001905092915050565b60015481565b60135481565b6114ea3382612530565b6114f357600080fd5b6114fe8383836125c5565b505050565b600080349050600f548114611580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e7420706169640000000000000000000000000081525060200191505060405180910390fd5b600061158a612788565b90506115973382866127a5565b61159f612a46565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611607573d6000803e3d6000fd5b50600192505050919050565b600061161e8361183e565b821061162957600080fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061167357fe5b9060005260206000200154905092915050565b61168e611e3f565b61169757600080fd5b80601290805190602001906116ad929190613554565b5050565b60006116bb611e3f565b6116c457600080fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60606040518060400160405280600581526020017f312e322e30000000000000000000000000000000000000000000000000000000815250905090565b61176683838360405180602001604052806000815250612080565b505050565b6000611775612073565b821061178057600080fd5b6009828154811061178d57fe5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561181257600080fd5b80915050919050565b6000611825611e3f565b61182e57600080fd5b81600f8190555060019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187957600080fd5b6118c0600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612a5a565b9050919050565b6118cf611e3f565b6118d857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119a1611e3f565b6119aa57600080fd5b60006119b4612788565b90506119c2828260006127a5565b6119ca612a46565b5050565b600f5481565b60145481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000611a098361179f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135fa6021913960400191505060405180910390fd5b60008260ff161415611b77576013543414611b0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b60006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611b5057fe5b06905060018101600260008681526020019081526020016000206000018190555050611da2565b60018260ff161415611c5a576014543414611bfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611c3357fe5b06905060018101600260008681526020019081526020016000206001018190555050611da1565b60028260ff161415611da057601454601354013414611ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611d1a57fe5b06905060006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611d5e57fe5b06905060018201600260008781526020019081526020016000206001018190555060018101600260008781526020019081526020016000206000018190555050505b5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611e0a573d6000803e3d6000fd5b506001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f2f5780601f10611f0457610100808354040283529160200191611f2f565b820191906000526020600020905b815481529060010190602001808311611f1257829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f7257600080fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6000600980549050905090565b61208b8484846114e0565b61209784848484612a68565b6120a057600080fd5b50505050565b60606120c16120b36121e4565b6120bc84612c51565b612d7e565b9050919050565b60006120d2611e3f565b6120db57600080fd5b6000835190506096811115612158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6f206d616e7920746f6b656e73204944730000000000000000000000000081525060200191505060405180910390fd5b60008090505b818160ff1610156121d857612188858260ff168151811061217b57fe5b60200260200101516124be565b6121cb576121c2858260ff168151811061219e57fe5b6020026020010151858360ff16815181106121b557fe5b6020026020010151612dc2565b6121ca612a46565b5b808060010191505061215e565b50600191505092915050565b606060128054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561227c5780601f106122515761010080835404028352916020019161227c565b820191906000526020600020905b81548152906001019060200180831161225f57829003601f168201915b5050505050905090565b6000612290611e3f565b61229957600080fd5b6000825190506064811115612316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f706c6561736520747279206c657373207468656e20313031000000000000000081525060200191505060405180910390fd5b60008090505b8181101561236557600061232e612788565b905061234f85838151811061233f57fe5b60200260200101518260006127a5565b612357612a46565b50808060010191505061231c565b506001915050919050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561242c57600080fd5b505afa158015612440573d6000803e3d6000fd5b505050506040513d602081101561245657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141561248d57600191505061249b565b6124978484612fb7565b9150505b92915050565b6124a9611e3f565b6124b257600080fd5b6124bb8161304b565b50565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061253c8361179f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125ab57508373ffffffffffffffffffffffffffffffffffffffff1661259384611319565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bc57506125bb8185612370565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125e58261179f565b73ffffffffffffffffffffffffffffffffffffffff161461260557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263f57600080fd5b61264881613145565b61268f600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613203565b6126d6600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006127a0600160115461323c90919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127df57600080fd5b6127e8826124be565b156127f257600080fd5b610c73600154111561286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4578636564656e64204d617820546f6b656e20537570706c790000000000000081525060200191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612905600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000606460014303408360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c8161295857fe5b06905060006064600a43034042856040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012060001c816129a457fe5b069050600182016002600086815260200190815260200160002060010181905550600181016002600086815260200190815260200160002060000181905550838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b601160008154809291906001019190505550565b600081600001549050919050565b6000612a898473ffffffffffffffffffffffffffffffffffffffff1661325b565b612a965760019050612c49565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612b71578082015181840152602081019050612b56565b50505050905090810190601f168015612b9e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612bc057600080fd5b505af1158015612bd4573d6000803e3d6000fd5b505050506040513d6020811015612bea57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415612c99576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d79565b600082905060005b60008214612cc3578080600101915050600a8281612cbb57fe5b049150612ca1565b6060816040519080825280601f01601f191660200182016040528015612cf85781602001600182028038833980820191505090505b50905060006001830390505b60008614612d7157600a8681612d1657fe5b0660300160f81b82828060019003935081518110612d3057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681612d6957fe5b049550612d04565b819450505050505b919050565b6060612dba838360405180602001604052806000815250604051806020016040528060008152506040518060200160405280600081525061326e565b905092915050565b806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612e5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000807340b16a1b6bea856745fedf7e0946494b895611a273ffffffffffffffffffffffffffffffffffffffff16638a4a33be856040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015612ed657600080fd5b505af1158015612eea573d6000803e3d6000fd5b505050506040513d6040811015612f0057600080fd5b81019080805190602001909291908051906020019092919050505091509150806002600086815260200190815260200160002060010181905550816002600086815260200190815260200160002060000181905550838373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561308557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132005760006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61321b6001826000015461353490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60008082840190508381101561325157600080fd5b8091505092915050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156132ca5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b885181101561334b578881815181106132f257fe5b602001015160f81c60f81b83838060010194508151811061330f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506132dd565b5060008090505b87518110156133c05787818151811061336757fe5b602001015160f81c60f81b83838060010194508151811061338457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613352565b5060008090505b8651811015613435578681815181106133dc57fe5b602001015160f81c60f81b8383806001019450815181106133f957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506133c7565b5060008090505b85518110156134aa5785818151811061345157fe5b602001015160f81c60f81b83838060010194508151811061346e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061343c565b5060008090505b845181101561351f578481815181106134c657fe5b602001015160f81c60f81b8383806001019450815181106134e357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506134b1565b50819850505050505050505095945050505050565b60008282111561354357600080fd5b600082840390508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061359557805160ff19168380011785556135c3565b828001600101855582156135c3579182015b828111156135c25782518255916020019190600101906135a7565b5b5090506135d091906135d4565b5090565b6135f691905b808211156135f25760008160009055506001016135da565b5090565b9056fe5468697320746f6b656e206973206e6f74206f776e65642062792063616c6c6572a265627a7a7231582079b3a09ca0d0a70085882ad9c9690d513cf03a8c3af9a7305903309479ae249064736f6c63430005100032000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000094e696674796d6f6a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4f4a4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e687474703a2f2f36382e3138332e3137382e3130303a393039302f69642f0000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c8063715018a611610118578063a22cb465116100a0578063ce6073f31161006f578063ce6073f314610e58578063d547cfb714610fc9578063e6d5c54714611059578063e985e9c514611136578063f2fde38b146111bf5761020f565b8063a22cb46514610c0a578063ac98628414610c67578063b88d4fde14610c92578063c87b56dd14610da45761020f565b80638a4a33be116100e75780638a4a33be14610a4b5780638abd2be314610aa15780638da5cb5b14610af45780638f32d59b14610b4b57806395d89b4114610b7a5761020f565b8063715018a61461098d578063755edd17146109a45780637ff9b596146109f55780638977f8f314610a205761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e146107905780634f6ccce71461080b5780636352211e1461085a5780636a61e5fc146108d557806370a08231146109285761020f565b80632f745c591461056057806330176e13146105cf5780633acf3adc146106975780634060b25e146107005761020f565b80630a21f56f116101e25780630a21f56f146103ec57806318160ddd146104495780631e0bd2fe1461047457806323b872dd1461049f5780632d296bf11461051a5761020f565b806301ffc9a71461021457806306fdde0314610286578063081812fc14610316578063095ea7b314610391575b600080fd5b34801561022057600080fd5b5061026c6004803603602081101561023757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611210565b604051808215151515815260200191505060405180910390f35b34801561029257600080fd5b5061029b611277565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102db5780820151818401526020810190506102c0565b50505050905090810190601f1680156103085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032257600080fd5b5061034f6004803603602081101561033957600080fd5b8101908080359060200190929190505050611319565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039d57600080fd5b506103ea600480360360408110156103b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611368565b005b3480156103f857600080fd5b5061042f6004803603604081101561040f57600080fd5b8101908080359060200190929190803590602001909291905050506114a9565b604051808215151515815260200191505060405180910390f35b34801561045557600080fd5b5061045e6114d4565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104896114da565b6040518082815260200191505060405180910390f35b3480156104ab57600080fd5b50610518600480360360608110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e0565b005b6105466004803603602081101561053057600080fd5b8101908080359060200190929190505050611503565b604051808215151515815260200191505060405180910390f35b34801561056c57600080fd5b506105b96004803603604081101561058357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611613565b6040518082815260200191505060405180910390f35b3480156105db57600080fd5b50610695600480360360208110156105f257600080fd5b810190808035906020019064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611686565b005b3480156106a357600080fd5b506106e6600480360360208110156106ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116b1565b604051808215151515815260200191505060405180910390f35b34801561070c57600080fd5b5061071561170e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075557808201518184015260208101905061073a565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561079c57600080fd5b50610809600480360360608110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061174b565b005b34801561081757600080fd5b506108446004803603602081101561082e57600080fd5b810190808035906020019092919050505061176b565b6040518082815260200191505060405180910390f35b34801561086657600080fd5b506108936004803603602081101561087d57600080fd5b810190808035906020019092919050505061179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108e157600080fd5b5061090e600480360360208110156108f857600080fd5b810190808035906020019092919050505061181b565b604051808215151515815260200191505060405180910390f35b34801561093457600080fd5b506109776004803603602081101561094b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061183e565b6040518082815260200191505060405180910390f35b34801561099957600080fd5b506109a26118c7565b005b3480156109b057600080fd5b506109f3600480360360208110156109c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611999565b005b348015610a0157600080fd5b50610a0a6119ce565b6040518082815260200191505060405180910390f35b348015610a2c57600080fd5b50610a356119d4565b6040518082815260200191505060405180910390f35b348015610a5757600080fd5b50610a8460048036036020811015610a6e57600080fd5b81019080803590602001909291905050506119da565b604051808381526020018281526020019250505060405180910390f35b610ada60048036036040811015610ab757600080fd5b8101908080359060200190929190803560ff1690602001909291905050506119fe565b604051808215151515815260200191505060405180910390f35b348015610b0057600080fd5b50610b09611e15565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5757600080fd5b50610b60611e3f565b604051808215151515815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f611e97565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bcf578082015181840152602081019050610bb4565b50505050905090810190601f168015610bfc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c1657600080fd5b50610c6560048036036040811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f39565b005b348015610c7357600080fd5b50610c7c612073565b6040518082815260200191505060405180910390f35b348015610c9e57600080fd5b50610da260048036036080811015610cb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612080565b005b348015610db057600080fd5b50610ddd60048036036020811015610dc757600080fd5b81019080803590602001909291905050506120a6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e1d578082015181840152602081019050610e02565b50505050905090810190601f168015610e4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6457600080fd5b50610faf60048036036040811015610e7b57600080fd5b8101908080359060200190640100000000811115610e9857600080fd5b820183602082011115610eaa57600080fd5b80359060200191846020830284011164010000000083111715610ecc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610f2c57600080fd5b820183602082011115610f3e57600080fd5b80359060200191846020830284011164010000000083111715610f6057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506120c8565b604051808215151515815260200191505060405180910390f35b348015610fd557600080fd5b50610fde6121e4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561101e578082015181840152602081019050611003565b50505050905090810190601f16801561104b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561106557600080fd5b5061111c6004803603602081101561107c57600080fd5b810190808035906020019064010000000081111561109957600080fd5b8201836020820111156110ab57600080fd5b803590602001918460208302840111640100000000831117156110cd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612286565b604051808215151515815260200191505060405180910390f35b34801561114257600080fd5b506111a56004803603604081101561115957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612370565b604051808215151515815260200191505060405180910390f35b3480156111cb57600080fd5b5061120e600480360360208110156111e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a1565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b5050505050905090565b6000611324826124be565b61132d57600080fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006113738261179f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113ae57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ee57506113ed8133612370565b5b6113f757600080fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006114b3611e3f565b6114bc57600080fd5b82601381905550816014819055506001905092915050565b60015481565b60135481565b6114ea3382612530565b6114f357600080fd5b6114fe8383836125c5565b505050565b600080349050600f548114611580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e7420706169640000000000000000000000000081525060200191505060405180910390fd5b600061158a612788565b90506115973382866127a5565b61159f612a46565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611607573d6000803e3d6000fd5b50600192505050919050565b600061161e8361183e565b821061162957600080fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061167357fe5b9060005260206000200154905092915050565b61168e611e3f565b61169757600080fd5b80601290805190602001906116ad929190613554565b5050565b60006116bb611e3f565b6116c457600080fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60606040518060400160405280600581526020017f312e322e30000000000000000000000000000000000000000000000000000000815250905090565b61176683838360405180602001604052806000815250612080565b505050565b6000611775612073565b821061178057600080fd5b6009828154811061178d57fe5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561181257600080fd5b80915050919050565b6000611825611e3f565b61182e57600080fd5b81600f8190555060019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187957600080fd5b6118c0600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612a5a565b9050919050565b6118cf611e3f565b6118d857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119a1611e3f565b6119aa57600080fd5b60006119b4612788565b90506119c2828260006127a5565b6119ca612a46565b5050565b600f5481565b60145481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000611a098361179f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135fa6021913960400191505060405180910390fd5b60008260ff161415611b77576013543414611b0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b60006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611b5057fe5b06905060018101600260008681526020019081526020016000206000018190555050611da2565b60018260ff161415611c5a576014543414611bfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611c3357fe5b06905060018101600260008681526020019081526020016000206001018190555050611da1565b60028260ff161415611da057601454601354013414611ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611d1a57fe5b06905060006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611d5e57fe5b06905060018201600260008781526020019081526020016000206001018190555060018101600260008781526020019081526020016000206000018190555050505b5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611e0a573d6000803e3d6000fd5b506001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f2f5780601f10611f0457610100808354040283529160200191611f2f565b820191906000526020600020905b815481529060010190602001808311611f1257829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f7257600080fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6000600980549050905090565b61208b8484846114e0565b61209784848484612a68565b6120a057600080fd5b50505050565b60606120c16120b36121e4565b6120bc84612c51565b612d7e565b9050919050565b60006120d2611e3f565b6120db57600080fd5b6000835190506096811115612158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6f206d616e7920746f6b656e73204944730000000000000000000000000081525060200191505060405180910390fd5b60008090505b818160ff1610156121d857612188858260ff168151811061217b57fe5b60200260200101516124be565b6121cb576121c2858260ff168151811061219e57fe5b6020026020010151858360ff16815181106121b557fe5b6020026020010151612dc2565b6121ca612a46565b5b808060010191505061215e565b50600191505092915050565b606060128054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561227c5780601f106122515761010080835404028352916020019161227c565b820191906000526020600020905b81548152906001019060200180831161225f57829003601f168201915b5050505050905090565b6000612290611e3f565b61229957600080fd5b6000825190506064811115612316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f706c6561736520747279206c657373207468656e20313031000000000000000081525060200191505060405180910390fd5b60008090505b8181101561236557600061232e612788565b905061234f85838151811061233f57fe5b60200260200101518260006127a5565b612357612a46565b50808060010191505061231c565b506001915050919050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561242c57600080fd5b505afa158015612440573d6000803e3d6000fd5b505050506040513d602081101561245657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141561248d57600191505061249b565b6124978484612fb7565b9150505b92915050565b6124a9611e3f565b6124b257600080fd5b6124bb8161304b565b50565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061253c8361179f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125ab57508373ffffffffffffffffffffffffffffffffffffffff1661259384611319565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bc57506125bb8185612370565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125e58261179f565b73ffffffffffffffffffffffffffffffffffffffff161461260557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263f57600080fd5b61264881613145565b61268f600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613203565b6126d6600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006127a0600160115461323c90919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127df57600080fd5b6127e8826124be565b156127f257600080fd5b610c73600154111561286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4578636564656e64204d617820546f6b656e20537570706c790000000000000081525060200191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612905600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000606460014303408360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c8161295857fe5b06905060006064600a43034042856040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012060001c816129a457fe5b069050600182016002600086815260200190815260200160002060010181905550600181016002600086815260200190815260200160002060000181905550838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b601160008154809291906001019190505550565b600081600001549050919050565b6000612a898473ffffffffffffffffffffffffffffffffffffffff1661325b565b612a965760019050612c49565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612b71578082015181840152602081019050612b56565b50505050905090810190601f168015612b9e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612bc057600080fd5b505af1158015612bd4573d6000803e3d6000fd5b505050506040513d6020811015612bea57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415612c99576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d79565b600082905060005b60008214612cc3578080600101915050600a8281612cbb57fe5b049150612ca1565b6060816040519080825280601f01601f191660200182016040528015612cf85781602001600182028038833980820191505090505b50905060006001830390505b60008614612d7157600a8681612d1657fe5b0660300160f81b82828060019003935081518110612d3057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681612d6957fe5b049550612d04565b819450505050505b919050565b6060612dba838360405180602001604052806000815250604051806020016040528060008152506040518060200160405280600081525061326e565b905092915050565b806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612e5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000807340b16a1b6bea856745fedf7e0946494b895611a273ffffffffffffffffffffffffffffffffffffffff16638a4a33be856040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015612ed657600080fd5b505af1158015612eea573d6000803e3d6000fd5b505050506040513d6040811015612f0057600080fd5b81019080805190602001909291908051906020019092919050505091509150806002600086815260200190815260200160002060010181905550816002600086815260200190815260200160002060000181905550838373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561308557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132005760006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61321b6001826000015461353490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60008082840190508381101561325157600080fd5b8091505092915050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156132ca5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b885181101561334b578881815181106132f257fe5b602001015160f81c60f81b83838060010194508151811061330f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506132dd565b5060008090505b87518110156133c05787818151811061336757fe5b602001015160f81c60f81b83838060010194508151811061338457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613352565b5060008090505b8651811015613435578681815181106133dc57fe5b602001015160f81c60f81b8383806001019450815181106133f957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506133c7565b5060008090505b85518110156134aa5785818151811061345157fe5b602001015160f81c60f81b83838060010194508151811061346e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061343c565b5060008090505b845181101561351f578481815181106134c657fe5b602001015160f81c60f81b8383806001019450815181106134e357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506134b1565b50819850505050505050505095945050505050565b60008282111561354357600080fd5b600082840390508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061359557805160ff19168380011785556135c3565b828001600101855582156135c3579182015b828111156135c25782518255916020019190600101906135a7565b5b5090506135d091906135d4565b5090565b6135f691905b808211156135f25760008160009055506001016135da565b5090565b9056fe5468697320746f6b656e206973206e6f74206f776e65642062792063616c6c6572a265627a7a7231582079b3a09ca0d0a70085882ad9c9690d513cf03a8c3af9a7305903309479ae249064736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000094e696674796d6f6a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4f4a4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e687474703a2f2f36382e3138332e3137382e3130303a393039302f69642f0000
-----Decoded View---------------
Arg [0] : _name (string): Niftymoji
Arg [1] : _symbol (string): MOJI
Arg [2] : baseURI (string): http://68.183.178.100:9090/id/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 4e696674796d6f6a690000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4d4f4a4900000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [8] : 687474703a2f2f36382e3138332e3137382e3130303a393039302f69642f0000
Deployed Bytecode Sourcemap
45826:2706:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15372:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15372:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15372:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39674:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39674:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39674:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19887:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19887:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19887:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19295:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19295:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19295:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46523:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46523:200:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46523:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16361:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16361:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45907:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45907:51:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21478:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21478:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21478:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43034:346;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43034:346:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31721:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31721:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31721:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46422:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46422:93:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46422:93:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;46422:93:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46422:93:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46422:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;46422:93:0;;;;;;;;;;;;;;;:::i;:::-;;44972:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44972:152:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44972:152:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46228:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46228:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;46228:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22308:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22308:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22308:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32509:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32509:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32509:155:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18683:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18683:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18683:181:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;42887:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42887:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42887:137:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18295:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18295:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18295:163:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3613:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3613:140:0;;;:::i;:::-;;42725:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42725:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42725:154:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;42340:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42340:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45974:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45974:51:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16474:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16474:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16474:50:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;46814:1695;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46814:1695:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2823:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2823:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3158:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3158:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39873:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39873:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39873:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20341:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20341:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20341:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32064:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32064:100:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23161:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23161:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;23161:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;23161:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23161:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;23161:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23161:214:0;;;;;;;;;;;;;;;:::i;:::-;;44278:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44278:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44278:160:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;44278:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45136:496;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45136:496:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45136:496:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45136:496:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45136:496:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;45136:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45136:496:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45136:496:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45136:496:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;45136:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45136:496:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46323:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46323:93:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;46323:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43388:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43388:408:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43388:408:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;43388:408:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43388:408:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;43388:408:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;43388:408:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;44562:402;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44562:402:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44562:402:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3930:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3930:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3930:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;15372:135;15442:4;15466:20;:33;15487:11;15466:33;;;;;;;;;;;;;;;;;;;;;;;;;;;15459:40;;15372:135;;;:::o;39674:85::-;39713:13;39746:5;39739:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39674:85;:::o;19887:154::-;19946:7;19974:16;19982:7;19974;:16::i;:::-;19966:25;;;;;;20009:15;:24;20025:7;20009:24;;;;;;;;;;;;;;;;;;;;;20002:31;;19887:154;;;:::o;19295:299::-;19359:13;19375:16;19383:7;19375;:16::i;:::-;19359:32;;19416:5;19410:11;;:2;:11;;;;19402:20;;;;;;19455:5;19441:19;;:10;:19;;;:58;;;;19464:35;19481:5;19488:10;19464:16;:35::i;:::-;19441:58;19433:67;;;;;;19540:2;19513:15;:24;19529:7;19513:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19578:7;19574:2;19558:28;;19567:5;19558:28;;;;;;;;;;;;19295:299;;;:::o;46523:200::-;46617:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;46650:10;46631:16;:29;;;;46688:9;46669:15;:28;;;;46713:4;46706:11;;46523:200;;;;:::o;16361:26::-;;;;:::o;45907:51::-;;;;:::o;21478:184::-;21569:39;21588:10;21600:7;21569:18;:39::i;:::-;21561:48;;;;;;21622:32;21636:4;21642:2;21646:7;21622:13;:32::i;:::-;21478:184;;;:::o;43034:346::-;43094:4;43110:18;43131:9;43110:30;;43169:10;;43155;:24;43147:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43210:18;43231:17;:15;:17::i;:::-;43210:38;;43255:39;43261:10;43273;43284:9;43255:5;:39::i;:::-;43301:19;:17;:19::i;:::-;43328:6;;;;;;;;;;;:15;;:27;43344:10;43328:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43328:27:0;43370:4;43363:11;;;;43034:346;;;:::o;31721:185::-;31801:7;31837:16;31847:5;31837:9;:16::i;:::-;31829:5;:24;31821:33;;;;;;31872:12;:19;31885:5;31872:19;;;;;;;;;;;;;;;31892:5;31872:26;;;;;;;;;;;;;;;;31865:33;;31721:185;;;;:::o;46422:93::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;46506:3;46490:13;:19;;;;;;;;;;;;:::i;:::-;;46422:93;:::o;44972:152::-;45046:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;45083:15;45060:20;;:38;;;;;;;;;;;;;;;;;;45114:4;45107:11;;44972:152;;;:::o;46228:89::-;46275:13;46297:14;;;;;;;;;;;;;;;;;;;46228:89;:::o;22308:134::-;22395:39;22412:4;22418:2;22422:7;22395:39;;;;;;;;;;;;:16;:39::i;:::-;22308:134;;;:::o;32509:155::-;32567:7;32603:17;:15;:17::i;:::-;32595:5;:25;32587:34;;;;;;32639:10;32650:5;32639:17;;;;;;;;;;;;;;;;32632:24;;32509:155;;;:::o;18683:181::-;18738:7;18758:13;18774:11;:20;18786:7;18774:20;;;;;;;;;;;;;;;;;;;;;18758:36;;18830:1;18813:19;;:5;:19;;;;18805:28;;;;;;18851:5;18844:12;;;18683:181;;;:::o;42887:137::-;42956:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;42987:11;42974:10;:24;;;;43014:4;43007:11;;42887:137;;;:::o;18295:163::-;18350:7;18395:1;18378:19;;:5;:19;;;;18370:28;;;;;;18416:34;:17;:24;18434:5;18416:24;;;;;;;;;;;;;;;:32;:34::i;:::-;18409:41;;18295:163;;;:::o;3613:140::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;3712:1;3675:40;;3696:6;;;;;;;;;;;3675:40;;;;;;;;;;;;3743:1;3726:6;;:19;;;;;;;;;;;;;;;;;;3613:140::o;42725:154::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;42778;42799:17;:15;:17::i;:::-;42778:38;;42823:24;42829:3;42834:10;42845:1;42823:5;:24::i;:::-;42854:19;:17;:19::i;:::-;3056:1;42725:154;:::o;42340:38::-;;;;:::o;45974:51::-;;;;:::o;16474:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46814:1695::-;46893:4;46929:16;46937:7;46929;:16::i;:::-;46915:30;;:10;:30;;;46907:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47005:1;46995:6;:11;;;46992:1437;;;47041:16;;47028:9;:29;47020:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47288:14;47379:3;47365:2;47351:12;:16;47340:28;47370:3;47323:51;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47323:51:0;;;47313:62;;;;;;47305:71;;:77;;;;;;47288:94;;47441:1;47434:6;:8;47405:11;:20;47417:7;47405:20;;;;;;;;;;;:26;;:37;;;;46992:1437;;;;47520:1;47510:6;:11;;;47507:922;;;47556:15;;47543:9;:28;47535:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47609:13;47693:3;47685:1;47671:12;:15;47660:27;47643:45;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47643:45:0;;;47633:56;;;;;;47625:65;;:71;;;;;;47609:87;;47759:1;47753:5;:7;47725:11;:20;47737:7;47725:20;;;;;;;;;;;:25;;:35;;;;47507:922;;;;47840:1;47830:6;:11;;;47827:602;;;47896:15;;47877:16;;:34;47863:9;:49;47855:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47950:13;48034:3;48026:1;48012:12;:15;48001:27;47984:45;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47984:45:0;;;47974:56;;;;;;47966:65;;:71;;;;;;47950:87;;48066:14;48157:3;48143:2;48129:12;:16;48118:28;48148:3;48101:51;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;48101:51:0;;;48091:62;;;;;;48083:71;;:77;;;;;;48066:94;;48280:1;48274:5;:7;48246:11;:20;48258:7;48246:20;;;;;;;;;;;:25;;:35;;;;48376:1;48369:6;:8;48340:11;:20;48352:7;48340:20;;;;;;;;;;;:26;;:37;;;;47827:602;;;47507:922;46992:1437;48447:6;;;;;;;;;;;:15;;:26;48463:9;48447:26;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48447:26:0;48491:4;48484:11;;46814:1695;;;;:::o;2823:79::-;2861:7;2888:6;;;;;;;;;;;2881:13;;2823:79;:::o;3158:92::-;3198:4;3236:6;;;;;;;;;;;3222:20;;:10;:20;;;3215:27;;3158:92;:::o;39873:89::-;39914:13;39947:7;39940:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39873:89;:::o;20341:217::-;20427:10;20421:16;;:2;:16;;;;20413:25;;;;;;20486:8;20449:18;:30;20468:10;20449:30;;;;;;;;;;;;;;;:34;20480:2;20449:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;20537:2;20510:40;;20525:10;20510:40;;;20541:8;20510:40;;;;;;;;;;;;;;;;;;;;;;20341:217;;:::o;32064:100::-;32112:7;32139:10;:17;;;;32132:24;;32064:100;:::o;23161:214::-;23268:31;23281:4;23287:2;23291:7;23268:12;:31::i;:::-;23318:48;23341:4;23347:2;23351:7;23360:5;23318:22;:48::i;:::-;23310:57;;;;;;23161:214;;;;:::o;44278:160::-;44337:13;44366:66;44384:14;:12;:14::i;:::-;44399:26;44416:8;44399:16;:26::i;:::-;44366:17;:66::i;:::-;44359:73;;44278:160;;;:::o;45136:496::-;45239:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;45254:19;45276:6;:13;45254:35;;45323:3;45308:11;:18;;45300:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45410:7;45418:1;45410:9;;45406:197;45424:11;45421:1;:14;;;45406:197;;;45461:18;45469:6;45476:1;45469:9;;;;;;;;;;;;;;;;45461:7;:18::i;:::-;45457:135;;45499:38;45517:6;45524:1;45517:9;;;;;;;;;;;;;;;;45528:5;45534:1;45528:8;;;;;;;;;;;;;;;;45499:17;:38::i;:::-;45556:19;:17;:19::i;:::-;45457:135;45437:3;;;;;;;45406:197;;;;45620:4;45613:11;;;45136:496;;;;:::o;46323:93::-;46368:13;46397;46390:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46323:93;:::o;43388:408::-;43462:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;43480:19;43502:6;:13;43480:35;;43547:3;43532:11;:18;;43524:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43592:9;43602:1;43592:11;;43588:183;43606:11;43604:1;:13;43588:183;;;43641:18;43662:17;:15;:17::i;:::-;43641:38;;43690:30;43696:6;43703:1;43696:9;;;;;;;;;;;;;;43707:10;43718:1;43690:5;:30::i;:::-;43731:19;:17;:19::i;:::-;43588:183;43618:3;;;;;;;43588:183;;;;43786:4;43779:11;;;43388:408;;;:::o;44562:402::-;44672:4;44747:27;44791:20;;;;;;;;;;;44747:65;;44864:8;44823:49;;44831:13;:21;;;44853:5;44831:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44831:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44831:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44831:28:0;;;;;;;;;;;;;;;;44823:49;;;44819:85;;;44892:4;44885:11;;;;;44819:85;44919:39;44942:5;44949:8;44919:22;:39::i;:::-;44912:46;;;44562:402;;;;;:::o;3930:117::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;4011:28;4030:8;4011:18;:28::i;:::-;3930:117;:::o;23576:155::-;23633:4;23650:13;23666:11;:20;23678:7;23666:20;;;;;;;;;;;;;;;;;;;;;23650:36;;23721:1;23704:19;;:5;:19;;;;23697:26;;;23576:155;;;:::o;24100:249::-;24185:4;24202:13;24218:16;24226:7;24218;:16::i;:::-;24202:32;;24264:5;24253:16;;:7;:16;;;:51;;;;24297:7;24273:31;;:20;24285:7;24273:11;:20::i;:::-;:31;;;24253:51;:87;;;;24308:32;24325:5;24332:7;24308:16;:32::i;:::-;24253:87;24245:96;;;24100:249;;;;:::o;27867:374::-;27981:4;27961:24;;:16;27969:7;27961;:16::i;:::-;:24;;;27953:33;;;;;;28019:1;28005:16;;:2;:16;;;;27997:25;;;;;;28035:23;28050:7;28035:14;:23::i;:::-;28071:35;:17;:23;28089:4;28071:23;;;;;;;;;;;;;;;:33;:35::i;:::-;28117:33;:17;:21;28135:2;28117:21;;;;;;;;;;;;;;;:31;:33::i;:::-;28186:2;28163:11;:20;28175:7;28163:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;28225:7;28221:2;28206:27;;28215:4;28206:27;;;;;;;;;;;;27867:374;;;:::o;43942:100::-;43991:7;44014:22;44034:1;44014:15;;:19;;:22;;;;:::i;:::-;44007:29;;43942:100;:::o;24600:1051::-;24705:1;24691:16;;:2;:16;;;;24683:25;;;;;;24728:16;24736:7;24728;:16::i;:::-;24727:17;24719:26;;;;;;24779:4;24764:11;;:19;;24756:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24849:2;24826:11;:20;24838:7;24826:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;24862:33;:17;:21;24880:2;24862:21;;;;;;;;;;;;;;;:31;:33::i;:::-;24906:11;;:13;;;;;;;;;;;;;25125;25220:3;25201:1;25187:12;:15;25176:27;25205:9;25159:56;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25159:56:0;;;25149:67;;;;;;25141:76;;:82;;;;;;25125:98;;25241:14;25343:3;25318:2;25304:12;:16;25293:28;25323:3;25328:9;25276:62;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25276:62:0;;;25266:73;;;;;;25258:82;;:88;;;;;;25241:105;;25457:1;25451:5;:7;25423:11;:20;25435:7;25423:20;;;;;;;;;;;:25;;:35;;;;25549:1;25542:6;:8;25513:11;:20;25525:7;25513:20;;;;;;;;;;;:26;;:37;;;;25635:7;25631:2;25610:33;;25627:1;25610:33;;;;;;;;;;;;24600:1051;;;;;:::o;44116:68::-;44161:15;;:17;;;;;;;;;;;;;44116:68::o;14181:114::-;14246:7;14273;:14;;;14266:21;;14181:114;;;:::o;28780:356::-;28902:4;28929:15;:2;:13;;;:15::i;:::-;28924:60;;28968:4;28961:11;;;;28924:60;28996:13;29028:2;29012:36;;;29049:10;29061:4;29067:7;29076:5;29012:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29012:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29012:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29012:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29012:70:0;;;;;;;;;;;;;;;;28996:86;;16750:10;29111:16;;29101:26;;;:6;:26;;;;29093:35;;;28780:356;;;;;;;:::o;5912:406::-;5962:27;6008:1;6002:2;:7;5998:40;;;6020:10;;;;;;;;;;;;;;;;;;;;;5998:40;6044:6;6053:2;6044:11;;6062:8;6077:53;6089:1;6084;:6;6077:53;;6101:5;;;;;;;6120:2;6115:7;;;;;;;;;6077:53;;;6136:17;6166:3;6156:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;6156:14:0;;;;6136:34;;6177:6;6192:1;6186:3;:7;6177:16;;6200:87;6213:1;6207:2;:7;6200:87;;6258:2;6253;:7;;;;;;6248:2;:12;6237:25;;6225:4;6230:3;;;;;;;6225:9;;;;;;;;;;;:37;;;;;;;;;;;6277:2;6271:8;;;;;;;;;6200:87;;;6307:4;6293:19;;;;;;5912:406;;;;:::o;5764:142::-;5842:13;5871:29;5881:2;5885;5871:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;5864:36;;5764:142;;;;:::o;25663:956::-;25774:4;25751:11;:20;25763:7;25751:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25789:35;:17;:23;25807:4;25789:23;;;;;;;;;;;;;;;:33;:35::i;:::-;25835:11;;:13;;;;;;;;;;;;;26055:14;26071:13;26101:42;26088:68;;;26157:7;26088:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26088:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26088:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26088:77:0;;;;;;;;;;;;;;;;;;;;;;;;;26054:111;;;;26421:5;26393:11;:20;26405:7;26393:20;;;;;;;;;;;:25;;:33;;;;26510:6;26481:11;:20;26493:7;26481:20;;;;;;;;;;;:26;;:35;;;;26603:7;26597:4;26576:35;;26593:1;26576:35;;;;;;;;;;;;25663:956;;;;:::o;20887:147::-;20967:4;20991:18;:25;21010:5;20991:25;;;;;;;;;;;;;;;:35;21017:8;20991:35;;;;;;;;;;;;;;;;;;;;;;;;;20984:42;;20887:147;;;;:::o;4197:195::-;4299:1;4279:22;;:8;:22;;;;4271:31;;;;;;4347:8;4318:38;;4339:6;;;;;;;;;;;4318:38;;;;;;;;;;;;4376:8;4367:6;;:17;;;;;;;;;;;;;;;;;;4197:195;:::o;29303:175::-;29403:1;29367:38;;:15;:24;29383:7;29367:24;;;;;;;;;;;;;;;;;;;;;:38;;;29363:108;;29457:1;29422:15;:24;29438:7;29422:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29363:108;29303:175;:::o;14402:110::-;14483:21;14502:1;14483:7;:14;;;:18;;:21;;;;:::i;:::-;14466:7;:14;;:38;;;;14402:110;:::o;14303:91::-;14385:1;14367:7;:14;;;:19;;;;;;;;;;;14303:91;:::o;11448:150::-;11506:7;11526:9;11542:1;11538;:5;11526:17;;11567:1;11562;:6;;11554:15;;;;;;11589:1;11582:8;;;11448:150;;;;:::o;12428:627::-;12488:4;12505:12;13012:7;13000:20;12992:28;;13046:1;13039:4;:8;13032:15;;;12428:627;;;:::o;4566:842::-;4698:13;4720:16;4745:2;4720:28;;4755:16;4780:2;4755:28;;4790:16;4815:2;4790:28;;4825:16;4850:2;4825:28;;4860:16;4885:2;4860:28;;4895:19;4980:3;:10;4967:3;:10;4954:3;:10;4941:3;:10;4928:3;:10;:23;:36;:49;:62;4917:74;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;4917:74:0;;;;4895:96;;4998:19;5026:5;4998:34;;5039:6;5048:1;5039:10;;5061:6;5070:1;5061:10;;5056:58;5077:3;:10;5073:1;:14;5056:58;;;5108:3;5112:1;5108:6;;;;;;;;;;;;;;;;5094;5101:3;;;;;;5094:11;;;;;;;;;;;:20;;;;;;;;;;;5089:3;;;;;;;5056:58;;;;5126:6;5135:1;5126:10;;5121:58;5142:3;:10;5138:1;:14;5121:58;;;5173:3;5177:1;5173:6;;;;;;;;;;;;;;;;5159;5166:3;;;;;;5159:11;;;;;;;;;;;:20;;;;;;;;;;;5154:3;;;;;;;5121:58;;;;5191:6;5200:1;5191:10;;5186:58;5207:3;:10;5203:1;:14;5186:58;;;5238:3;5242:1;5238:6;;;;;;;;;;;;;;;;5224;5231:3;;;;;;5224:11;;;;;;;;;;;:20;;;;;;;;;;;5219:3;;;;;;;5186:58;;;;5256:6;5265:1;5256:10;;5251:58;5272:3;:10;5268:1;:14;5251:58;;;5303:3;5307:1;5303:6;;;;;;;;;;;;;;;;5289;5296:3;;;;;;5289:11;;;;;;;;;;;:20;;;;;;;;;;;5284:3;;;;;;;5251:58;;;;5321:6;5330:1;5321:10;;5316:58;5337:3;:10;5333:1;:14;5316:58;;;5368:3;5372:1;5368:6;;;;;;;;;;;;;;;;5354;5361:3;;;;;;5354:11;;;;;;;;;;;:20;;;;;;;;;;;5349:3;;;;;;;5316:58;;;;5395:6;5381:21;;;;;;;;;;4566:842;;;;;;;:::o;11210:150::-;11268:7;11301:1;11296;:6;;11288:15;;;;;;11314:9;11330:1;11326;:5;11314:17;;11351:1;11344:8;;;11210:150;;;;:::o;45826:2706::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://79b3a09ca0d0a70085882ad9c9690d513cf03a8c3af9a7305903309479ae2490
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.