ERC-721
Overview
Max Total Supply
0 TRII
Holders
1
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
TestRezII
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-10-29 */ // File: https://github.com/0xcert/ethereum-erc721/src/contracts/ownership/ownable.sol pragma solidity 0.8.6; /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { /** * @dev Error constants. */ string public constant NOT_CURRENT_OWNER = "018001"; string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002"; /** * @dev Current owner address. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The constructor sets the original `owner` of the contract to the sender account. */ constructor() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, NOT_CURRENT_OWNER); _; } /** * @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 _newOwner ) public onlyOwner { require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/erc721-metadata.sol pragma solidity 0.8.6; /** * @dev Optional metadata extension for ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721Metadata { /** * @dev Returns a descriptive name for a collection of NFTs in this contract. * @return _name Representing name. */ function name() external view returns (string memory _name); /** * @dev Returns a abbreviated name for a collection of NFTs in this contract. * @return _symbol Representing symbol. */ function symbol() external view returns (string memory _symbol); /** * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file * that conforms to the "ERC721 Metadata JSON Schema". * @return URI of _tokenId. */ function tokenURI(uint256 _tokenId) external view returns (string memory); } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/utils/address-utils.sol pragma solidity 0.8.6; /** * @notice Based on: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol * Requires EIP-1052. * @dev Utility library of inline functions on addresses. */ library AddressUtils { /** * @dev Returns whether the target address is a contract. * @param _addr Address to check. * @return addressCheck True if _addr is a contract, false if not. */ function isContract( address _addr ) internal view returns (bool addressCheck) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(_addr) } // solhint-disable-line addressCheck = (codehash != 0x0 && codehash != accountHash); } } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/utils/erc165.sol pragma solidity 0.8.6; /** * @dev A standard for detecting smart contract interfaces. * See: https://eips.ethereum.org/EIPS/eip-165. */ interface ERC165 { /** * @dev Checks if the smart contract includes a specific interface. * This function uses less than 30,000 gas. * @param _interfaceID The interface identifier, as specified in ERC-165. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external view returns (bool); } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/utils/supports-interface.sol pragma solidity 0.8.6; /** * @dev Implementation of standard for detect smart contract interfaces. */ contract SupportsInterface is ERC165 { /** * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true. */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x01ffc9a7] = true; // ERC165 } /** * @dev Function to check which interfaces are suported by this contract. * @param _interfaceID Id of the interface. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external override view returns (bool) { return supportedInterfaces[_interfaceID]; } } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/erc721-token-receiver.sol pragma solidity 0.8.6; /** * @dev ERC-721 interface for accepting safe transfers. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721TokenReceiver { /** * @notice The contract address is always the message sender. A wallet/broker/auction application * MUST implement the wallet interface if it will accept safe transfers. * @dev Handle the receipt of a NFT. The ERC721 smart contract calls this function on the * recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return * of other than the magic value MUST result in the transaction being reverted. * Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` unless throwing. * @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 Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes calldata _data ) external returns(bytes4); } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/erc721.sol pragma solidity 0.8.6; /** * @dev ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721 { /** * @dev Emits when ownership of any NFT changes by any mechanism. This event emits when NFTs are * created (`from` == 0) and destroyed (`to` == 0). Exception: during contract creation, any * number of NFTs may be created and assigned without emitting Transfer. At the time of any * transfer, the approved address for that NFT (if any) is reset to none. */ event Transfer( address indexed _from, address indexed _to, uint256 indexed _tokenId ); /** * @dev This emits when the approved address for an NFT is changed or reaffirmed. The zero * address indicates there is no approved address. When a Transfer event emits, this also * indicates that the approved address for that NFT (if any) is reset to none. */ event Approval( address indexed _owner, address indexed _approved, uint256 indexed _tokenId ); /** * @dev This emits when an operator is enabled or disabled for an owner. The operator can manage * all NFTs of the owner. */ event ApprovalForAll( address indexed _owner, address indexed _operator, bool _approved ); /** * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this * function checks if `_to` is a smart contract (code size > 0). If so, it calls * `onERC721Received` on `_to` and throws if the return value is not * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`. * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes calldata _data ) external; /** * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "" * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) external; /** * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero * address. Throws if `_tokenId` is not a valid NFT. This function can be changed to payable. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function transferFrom( address _from, address _to, uint256 _tokenId ) external; /** * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is * the current NFT owner, or an authorized operator of the current owner. * @param _approved The new approved NFT controller. * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable. * @param _tokenId The NFT to approve. */ function approve( address _approved, uint256 _tokenId ) external; /** * @notice The contract MUST allow multiple operators per owner. * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external; /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @notice Count all NFTs assigned to an owner. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external view returns (uint256); /** * @notice Find the owner of an NFT. * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external view returns (address); /** * @notice Throws if `_tokenId` is not a valid NFT. * @dev Get the approved address for a single NFT. * @param _tokenId The NFT to find the approved address for. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external view returns (address); /** * @notice Query if an address is an authorized operator for another address. * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external view returns (bool); } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token.sol pragma solidity 0.8.6; /** * @dev Implementation of ERC-721 non-fungible token standard. */ contract NFToken is ERC721, SupportsInterface { using AddressUtils for address; /** * @dev List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant ZERO_ADDRESS = "003001"; string constant NOT_VALID_NFT = "003002"; string constant NOT_OWNER_OR_OPERATOR = "003003"; string constant NOT_OWNER_APPROVED_OR_OPERATOR = "003004"; string constant NOT_ABLE_TO_RECEIVE_NFT = "003005"; string constant NFT_ALREADY_EXISTS = "003006"; string constant NOT_OWNER = "003007"; string constant IS_OWNER = "003008"; /** * @dev Magic value of a smart contract that can receive NFT. * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")). */ bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02; /** * @dev A mapping from NFT ID to the address that owns it. */ mapping (uint256 => address) internal idToOwner; /** * @dev Mapping from NFT ID to approved address. */ mapping (uint256 => address) internal idToApproval; /** * @dev Mapping from owner address to count of their tokens. */ mapping (address => uint256) private ownerToNFTokenCount; /** * @dev Mapping from owner address to mapping of operator addresses. */ mapping (address => mapping (address => bool)) internal ownerToOperators; /** * @dev Guarantees that the msg.sender is an owner or operator of the given NFT. * @param _tokenId ID of the NFT to validate. */ modifier canOperate( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_OR_OPERATOR ); _; } /** * @dev Guarantees that the msg.sender is allowed to transfer NFT. * @param _tokenId ID of the NFT to transfer. */ modifier canTransfer( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || idToApproval[_tokenId] == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_APPROVED_OR_OPERATOR ); _; } /** * @dev Guarantees that _tokenId is a valid Token. * @param _tokenId ID of the NFT to validate. */ modifier validNFToken( uint256 _tokenId ) { require(idToOwner[_tokenId] != address(0), NOT_VALID_NFT); _; } /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x80ac58cd] = true; // ERC721 } /** * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this * function checks if `_to` is a smart contract (code size > 0). If so, it calls * `onERC721Received` on `_to` and throws if the return value is not * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`. * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes calldata _data ) external override { _safeTransferFrom(_from, _to, _tokenId, _data); } /** * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "". * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) external override { _safeTransferFrom(_from, _to, _tokenId, ""); } /** * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero * address. Throws if `_tokenId` is not a valid NFT. This function can be changed to payable. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function transferFrom( address _from, address _to, uint256 _tokenId ) external override canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); } /** * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is * the current NFT owner, or an authorized operator of the current owner. * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable. * @param _approved Address to be approved for the given NFT ID. * @param _tokenId ID of the token to be approved. */ function approve( address _approved, uint256 _tokenId ) external override canOperate(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(_approved != tokenOwner, IS_OWNER); idToApproval[_tokenId] = _approved; emit Approval(tokenOwner, _approved, _tokenId); } /** * @notice This works even if sender doesn't own any tokens at the time. * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external override { ownerToOperators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external override view returns (uint256) { require(_owner != address(0), ZERO_ADDRESS); return _getOwnerNFTCount(_owner); } /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return _owner Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external override view returns (address _owner) { _owner = idToOwner[_tokenId]; require(_owner != address(0), NOT_VALID_NFT); } /** * @notice Throws if `_tokenId` is not a valid NFT. * @dev Get the approved address for a single NFT. * @param _tokenId ID of the NFT to query the approval of. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (address) { return idToApproval[_tokenId]; } /** * @dev Checks if `_operator` is an approved operator for `_owner`. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external override view returns (bool) { return ownerToOperators[_owner][_operator]; } /** * @notice Does NO checks. * @dev Actually performs the transfer. * @param _to Address of a new owner. * @param _tokenId The NFT that is being transferred. */ function _transfer( address _to, uint256 _tokenId ) internal { address from = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(from, _tokenId); _addNFToken(_to, _tokenId); emit Transfer(from, _to, _tokenId); } /** * @notice This is an internal function which should be called from user-implemented external * mint function. Its purpose is to show and properly initialize data structures when using this * implementation. * @dev Mints a new NFT. * @param _to The address that will own the minted NFT. * @param _tokenId of the NFT to be minted by the msg.sender. */ function _mint( address _to, uint256 _tokenId ) internal virtual { require(_to != address(0), ZERO_ADDRESS); require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); _addNFToken(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @notice This is an internal function which should be called from user-implemented external burn * function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @dev Burns a NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal virtual validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(tokenOwner, _tokenId); emit Transfer(tokenOwner, address(0), _tokenId); } /** * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @dev Removes a NFT from owner. * @param _from Address from which we want to remove the NFT. * @param _tokenId Which NFT we want to remove. */ function _removeNFToken( address _from, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == _from, NOT_OWNER); ownerToNFTokenCount[_from] -= 1; delete idToOwner[_tokenId]; } /** * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @dev Assigns a new NFT to owner. * @param _to Address to which we want to add the NFT. * @param _tokenId Which NFT we want to add. */ function _addNFToken( address _to, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); idToOwner[_tokenId] = _to; ownerToNFTokenCount[_to] += 1; } /** * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable * extension to remove double storage (gas optimization) of owner NFT count. * @param _owner Address for whom to query the count. * @return Number of _owner NFTs. */ function _getOwnerNFTCount( address _owner ) internal virtual view returns (uint256) { return ownerToNFTokenCount[_owner]; } /** * @dev Actually perform the safeTransferFrom. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function _safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes memory _data ) private canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); if (_to.isContract()) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data); require(retval == MAGIC_ON_ERC721_RECEIVED, NOT_ABLE_TO_RECEIVE_NFT); } } /** * @dev Clears the current approval of a given NFT ID. * @param _tokenId ID of the NFT to be transferred. */ function _clearApproval( uint256 _tokenId ) private { delete idToApproval[_tokenId]; } } // File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol pragma solidity 0.8.6; /** * @dev Optional metadata implementation for ERC-721 non-fungible token standard. */ contract NFTokenMetadata is NFToken, ERC721Metadata { /** * @dev A descriptive name for a collection of NFTs. */ string internal nftName; /** * @dev An abbreviated name for NFTokens. */ string internal nftSymbol; /** * @dev Mapping from NFT ID to metadata uri. */ mapping (uint256 => string) internal idToUri; /** * @notice When implementing this contract don't forget to set nftName and nftSymbol. * @dev Contract constructor. */ constructor() { supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata } /** * @dev Returns a descriptive name for a collection of NFTokens. * @return _name Representing name. */ function name() external override view returns (string memory _name) { _name = nftName; } /** * @dev Returns an abbreviated name for NFTokens. * @return _symbol Representing symbol. */ function symbol() external override view returns (string memory _symbol) { _symbol = nftSymbol; } /** * @dev A distinct URI (RFC 3986) for a given NFT. * @param _tokenId Id for which we want uri. * @return URI of _tokenId. */ function tokenURI( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (string memory) { return idToUri[_tokenId]; } /** * @notice This is an internal function which should be called from user-implemented external * burn function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @dev Burns a NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal override virtual { super._burn(_tokenId); delete idToUri[_tokenId]; } /** * @notice This is an internal function which should be called from user-implemented external * function. Its purpose is to show and properly initialize data structures when using this * implementation. * @dev Set a distinct URI (RFC 3986) for a given NFT ID. * @param _tokenId Id for which we want URI. * @param _uri String representing RFC 3986 URI. */ function _setTokenUri( uint256 _tokenId, string memory _uri ) internal validNFToken(_tokenId) { idToUri[_tokenId] = _uri; } } // File: contracts/TestRezII.sol pragma solidity 0.8.6; contract TestRezII is NFTokenMetadata, Ownable { constructor() { nftName = "TestRezII"; nftSymbol = "TRII"; } function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner { super._mint(_to, _tokenId); super._setTokenUri(_tokenId, _uri); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060016000806301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000806380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600080635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600981526020017f5465737452657a494900000000000000000000000000000000000000000000008152506005908051906020019062000193929190620001e8565b506040518060400160405280600481526020017f545249490000000000000000000000000000000000000000000000000000000081525060069080519060200190620001e1929190620001e8565b50620002fd565b828054620001f69062000298565b90600052602060002090601f0160209004810192826200021a576000855562000266565b82601f106200023557805160ff191683800117855562000266565b8280016001018555821562000266579182015b828111156200026557825182559160200191906001019062000248565b5b50905062000275919062000279565b5090565b5b80821115620002945760008160009055506001016200027a565b5090565b60006002820490506001821680620002b157607f821691505b60208210811415620002c857620002c7620002ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612d55806200030d6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c87b56dd11610071578063c87b56dd146102df578063d3fc98641461030f578063e985e9c51461032b578063f2fde38b1461035b578063f3fe3bc31461037757610116565b80638da5cb5b1461026b57806395d89b4114610289578063a22cb465146102a7578063b88d4fde146102c357610116565b806323b872dd116100e957806323b872dd146101b557806342842e0e146101d15780636352211e146101ed57806370a082311461021d578063860d248a1461024d57610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b610135600480360381019061013091906128bb565b610395565b6040516101429190612a48565b60405180910390f35b6101536103fc565b6040516101609190612a63565b60405180910390f35b610183600480360381019061017e9190612915565b61048e565b60405161019091906129e1565b60405180910390f35b6101b360048036038101906101ae9190612807565b6105a9565b005b6101cf60048036038101906101ca91906126ec565b61098c565b005b6101eb60048036038101906101e691906126ec565b610dde565b005b61020760048036038101906102029190612915565b610dfe565b60405161021491906129e1565b60405180910390f35b6102376004803603810190610232919061267f565b610ee4565b6040516102449190612a85565b60405180910390f35b610255610f9e565b6040516102629190612a63565b60405180910390f35b610273610fd7565b60405161028091906129e1565b60405180910390f35b610291610ffd565b60405161029e9190612a63565b60405180910390f35b6102c160048036038101906102bc91906127c7565b61108f565b005b6102dd60048036038101906102d8919061273f565b61118c565b005b6102f960048036038101906102f49190612915565b6111e3565b6040516103069190612a63565b60405180910390f35b61032960048036038101906103249190612847565b611366565b005b610345600480360381019061034091906126ac565b61148d565b6040516103529190612a48565b60405180910390f35b6103756004803603810190610370919061267f565b611521565b005b61037f611753565b60405161038c9190612a63565b60405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606005805461040b90612c09565b80601f016020809104026020016040519081016040528092919081815260200182805461043790612c09565b80156104845780601f1061045957610100808354040283529160200191610484565b820191906000526020600020905b81548152906001019060200180831161046757829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303200000000000000000000000000000000000000000000000000008152509061056c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105639190612a63565b60405180910390fd5b506002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806106a25750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303033000000000000000000000000000000000000000000000000000081525090610719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107109190612a63565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ed9190612a63565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030380000000000000000000000000000000000000000000000000000815250906108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd9190612a63565b60405180910390fd5b50856002600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a5d57503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610aee5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090610b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5c9190612a63565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c399190612a63565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d189190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc19190612a63565b60405180910390fd5b50610dd5868661178c565b50505050505050565b610df983838360405180602001604052806000815250611841565b505050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed59190612a63565b60405180910390fd5b50919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f849190612a63565b60405180910390fd5b50610f9782611e0f565b9050919050565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606006805461100c90612c09565b80601f016020809104026020016040519081016040528092919081815260200182805461103890612c09565b80156110855780601f1061105a57610100808354040283529160200191611085565b820191906000526020600020905b81548152906001019060200180831161106857829003601f168201915b5050505050905090565b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111809190612a48565b60405180910390a35050565b6111dc85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611841565b5050505050565b606081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b89190612a63565b60405180910390fd5b506007600084815260200190815260200160002080546112e090612c09565b80601f016020809104026020016040519081016040528092919081815260200182805461130c90612c09565b80156113595780601f1061132e57610100808354040283529160200191611359565b820191906000526020600020905b81548152906001019060200180831161133c57829003601f168201915b5050505050915050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061142e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114259190612a63565b60405180910390fd5b506114398484611e58565b6114878383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612046565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e09190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525090611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116899190612a63565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506117cd82612150565b6117d78183612189565b6117e183836122f4565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061191257503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806119a35750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a119190612a63565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee9190612a63565b60405180910390fd5b5060006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd9190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c769190612a63565b60405180910390fd5b50611c8a878761178c565b611ca98773ffffffffffffffffffffffffffffffffffffffff1661247c565b15611e055760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401611cef94939291906129fc565b602060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4191906128e8565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f303033303035000000000000000000000000000000000000000000000000000081525090611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99190612a63565b60405180910390fd5b50505b5050505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef79190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303036000000000000000000000000000000000000000000000000000081525090611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd29190612a63565b60405180910390fd5b50611fe682826122f4565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b81600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121199190612a63565b60405180910390fd5b508160076000858152602001908152602001600020908051906020019061214a9291906124c7565b50505050565b6002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b8173ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090612262576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122599190612a63565b60405180910390fd5b506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b39190612b2e565b925050819055506001600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030360000000000000000000000000000000000000000000000000000815250906123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c59190612a63565b60405180910390fd5b50816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124719190612ad8565b925050819055505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156124be5750808214155b92505050919050565b8280546124d390612c09565b90600052602060002090601f0160209004810192826124f5576000855561253c565b82601f1061250e57805160ff191683800117855561253c565b8280016001018555821561253c579182015b8281111561253b578251825591602001919060010190612520565b5b509050612549919061254d565b5090565b5b8082111561256657600081600090555060010161254e565b5090565b60008135905061257981612cc3565b92915050565b60008135905061258e81612cda565b92915050565b6000813590506125a381612cf1565b92915050565b6000815190506125b881612cf1565b92915050565b60008083601f8401126125d4576125d3612c9e565b5b8235905067ffffffffffffffff8111156125f1576125f0612c99565b5b60208301915083600182028301111561260d5761260c612ca3565b5b9250929050565b60008083601f84011261262a57612629612c9e565b5b8235905067ffffffffffffffff81111561264757612646612c99565b5b60208301915083600182028301111561266357612662612ca3565b5b9250929050565b60008135905061267981612d08565b92915050565b60006020828403121561269557612694612cad565b5b60006126a38482850161256a565b91505092915050565b600080604083850312156126c3576126c2612cad565b5b60006126d18582860161256a565b92505060206126e28582860161256a565b9150509250929050565b60008060006060848603121561270557612704612cad565b5b60006127138682870161256a565b93505060206127248682870161256a565b92505060406127358682870161266a565b9150509250925092565b60008060008060006080868803121561275b5761275a612cad565b5b60006127698882890161256a565b955050602061277a8882890161256a565b945050604061278b8882890161266a565b935050606086013567ffffffffffffffff8111156127ac576127ab612ca8565b5b6127b8888289016125be565b92509250509295509295909350565b600080604083850312156127de576127dd612cad565b5b60006127ec8582860161256a565b92505060206127fd8582860161257f565b9150509250929050565b6000806040838503121561281e5761281d612cad565b5b600061282c8582860161256a565b925050602061283d8582860161266a565b9150509250929050565b6000806000806060858703121561286157612860612cad565b5b600061286f8782880161256a565b94505060206128808782880161266a565b935050604085013567ffffffffffffffff8111156128a1576128a0612ca8565b5b6128ad87828801612614565b925092505092959194509250565b6000602082840312156128d1576128d0612cad565b5b60006128df84828501612594565b91505092915050565b6000602082840312156128fe576128fd612cad565b5b600061290c848285016125a9565b91505092915050565b60006020828403121561292b5761292a612cad565b5b60006129398482850161266a565b91505092915050565b61294b81612b62565b82525050565b61295a81612b74565b82525050565b600061296b82612aa0565b6129758185612ab6565b9350612985818560208601612bd6565b61298e81612cb2565b840191505092915050565b60006129a482612aab565b6129ae8185612ac7565b93506129be818560208601612bd6565b6129c781612cb2565b840191505092915050565b6129db81612bcc565b82525050565b60006020820190506129f66000830184612942565b92915050565b6000608082019050612a116000830187612942565b612a1e6020830186612942565b612a2b60408301856129d2565b8181036060830152612a3d8184612960565b905095945050505050565b6000602082019050612a5d6000830184612951565b92915050565b60006020820190508181036000830152612a7d8184612999565b905092915050565b6000602082019050612a9a60008301846129d2565b92915050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ae382612bcc565b9150612aee83612bcc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b2357612b22612c3b565b5b828201905092915050565b6000612b3982612bcc565b9150612b4483612bcc565b925082821015612b5757612b56612c3b565b5b828203905092915050565b6000612b6d82612bac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015612bf4578082015181840152602081019050612bd9565b83811115612c03576000848401525b50505050565b60006002820490506001821680612c2157607f821691505b60208210811415612c3557612c34612c6a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b612ccc81612b62565b8114612cd757600080fd5b50565b612ce381612b74565b8114612cee57600080fd5b50565b612cfa81612b80565b8114612d0557600080fd5b50565b612d1181612bcc565b8114612d1c57600080fd5b5056fea2646970667358221220f441530776cec259c09935e145dab2dad5ef47bb26fae04ae55328fc4a1dea7464736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c87b56dd11610071578063c87b56dd146102df578063d3fc98641461030f578063e985e9c51461032b578063f2fde38b1461035b578063f3fe3bc31461037757610116565b80638da5cb5b1461026b57806395d89b4114610289578063a22cb465146102a7578063b88d4fde146102c357610116565b806323b872dd116100e957806323b872dd146101b557806342842e0e146101d15780636352211e146101ed57806370a082311461021d578063860d248a1461024d57610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b610135600480360381019061013091906128bb565b610395565b6040516101429190612a48565b60405180910390f35b6101536103fc565b6040516101609190612a63565b60405180910390f35b610183600480360381019061017e9190612915565b61048e565b60405161019091906129e1565b60405180910390f35b6101b360048036038101906101ae9190612807565b6105a9565b005b6101cf60048036038101906101ca91906126ec565b61098c565b005b6101eb60048036038101906101e691906126ec565b610dde565b005b61020760048036038101906102029190612915565b610dfe565b60405161021491906129e1565b60405180910390f35b6102376004803603810190610232919061267f565b610ee4565b6040516102449190612a85565b60405180910390f35b610255610f9e565b6040516102629190612a63565b60405180910390f35b610273610fd7565b60405161028091906129e1565b60405180910390f35b610291610ffd565b60405161029e9190612a63565b60405180910390f35b6102c160048036038101906102bc91906127c7565b61108f565b005b6102dd60048036038101906102d8919061273f565b61118c565b005b6102f960048036038101906102f49190612915565b6111e3565b6040516103069190612a63565b60405180910390f35b61032960048036038101906103249190612847565b611366565b005b610345600480360381019061034091906126ac565b61148d565b6040516103529190612a48565b60405180910390f35b6103756004803603810190610370919061267f565b611521565b005b61037f611753565b60405161038c9190612a63565b60405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606005805461040b90612c09565b80601f016020809104026020016040519081016040528092919081815260200182805461043790612c09565b80156104845780601f1061045957610100808354040283529160200191610484565b820191906000526020600020905b81548152906001019060200180831161046757829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303200000000000000000000000000000000000000000000000000008152509061056c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105639190612a63565b60405180910390fd5b506002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806106a25750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303033000000000000000000000000000000000000000000000000000081525090610719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107109190612a63565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ed9190612a63565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030380000000000000000000000000000000000000000000000000000815250906108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd9190612a63565b60405180910390fd5b50856002600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a5d57503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610aee5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090610b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5c9190612a63565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c399190612a63565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d189190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc19190612a63565b60405180910390fd5b50610dd5868661178c565b50505050505050565b610df983838360405180602001604052806000815250611841565b505050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed59190612a63565b60405180910390fd5b50919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f849190612a63565b60405180910390fd5b50610f9782611e0f565b9050919050565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606006805461100c90612c09565b80601f016020809104026020016040519081016040528092919081815260200182805461103890612c09565b80156110855780601f1061105a57610100808354040283529160200191611085565b820191906000526020600020905b81548152906001019060200180831161106857829003601f168201915b5050505050905090565b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111809190612a48565b60405180910390a35050565b6111dc85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611841565b5050505050565b606081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b89190612a63565b60405180910390fd5b506007600084815260200190815260200160002080546112e090612c09565b80601f016020809104026020016040519081016040528092919081815260200182805461130c90612c09565b80156113595780601f1061132e57610100808354040283529160200191611359565b820191906000526020600020905b81548152906001019060200180831161133c57829003601f168201915b5050505050915050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061142e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114259190612a63565b60405180910390fd5b506114398484611e58565b6114878383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612046565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e09190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525090611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116899190612a63565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506117cd82612150565b6117d78183612189565b6117e183836122f4565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061191257503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806119a35750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a119190612a63565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee9190612a63565b60405180910390fd5b5060006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd9190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c769190612a63565b60405180910390fd5b50611c8a878761178c565b611ca98773ffffffffffffffffffffffffffffffffffffffff1661247c565b15611e055760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401611cef94939291906129fc565b602060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4191906128e8565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f303033303035000000000000000000000000000000000000000000000000000081525090611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99190612a63565b60405180910390fd5b50505b5050505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef79190612a63565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303036000000000000000000000000000000000000000000000000000081525090611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd29190612a63565b60405180910390fd5b50611fe682826122f4565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b81600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121199190612a63565b60405180910390fd5b508160076000858152602001908152602001600020908051906020019061214a9291906124c7565b50505050565b6002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b8173ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090612262576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122599190612a63565b60405180910390fd5b506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b39190612b2e565b925050819055506001600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030360000000000000000000000000000000000000000000000000000815250906123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c59190612a63565b60405180910390fd5b50816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124719190612ad8565b925050819055505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156124be5750808214155b92505050919050565b8280546124d390612c09565b90600052602060002090601f0160209004810192826124f5576000855561253c565b82601f1061250e57805160ff191683800117855561253c565b8280016001018555821561253c579182015b8281111561253b578251825591602001919060010190612520565b5b509050612549919061254d565b5090565b5b8082111561256657600081600090555060010161254e565b5090565b60008135905061257981612cc3565b92915050565b60008135905061258e81612cda565b92915050565b6000813590506125a381612cf1565b92915050565b6000815190506125b881612cf1565b92915050565b60008083601f8401126125d4576125d3612c9e565b5b8235905067ffffffffffffffff8111156125f1576125f0612c99565b5b60208301915083600182028301111561260d5761260c612ca3565b5b9250929050565b60008083601f84011261262a57612629612c9e565b5b8235905067ffffffffffffffff81111561264757612646612c99565b5b60208301915083600182028301111561266357612662612ca3565b5b9250929050565b60008135905061267981612d08565b92915050565b60006020828403121561269557612694612cad565b5b60006126a38482850161256a565b91505092915050565b600080604083850312156126c3576126c2612cad565b5b60006126d18582860161256a565b92505060206126e28582860161256a565b9150509250929050565b60008060006060848603121561270557612704612cad565b5b60006127138682870161256a565b93505060206127248682870161256a565b92505060406127358682870161266a565b9150509250925092565b60008060008060006080868803121561275b5761275a612cad565b5b60006127698882890161256a565b955050602061277a8882890161256a565b945050604061278b8882890161266a565b935050606086013567ffffffffffffffff8111156127ac576127ab612ca8565b5b6127b8888289016125be565b92509250509295509295909350565b600080604083850312156127de576127dd612cad565b5b60006127ec8582860161256a565b92505060206127fd8582860161257f565b9150509250929050565b6000806040838503121561281e5761281d612cad565b5b600061282c8582860161256a565b925050602061283d8582860161266a565b9150509250929050565b6000806000806060858703121561286157612860612cad565b5b600061286f8782880161256a565b94505060206128808782880161266a565b935050604085013567ffffffffffffffff8111156128a1576128a0612ca8565b5b6128ad87828801612614565b925092505092959194509250565b6000602082840312156128d1576128d0612cad565b5b60006128df84828501612594565b91505092915050565b6000602082840312156128fe576128fd612cad565b5b600061290c848285016125a9565b91505092915050565b60006020828403121561292b5761292a612cad565b5b60006129398482850161266a565b91505092915050565b61294b81612b62565b82525050565b61295a81612b74565b82525050565b600061296b82612aa0565b6129758185612ab6565b9350612985818560208601612bd6565b61298e81612cb2565b840191505092915050565b60006129a482612aab565b6129ae8185612ac7565b93506129be818560208601612bd6565b6129c781612cb2565b840191505092915050565b6129db81612bcc565b82525050565b60006020820190506129f66000830184612942565b92915050565b6000608082019050612a116000830187612942565b612a1e6020830186612942565b612a2b60408301856129d2565b8181036060830152612a3d8184612960565b905095945050505050565b6000602082019050612a5d6000830184612951565b92915050565b60006020820190508181036000830152612a7d8184612999565b905092915050565b6000602082019050612a9a60008301846129d2565b92915050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ae382612bcc565b9150612aee83612bcc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b2357612b22612c3b565b5b828201905092915050565b6000612b3982612bcc565b9150612b4483612bcc565b925082821015612b5757612b56612c3b565b5b828203905092915050565b6000612b6d82612bac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015612bf4578082015181840152602081019050612bd9565b83811115612c03576000848401525b50505050565b60006002820490506001821680612c2157607f821691505b60208210811415612c3557612c34612c6a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b612ccc81612b62565b8114612cd757600080fd5b50565b612ce381612b74565b8114612cee57600080fd5b50565b612cfa81612b80565b8114612d0557600080fd5b50565b612d1181612bcc565b8114612d1c57600080fd5b5056fea2646970667358221220f441530776cec259c09935e145dab2dad5ef47bb26fae04ae55328fc4a1dea7464736f6c63430008060033
Deployed Bytecode Sourcemap
29476:307:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5624:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27591:120;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21570:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19355:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18581:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17826:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21118:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20644:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;546:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;666:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27827:128;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20118:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17206:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28108:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29611:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22022:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1491:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;490:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5624:172;5734:4;5757:19;:33;5777:12;5757:33;;;;;;;;;;;;;;;;;;;;;;;;;;;5750:40;;5624:172;;;:::o;27591:120::-;27659:19;27698:7;27690:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27591:120;:::o;21570:183::-;21699:7;21675:8;16169:1;16138:33;;:9;:19;16148:8;16138:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16173:13;;;;;;;;;;;;;;;;;16130:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21725:12:::1;:22;21738:8;21725:22;;;;;;;;;;;;;;;;;;;;;21718:29;;21570:183:::0;;;;:::o;19355:352::-;19468:8;15322:18;15343:9;:19;15353:8;15343:19;;;;;;;;;;;;;;;;;;;;;15322:40;;15399:10;15385:24;;:10;:24;;;:68;;;;15413:16;:28;15430:10;15413:28;;;;;;;;;;;;;;;:40;15442:10;15413:40;;;;;;;;;;;;;;;;;;;;;;;;;15385:68;15462:21;;;;;;;;;;;;;;;;;15369:121;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19496:8:::1;16169:1;16138:33;;:9;:19;16148:8;16138:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16173:13;;;;;;;;;;;;;;;;::::0;16130:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19516:18:::2;19537:9;:19;19547:8;19537:19;;;;;;;;;;;;;;;;;;;;;19516:40;;19584:10;19571:23;;:9;:23;;;;19596:8;;;;;;;;;;;;;;;;::::0;19563:42:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19639:9;19614:12;:22;19627:8;19614:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19692:8;19681:9;19660:41;;19669:10;19660:41;;;;;;;;;;;;19509:198;15497:1:::1;15315:189:::0;19355:352;;;:::o;18581:353::-;18714:8;15702:18;15723:9;:19;15733:8;15723:19;;;;;;;;;;;;;;;;;;;;;15702:40;;15779:10;15765:24;;:10;:24;;;:71;;;;15826:10;15800:36;;:12;:22;15813:8;15800:22;;;;;;;;;;;;;;;;;;;;;:36;;;15765:71;:122;;;;15847:16;:28;15864:10;15847:28;;;;;;;;;;;;;;;:40;15876:10;15847:40;;;;;;;;;;;;;;;;;;;;;;;;;15765:122;15896:30;;;;;;;;;;;;;;;;;15749:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18742:8:::1;16169:1;16138:33;;:9;:19;16148:8;16138:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16173:13;;;;;;;;;;;;;;;;::::0;16130:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18762:18:::2;18783:9;:19;18793:8;18783:19;;;;;;;;;;;;;;;;;;;;;18762:40;;18831:5;18817:19;;:10;:19;;;18838:9;;;;;;;;;;;;;;;;::::0;18809:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18878:1;18863:17;;:3;:17;;;;18882:12;;;;;;;;;;;;;;;;::::0;18855:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18904:24;18914:3;18919:8;18904:9;:24::i;:::-;18755:179;15940:1:::1;15695:252:::0;18581:353;;;;:::o;17826:179::-;17956:43;17974:5;17981:3;17986:8;17956:43;;;;;;;;;;;;:17;:43::i;:::-;17826:179;;;:::o;21118:208::-;21215:14;21250:9;:19;21260:8;21250:19;;;;;;;;;;;;;;;;;;;;;21241:28;;21302:1;21284:20;;:6;:20;;;;21306:13;;;;;;;;;;;;;;;;;21276:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21118:208;;;:::o;20644:204::-;20741:7;20786:1;20768:20;;:6;:20;;;;20790:12;;;;;;;;;;;;;;;;;20760:43;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20817:25;20835:6;20817:17;:25::i;:::-;20810:32;;20644:204;;;:::o;546:65::-;;;;;;;;;;;;;;;;;;;:::o;666:20::-;;;;;;;;;;;;;:::o;27827:128::-;27897:21;27940:9;27930:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27827:128;:::o;20118:232::-;20275:9;20233:16;:28;20250:10;20233:28;;;;;;;;;;;;;;;:39;20262:9;20233:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;20323:9;20296:48;;20311:10;20296:48;;;20334:9;20296:48;;;;;;:::i;:::-;;;;;;;;20118:232;;:::o;17206:209::-;17363:46;17381:5;17388:3;17393:8;17403:5;;17363:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;17206:209;;;;;:::o;28108:181::-;28234:13;28210:8;16169:1;16138:33;;:9;:19;16148:8;16138:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16173:13;;;;;;;;;;;;;;;;;16130:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28266:7:::1;:17;28274:8;28266:17;;;;;;;;;;;28259:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28108:181:::0;;;;:::o;29611:166::-;1284:5;;;;;;;;;;;1270:19;;:10;:19;;;1291:17;;;;;;;;;;;;;;;;;1262:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29704:26:::1;29716:3;29721:8;29704:11;:26::i;:::-;29737:34;29756:8;29766:4;;29737:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;:34::i;:::-;29611:166:::0;;;;:::o;22022:192::-;22150:4;22173:16;:24;22190:6;22173:24;;;;;;;;;;;;;;;:35;22198:9;22173:35;;;;;;;;;;;;;;;;;;;;;;;;;22166:42;;22022:192;;;;:::o;1491:238::-;1284:5;;;;;;;;;;;1270:19;;:10;:19;;;1291:17;;;;;;;;;;;;;;;;;1262:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1613:1:::1;1592:23;;:9;:23;;;;1617:31;;;;;;;;;;;;;;;;::::0;1584:65:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1689:9;1661:38;;1682:5;;;;;;;;;;;1661:38;;;;;;;;;;;;1714:9;1706:5;;:17;;;;;;;;;;;;;;;;;;1491:238:::0;:::o;490:51::-;;;;;;;;;;;;;;;;;;;:::o;22405:275::-;22494:12;22509:9;:19;22519:8;22509:19;;;;;;;;;;;;;;;;;;;;;22494:34;;22535:24;22550:8;22535:14;:24::i;:::-;22568:30;22583:4;22589:8;22568:14;:30::i;:::-;22605:26;22617:3;22622:8;22605:11;:26::i;:::-;22665:8;22660:3;22645:29;;22654:4;22645:29;;;;;;;;;;;;22487:193;22405:275;;:::o;25808:590::-;25956:8;15702:18;15723:9;:19;15733:8;15723:19;;;;;;;;;;;;;;;;;;;;;15702:40;;15779:10;15765:24;;:10;:24;;;:71;;;;15826:10;15800:36;;:12;:22;15813:8;15800:22;;;;;;;;;;;;;;;;;;;;;:36;;;15765:71;:122;;;;15847:16;:28;15864:10;15847:28;;;;;;;;;;;;;;;:40;15876:10;15847:40;;;;;;;;;;;;;;;;;;;;;;;;;15765:122;15896:30;;;;;;;;;;;;;;;;;15749:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25984:8:::1;16169:1;16138:33;;:9;:19;16148:8;16138:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16173:13;;;;;;;;;;;;;;;;::::0;16130:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26004:18:::2;26025:9;:19;26035:8;26025:19;;;;;;;;;;;;;;;;;;;;;26004:40;;26073:5;26059:19;;:10;:19;;;26080:9;;;;;;;;;;;;;;;;::::0;26051:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26120:1;26105:17;;:3;:17;;;;26124:12;;;;;;;;;;;;;;;;::::0;26097:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26146:24;26156:3;26161:8;26146:9;:24::i;:::-;26183:16;:3;:14;;;:16::i;:::-;26179:214;;;26215:13;26251:3;26231:41;;;26273:10;26285:5;26292:8;26302:5;26231:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26215:93;;14540:10;26335:24;;26325:34;;;:6;:34;;;;26361:23;;;;;;;;;;;;;;;;::::0;26317:68:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26206:187;26179:214;25997:401;15940:1:::1;15695:252:::0;25808:590;;;;;:::o;25367:163::-;25471:7;25497:19;:27;25517:6;25497:27;;;;;;;;;;;;;;;;25490:34;;25367:163;;;:::o;23071:297::-;23192:1;23177:17;;:3;:17;;;;23196:12;;;;;;;;;;;;;;;;;23169:40;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23255:1;23224:33;;:9;:19;23234:8;23224:19;;;;;;;;;;;;;;;;;;;;;:33;;;23259:18;;;;;;;;;;;;;;;;;23216:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23287:26;23299:3;23304:8;23287:11;:26::i;:::-;23353:8;23348:3;23327:35;;23344:1;23327:35;;;;;;;;;;;;23071:297;;:::o;29241:157::-;29348:8;16169:1;16138:33;;:9;:19;16148:8;16138:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16173:13;;;;;;;;;;;;;;;;;16130:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29388:4:::1;29368:7;:17;29376:8;29368:17;;;;;;;;;;;:24;;;;;;;;;;;;:::i;:::-;;29241:157:::0;;;:::o;26531:110::-;26613:12;:22;26626:8;26613:22;;;;;;;;;;;;26606:29;;;;;;;;;;;26531:110;:::o;24328:234::-;24468:5;24445:28;;:9;:19;24455:8;24445:19;;;;;;;;;;;;;;;;;;;;;:28;;;24475:9;;;;;;;;;;;;;;;;;24437:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24522:1;24492:19;:26;24512:5;24492:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;24537:9;:19;24547:8;24537:19;;;;;;;;;;;;24530:26;;;;;;;;;;;24328:234;;:::o;24829:242::-;24972:1;24941:33;;:9;:19;24951:8;24941:19;;;;;;;;;;;;;;;;;;;;;:33;;;24976:18;;;;;;;;;;;;;;;;;24933:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25026:3;25004:9;:19;25014:8;25004:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25064:1;25036:19;:24;25056:3;25036:24;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;24829:242;;:::o;3430:780::-;3513:17;3954:16;3977:19;3999:66;3977:88;;;;4107:5;4095:18;4083:30;;4173:3;4161:15;;:8;:15;;:42;;;;;4192:11;4180:8;:23;;4161:42;4145:59;;3535:675;;3430:780;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;336:5;374:6;361:20;352:29;;390:32;416:5;390:32;:::i;:::-;342:86;;;;:::o;434:141::-;490:5;521:6;515:13;506:22;;537:32;563:5;537:32;:::i;:::-;496:79;;;;:::o;594:552::-;651:8;661:6;711:3;704:4;696:6;692:17;688:27;678:2;;719:79;;:::i;:::-;678:2;832:6;819:20;809:30;;862:18;854:6;851:30;848:2;;;884:79;;:::i;:::-;848:2;998:4;990:6;986:17;974:29;;1052:3;1044:4;1036:6;1032:17;1022:8;1018:32;1015:41;1012:2;;;1059:79;;:::i;:::-;1012:2;668:478;;;;;:::o;1166:553::-;1224:8;1234:6;1284:3;1277:4;1269:6;1265:17;1261:27;1251:2;;1292:79;;:::i;:::-;1251:2;1405:6;1392:20;1382:30;;1435:18;1427:6;1424:30;1421:2;;;1457:79;;:::i;:::-;1421:2;1571:4;1563:6;1559:17;1547:29;;1625:3;1617:4;1609:6;1605:17;1595:8;1591:32;1588:41;1585:2;;;1632:79;;:::i;:::-;1585:2;1241:478;;;;;:::o;1725:139::-;1771:5;1809:6;1796:20;1787:29;;1825:33;1852:5;1825:33;:::i;:::-;1777:87;;;;:::o;1870:329::-;1929:6;1978:2;1966:9;1957:7;1953:23;1949:32;1946:2;;;1984:79;;:::i;:::-;1946:2;2104:1;2129:53;2174:7;2165:6;2154:9;2150:22;2129:53;:::i;:::-;2119:63;;2075:117;1936:263;;;;:::o;2205:474::-;2273:6;2281;2330:2;2318:9;2309:7;2305:23;2301:32;2298:2;;;2336:79;;:::i;:::-;2298:2;2456:1;2481:53;2526:7;2517:6;2506:9;2502:22;2481:53;:::i;:::-;2471:63;;2427:117;2583:2;2609:53;2654:7;2645:6;2634:9;2630:22;2609:53;:::i;:::-;2599:63;;2554:118;2288:391;;;;;:::o;2685:619::-;2762:6;2770;2778;2827:2;2815:9;2806:7;2802:23;2798:32;2795:2;;;2833:79;;:::i;:::-;2795:2;2953:1;2978:53;3023:7;3014:6;3003:9;2999:22;2978:53;:::i;:::-;2968:63;;2924:117;3080:2;3106:53;3151:7;3142:6;3131:9;3127:22;3106:53;:::i;:::-;3096:63;;3051:118;3208:2;3234:53;3279:7;3270:6;3259:9;3255:22;3234:53;:::i;:::-;3224:63;;3179:118;2785:519;;;;;:::o;3310:963::-;3407:6;3415;3423;3431;3439;3488:3;3476:9;3467:7;3463:23;3459:33;3456:2;;;3495:79;;:::i;:::-;3456:2;3615:1;3640:53;3685:7;3676:6;3665:9;3661:22;3640:53;:::i;:::-;3630:63;;3586:117;3742:2;3768:53;3813:7;3804:6;3793:9;3789:22;3768:53;:::i;:::-;3758:63;;3713:118;3870:2;3896:53;3941:7;3932:6;3921:9;3917:22;3896:53;:::i;:::-;3886:63;;3841:118;4026:2;4015:9;4011:18;3998:32;4057:18;4049:6;4046:30;4043:2;;;4079:79;;:::i;:::-;4043:2;4192:64;4248:7;4239:6;4228:9;4224:22;4192:64;:::i;:::-;4174:82;;;;3969:297;3446:827;;;;;;;;:::o;4279:468::-;4344:6;4352;4401:2;4389:9;4380:7;4376:23;4372:32;4369:2;;;4407:79;;:::i;:::-;4369:2;4527:1;4552:53;4597:7;4588:6;4577:9;4573:22;4552:53;:::i;:::-;4542:63;;4498:117;4654:2;4680:50;4722:7;4713:6;4702:9;4698:22;4680:50;:::i;:::-;4670:60;;4625:115;4359:388;;;;;:::o;4753:474::-;4821:6;4829;4878:2;4866:9;4857:7;4853:23;4849:32;4846:2;;;4884:79;;:::i;:::-;4846:2;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;4836:391;;;;;:::o;5233:819::-;5322:6;5330;5338;5346;5395:2;5383:9;5374:7;5370:23;5366:32;5363:2;;;5401:79;;:::i;:::-;5363:2;5521:1;5546:53;5591:7;5582:6;5571:9;5567:22;5546:53;:::i;:::-;5536:63;;5492:117;5648:2;5674:53;5719:7;5710:6;5699:9;5695:22;5674:53;:::i;:::-;5664:63;;5619:118;5804:2;5793:9;5789:18;5776:32;5835:18;5827:6;5824:30;5821:2;;;5857:79;;:::i;:::-;5821:2;5970:65;6027:7;6018:6;6007:9;6003:22;5970:65;:::i;:::-;5952:83;;;;5747:298;5353:699;;;;;;;:::o;6058:327::-;6116:6;6165:2;6153:9;6144:7;6140:23;6136:32;6133:2;;;6171:79;;:::i;:::-;6133:2;6291:1;6316:52;6360:7;6351:6;6340:9;6336:22;6316:52;:::i;:::-;6306:62;;6262:116;6123:262;;;;:::o;6391:349::-;6460:6;6509:2;6497:9;6488:7;6484:23;6480:32;6477:2;;;6515:79;;:::i;:::-;6477:2;6635:1;6660:63;6715:7;6706:6;6695:9;6691:22;6660:63;:::i;:::-;6650:73;;6606:127;6467:273;;;;:::o;6746:329::-;6805:6;6854:2;6842:9;6833:7;6829:23;6825:32;6822:2;;;6860:79;;:::i;:::-;6822:2;6980:1;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6951:117;6812:263;;;;:::o;7081:118::-;7168:24;7186:5;7168:24;:::i;:::-;7163:3;7156:37;7146:53;;:::o;7205:109::-;7286:21;7301:5;7286:21;:::i;:::-;7281:3;7274:34;7264:50;;:::o;7320:360::-;7406:3;7434:38;7466:5;7434:38;:::i;:::-;7488:70;7551:6;7546:3;7488:70;:::i;:::-;7481:77;;7567:52;7612:6;7607:3;7600:4;7593:5;7589:16;7567:52;:::i;:::-;7644:29;7666:6;7644:29;:::i;:::-;7639:3;7635:39;7628:46;;7410:270;;;;;:::o;7686:364::-;7774:3;7802:39;7835:5;7802:39;:::i;:::-;7857:71;7921:6;7916:3;7857:71;:::i;:::-;7850:78;;7937:52;7982:6;7977:3;7970:4;7963:5;7959:16;7937:52;:::i;:::-;8014:29;8036:6;8014:29;:::i;:::-;8009:3;8005:39;7998:46;;7778:272;;;;;:::o;8056:118::-;8143:24;8161:5;8143:24;:::i;:::-;8138:3;8131:37;8121:53;;:::o;8180:222::-;8273:4;8311:2;8300:9;8296:18;8288:26;;8324:71;8392:1;8381:9;8377:17;8368:6;8324:71;:::i;:::-;8278:124;;;;:::o;8408:640::-;8603:4;8641:3;8630:9;8626:19;8618:27;;8655:71;8723:1;8712:9;8708:17;8699:6;8655:71;:::i;:::-;8736:72;8804:2;8793:9;8789:18;8780:6;8736:72;:::i;:::-;8818;8886:2;8875:9;8871:18;8862:6;8818:72;:::i;:::-;8937:9;8931:4;8927:20;8922:2;8911:9;8907:18;8900:48;8965:76;9036:4;9027:6;8965:76;:::i;:::-;8957:84;;8608:440;;;;;;;:::o;9054:210::-;9141:4;9179:2;9168:9;9164:18;9156:26;;9192:65;9254:1;9243:9;9239:17;9230:6;9192:65;:::i;:::-;9146:118;;;;:::o;9270:313::-;9383:4;9421:2;9410:9;9406:18;9398:26;;9470:9;9464:4;9460:20;9456:1;9445:9;9441:17;9434:47;9498:78;9571:4;9562:6;9498:78;:::i;:::-;9490:86;;9388:195;;;;:::o;9589:222::-;9682:4;9720:2;9709:9;9705:18;9697:26;;9733:71;9801:1;9790:9;9786:17;9777:6;9733:71;:::i;:::-;9687:124;;;;:::o;9898:98::-;9949:6;9983:5;9977:12;9967:22;;9956:40;;;:::o;10002:99::-;10054:6;10088:5;10082:12;10072:22;;10061:40;;;:::o;10107:168::-;10190:11;10224:6;10219:3;10212:19;10264:4;10259:3;10255:14;10240:29;;10202:73;;;;:::o;10281:169::-;10365:11;10399:6;10394:3;10387:19;10439:4;10434:3;10430:14;10415:29;;10377:73;;;;:::o;10456:305::-;10496:3;10515:20;10533:1;10515:20;:::i;:::-;10510:25;;10549:20;10567:1;10549:20;:::i;:::-;10544:25;;10703:1;10635:66;10631:74;10628:1;10625:81;10622:2;;;10709:18;;:::i;:::-;10622:2;10753:1;10750;10746:9;10739:16;;10500:261;;;;:::o;10767:191::-;10807:4;10827:20;10845:1;10827:20;:::i;:::-;10822:25;;10861:20;10879:1;10861:20;:::i;:::-;10856:25;;10900:1;10897;10894:8;10891:2;;;10905:18;;:::i;:::-;10891:2;10950:1;10947;10943:9;10935:17;;10812:146;;;;:::o;10964:96::-;11001:7;11030:24;11048:5;11030:24;:::i;:::-;11019:35;;11009:51;;;:::o;11066:90::-;11100:7;11143:5;11136:13;11129:21;11118:32;;11108:48;;;:::o;11162:149::-;11198:7;11238:66;11231:5;11227:78;11216:89;;11206:105;;;:::o;11317:126::-;11354:7;11394:42;11387:5;11383:54;11372:65;;11362:81;;;:::o;11449:77::-;11486:7;11515:5;11504:16;;11494:32;;;:::o;11532:307::-;11600:1;11610:113;11624:6;11621:1;11618:13;11610:113;;;11709:1;11704:3;11700:11;11694:18;11690:1;11685:3;11681:11;11674:39;11646:2;11643:1;11639:10;11634:15;;11610:113;;;11741:6;11738:1;11735:13;11732:2;;;11821:1;11812:6;11807:3;11803:16;11796:27;11732:2;11581:258;;;;:::o;11845:320::-;11889:6;11926:1;11920:4;11916:12;11906:22;;11973:1;11967:4;11963:12;11994:18;11984:2;;12050:4;12042:6;12038:17;12028:27;;11984:2;12112;12104:6;12101:14;12081:18;12078:38;12075:2;;;12131:18;;:::i;:::-;12075:2;11896:269;;;;:::o;12171:180::-;12219:77;12216:1;12209:88;12316:4;12313:1;12306:15;12340:4;12337:1;12330:15;12357:180;12405:77;12402:1;12395:88;12502:4;12499:1;12492:15;12526:4;12523:1;12516:15;12543:117;12652:1;12649;12642:12;12666:117;12775:1;12772;12765:12;12789:117;12898:1;12895;12888:12;12912:117;13021:1;13018;13011:12;13035:117;13144:1;13141;13134:12;13158:102;13199:6;13250:2;13246:7;13241:2;13234:5;13230:14;13226:28;13216:38;;13206:54;;;:::o;13266:122::-;13339:24;13357:5;13339:24;:::i;:::-;13332:5;13329:35;13319:2;;13378:1;13375;13368:12;13319:2;13309:79;:::o;13394:116::-;13464:21;13479:5;13464:21;:::i;:::-;13457:5;13454:32;13444:2;;13500:1;13497;13490:12;13444:2;13434:76;:::o;13516:120::-;13588:23;13605:5;13588:23;:::i;:::-;13581:5;13578:34;13568:2;;13626:1;13623;13616:12;13568:2;13558:78;:::o;13642:122::-;13715:24;13733:5;13715:24;:::i;:::-;13708:5;13705:35;13695:2;;13754:1;13751;13744:12;13695:2;13685:79;:::o
Swarm Source
ipfs://f441530776cec259c09935e145dab2dad5ef47bb26fae04ae55328fc4a1dea74
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.