[ { "inputs": [ { "internalType": "address", "name": "genesisNFT_", "type": "address" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" } ], "stateMutability": "payable", "type": "constructor" }, { "inputs": [], "name": "ERC721Permit__Expired", "type": "error" }, { "inputs": [], "name": "ERC721Permit__SelfApproving", "type": "error" }, { "inputs": [], "name": "ERC721__AlreadyMinted", "type": "error" }, { "inputs": [], "name": "ERC721__InvalidRecipient", "type": "error" }, { "inputs": [], "name": "ERC721__NonZeroAddress", "type": "error" }, { "inputs": [], "name": "ERC721__NotMinted", "type": "error" }, { "inputs": [], "name": "ERC721__Unauthorized", "type": "error" }, { "inputs": [], "name": "ERC721__UnsafeRecipient", "type": "error" }, { "inputs": [], "name": "ERC721__WrongFrom", "type": "error" }, { "inputs": [], "name": "GenesisConvert__Expired", "type": "error" }, { "inputs": [], "name": "GenesisConvert__LengthMismatch", "type": "error" }, { "inputs": [], "name": "GenesisConvert__SelfPermit", "type": "error" }, { "inputs": [], "name": "GenesisConvert__Unauthorized", "type": "error" }, { "inputs": [], "name": "ReentrancyGuard__Locked", "type": "error" }, { "inputs": [], "name": "Rentable__NotValidTransfer", "type": "error" }, { "inputs": [], "name": "Rentable__OnlyOwnerOrApproved", "type": "error" }, { "inputs": [], "name": "Signable__InvalidSignature", "type": "error" }, { "inputs": [], "name": "Transfer__InsufficientBalance", "type": "error" }, { "inputs": [], "name": "Verifier__InvalidSignature", "type": "error" }, { "inputs": [], "name": "Verifier__NotAuthorized", "type": "error" }, { "inputs": [], "name": "Verifier__ZeroAddress", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "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": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "Registered", "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": "id", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "expires", "type": "uint64" } ], "name": "UpdateUser", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "verifier", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newVerifier", "type": "address" } ], "name": "VerifierTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "id", "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": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user_", "type": "address" }, { "components": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "uint48", "name": "typeNFT", "type": "uint48" }, { "internalType": "uint48", "name": "rarity", "type": "uint48" } ], "internalType": "struct IGenesisConvert.Metadata[]", "name": "meta_", "type": "tuple[]" } ], "name": "batchMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "uint48", "name": "typeNFT", "type": "uint48" }, { "internalType": "uint48", "name": "rarity", "type": "uint48" } ], "internalType": "struct IGenesisConvert.Metadata[]", "name": "meta_", "type": "tuple[]" }, { "internalType": "uint256", "name": "deadline_", "type": "uint256" }, { "internalType": "uint8", "name": "v_", "type": "uint8" }, { "internalType": "bytes32", "name": "r_", "type": "bytes32" }, { "internalType": "bytes32", "name": "s_", "type": "bytes32" } ], "name": "batchMintWithSignature", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newGenesis_", "type": "address" } ], "name": "configGenesis", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "uint48", "name": "typeNFT", "type": "uint48" }, { "internalType": "uint48", "name": "rarity", "type": "uint48" } ], "internalType": "struct IGenesisConvert.Metadata[]", "name": "meta_", "type": "tuple[]" }, { "internalType": "uint8", "name": "v_", "type": "uint8" }, { "internalType": "bytes32", "name": "r_", "type": "bytes32" }, { "internalType": "bytes32", "name": "s_", "type": "bytes32" } ], "name": "convert", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "convertVerifier", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "uint48", "name": "typeNFT", "type": "uint48" }, { "internalType": "uint48", "name": "rarity", "type": "uint48" } ], "internalType": "struct IGenesisConvert.Metadata[]", "name": "meta_", "type": "tuple[]" }, { "internalType": "uint256", "name": "deadline_", "type": "uint256" }, { "internalType": "uint8", "name": "v_", "type": "uint8" }, { "internalType": "bytes32", "name": "r_", "type": "bytes32" }, { "internalType": "bytes32", "name": "s_", "type": "bytes32" }, { "internalType": "uint8", "name": "vv_", "type": "uint8" }, { "internalType": "bytes32", "name": "vr_", "type": "bytes32" }, { "internalType": "bytes32", "name": "vs_", "type": "bytes32" } ], "name": "convertWithPermit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "genesis", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "metadata", "outputs": [ { "components": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "uint48", "name": "typeNFT", "type": "uint48" }, { "internalType": "uint48", "name": "rarity", "type": "uint48" } ], "internalType": "struct IGenesisConvert.Metadata", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minterVerifier", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "nonce", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender_", "type": "address" }, { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "internalType": "uint256", "name": "deadline_", "type": "uint256" }, { "internalType": "uint8", "name": "v_", "type": "uint8" }, { "internalType": "bytes32", "name": "r_", "type": "bytes32" }, { "internalType": "bytes32", "name": "s_", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "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": "id", "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": "string", "name": "uri_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newVerifier_", "type": "address" } ], "name": "setConvertVerifier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newVerifier_", "type": "address" } ], "name": "setMinterVerifier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint64", "name": "expires", "type": "uint64" } ], "name": "setUser", "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": "", "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": "id", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "userExpires", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "userOf", "outputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token_", "type": "address" }, { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "withdrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101406040526001600a556040516200353e3803806200353e8339810160408190526200002c916200029f565b81816040518060400160405260068152806020016511d95b93919560d21b815250604051806040016040528060018152602001603160f81b8152508181858581600090816200007c9190620003b8565b5060016200008b8282620003b8565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c05261012052506200013a965062000134955050620001539350505050565b62000157565b6200014583620001a9565b50506001600d555062000484565b3390565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001c8816001600160a01b0316620001ce60201b6200125c1760201c565b600e5550565b6001600160a01b031690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020257600080fd5b81516001600160401b03808211156200021f576200021f620001da565b604051601f8301601f19908116603f011681019082821181831017156200024a576200024a620001da565b816040528381526020925086838588010111156200026757600080fd5b600091505b838210156200028b57858201830151818301840152908201906200026c565b600093810190920192909252949350505050565b600080600060608486031215620002b557600080fd5b83516001600160a01b0381168114620002cd57600080fd5b60208501519093506001600160401b0380821115620002eb57600080fd5b620002f987838801620001f0565b935060408601519150808211156200031057600080fd5b506200031f86828701620001f0565b9150509250925092565b600181811c908216806200033e57607f821691505b6020821081036200035f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003b357600081815260208120601f850160051c810160208610156200038e5750805b601f850160051c820191505b81811015620003af578281556001016200039a565b5050505b505050565b81516001600160401b03811115620003d457620003d4620001da565b620003ec81620003e5845462000329565b8462000365565b602080601f8311600181146200042457600084156200040b5750858301515b600019600386901b1c1916600185901b178555620003af565b600085815260208120601f198616915b82811015620004555788860151825594840194600190910190840162000434565b5085821015620004745787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161306a620004d4600039600061140c0152600061145b015260006114360152600061138f015260006113b9015260006113e3015261306a6000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c80638f56482e11610145578063c2f1f14a116100bd578063e030565e1161008c578063e985e9c511610071578063e985e9c5146105b0578063f2fde38b146105de578063f8165608146105f157600080fd5b8063e030565e146104f1578063e3684e391461050457600080fd5b8063c2f1f14a14610498578063c87b56dd146104ab578063cb095b9e146104be578063ce03fdab146104d157600080fd5b80639e281a9811610114578063a7f0b3de116100f9578063a7f0b3de1461046a578063b88d4fde14610472578063b9a7f9301461048557600080fd5b80639e281a9814610444578063a22cb4651461045757600080fd5b80638f56482e146103e55780638fc88c48146103f857806394cec0a41461042957806395d89b411461043c57600080fd5b80635620eed8116101d857806370a08231116101a75780637ac2ff7b1161018c5780637ac2ff7b146103b05780638da5cb5b146103c35780638dc272af146103d457600080fd5b806370a0823114610395578063715018a6146103a857600080fd5b80635620eed8146103565780636352211e146103695780636703552b1461037c5780636c0360eb1461038d57600080fd5b8063121d76951161022f5780633644e515116102145780633644e5151461031a57806342842e0e1461033057806355f804b31461034357600080fd5b8063121d7695146102f457806323b872dd1461030757600080fd5b806301ffc9a71461026157806306fdde0314610289578063081812fc1461029e578063095ea7b3146102df575b600080fd5b61027461026f36600461257c565b610604565b60405190151581526020015b60405180910390f35b610291610615565b60405161028091906125bd565b6102c76102ac3660046125f0565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610280565b6102f26102ed36600461261e565b6106a3565b005b6102f261030236600461264a565b61076d565b6102f2610315366004612667565b610781565b610322610902565b604051908152602001610280565b6102f261033e366004612667565b610911565b6102f2610351366004612717565b6109eb565b6102f26103643660046127f4565b6109fc565b6102c76103773660046125f0565b610a44565b600c546001600160a01b03166102c7565b610291610a7f565b6103226103a336600461264a565b610b11565b6102f2610b56565b6102f26103be366004612864565b610b6a565b6009546001600160a01b03166102c7565b600b546001600160a01b03166102c7565b6102f26103f33660046128be565b610c92565b6103226104063660046125f0565b600090815260076020526040902054600160a01b900467ffffffffffffffff1690565b6102f2610437366004612913565b610ca5565b610291610d6f565b6102f261045236600461261e565b610d7c565b6102f26104653660046129c0565b610dd6565b6102c7610e42565b6102f26104803660046129f9565b610e4d565b6102f2610493366004612a98565b610f17565b6102c76104a63660046125f0565b610f99565b6102916104b93660046125f0565b610fef565b6102f26104cc36600461264a565b6110d9565b6103226104df3660046125f0565b60009081526006602052604090205490565b6102f26104ff366004612aed565b6110f3565b6105756105123660046125f0565b604080516060808201835260008083526020808401829052928401819052938452600f82529282902082519384018352546001600160a01b038116845265ffffffffffff600160a01b8204811692850192909252600160d01b9004169082015290565b6040805182516001600160a01b0316815260208084015165ffffffffffff908116918301919091529282015190921690820152606001610280565b6102746105be366004612b3c565b600560209081526000928352604080842090915290825290205460ff1681565b6102f26105ec36600461264a565b6111b9565b6102f26105ff36600461264a565b61124b565b600061060f82611268565b92915050565b6000805461062290612b6a565b80601f016020809104026020016040519081016040528092919081815260200182805461064e90612b6a565b801561069b5780601f106106705761010080835404028352916020019161069b565b820191906000526020600020905b81548152906001019060200180831161067e57829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b0316338082148015906106f257506001600160a01b0380831660009081526005602090815260408083209385168352929052205460ff16155b1561071057604051630fd6c38360e11b815260040160405180910390fd5b60008381526004602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918616917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b61077561128d565b61077e816112e7565b50565b6000818152600260205260409020546001600160a01b038481169116146107bb57604051630ef14eef60e01b815260040160405180910390fd5b6001600160a01b0382166107e257604051631476f34960e11b815260040160405180910390fd5b6107ed838383611377565b336001600160a01b038416811480159061082d57506001600160a01b0380851660009081526005602090815260408083209385168352929052205460ff16155b801561085357506000828152600460205260409020546001600160a01b03828116911614155b1561087157604051630fd6c38360e11b815260040160405180910390fd5b6001600160a01b0380851660008181526003602090815260408083208054600019019055938716808352848320805460010190558683526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251859392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45b50505050565b600061090c611382565b905090565b61091c838383610781565b6001600160a01b0382163b158015906109c85750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb9190612ba4565b6001600160e01b03191614155b156109e6576040516312df08fd60e11b815260040160405180910390fd5b505050565b6109f361128d565b61077e816114a9565b600a54600114610a1f5760405163c0d27a9760e01b815260040160405180910390fd5b6002600a55600e54610a36818888888888886114b9565b50506001600a555050505050565b6000818152600260205260409020546001600160a01b031680610a7a57604051637964676b60e11b815260040160405180910390fd5b919050565b606060088054610a8e90612b6a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90612b6a565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b60006001600160a01b038216610b3a576040516301f140db60e71b815260040160405180910390fd5b506001600160a01b031660009081526003602052604090205490565b610b5e61128d565b610b6860006116ff565b565b83421115610b8b57604051633dc305a160e11b815260040160405180910390fd5b6000610b9686610a44565b9050806001600160a01b0316876001600160a01b031603610bca57604051636916b4d560e01b815260040160405180910390fd5b610c5f817f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8989610c0f81600090815260066020526040902080546001810190915590565b6040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810188905260c00160405160208183030381529060405280519060200120868686611751565b5050506000928352505060046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610c9a61128d565b6109e6838383611766565b600a54600114610cc85760405163c0d27a9760e01b815260040160405180910390fd5b6002600a55600e54604051637ac2ff7b60e01b8152306004820152602481018c90526044810189905260ff881660648201526084810187905260a481018690526001600160a01b03821690637ac2ff7b9060c401600060405180830381600087803b158015610d3657600080fd5b505af1158015610d4a573d6000803e3d6000fd5b50505050610d5d818c8c8c8888886114b9565b50506001600a55505050505050505050565b6001805461062290612b6a565b610d8461128d565b610d8f82338361190f565b816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051610dca91815260200190565b60405180910390a25050565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155905190815283917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600061090c600e5490565b610e58858585610781565b6001600160a01b0384163b15801590610ef25750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610ea29033908a90899089908990600401612bc1565b6020604051808303816000875af1158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee59190612ba4565b6001600160e01b03191614155b15610f10576040516312df08fd60e11b815260040160405180910390fd5b5050505050565b33610f2185611a00565b600b54604051610f85916001600160a01b0316908390610f47908b908b90602001612c2b565b60408051601f1981840301815290829052610f6792918a90602001612cab565b60405160208183030381529060405280519060200120868686611a21565b610f90818888611766565b50505050505050565b60008181526007602090815260408083208151808301909252546001600160a01b0381168252600160a01b900467ffffffffffffffff1691810182905290421115610fe5576000610fe8565b80515b9392505050565b6060610ffa82610a44565b5060006008805461100a90612b6a565b80601f016020809104026020016040519081016040528092919081815260200182805461103690612b6a565b80156110835780601f1061105857610100808354040283529160200191611083565b820191906000526020600020905b81548152906001019060200180831161106657829003601f168201915b5050505050905060008151116110a85760405180602001604052806000815250610fe8565b806110b284611a7c565b6040516020016110c3929190612cea565b6040516020818303038152906040529392505050565b6110e161128d565b61077e816001600160a01b0316600e55565b6110fd3384611b9d565b61111a576040516355dc74f760e11b815260040160405180910390fd5b60008381526007602081815260408084208151808301835281546001600160a01b0389811680845267ffffffffffffffff8a81168589018181529a8e90529888528451995116600160a01b026001600160e01b03199093169890911697909717179091559051928352929186917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe91015b60405180910390a350505050565b6111c161128d565b6001600160a01b0381166112425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61077e816116ff565b61125361128d565b61077e81611c18565b6001600160a01b031690565b60006001600160e01b03198216632b424ad760e21b148061060f575061060f82611ca8565b6009546001600160a01b03163314610b685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611239565b6001600160a01b03811661130e576040516319dfc00d60e21b815260040160405180910390fd5b600b54604080516001600160a01b03928316815291831660208301527f47e559da6059508432805319328633c48414988cc64bc54b540f9e9924ea7c23910160405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6109e6838383611cf6565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156113db57507f000000000000000000000000000000000000000000000000000000000000000046145b1561140557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60086114b58282612d67565b5050565b6000336040516323b872dd60e01b81526001600160a01b038083166004830152306024830152604482018a9052919250908916906323b872dd90606401600060405180830381600087803b15801561151057600080fd5b505af1158015611524573d6000803e3d6000fd5b5050604051630852cd8d60e31b8152600481018a90526001600160a01b038b1692506342966c689150602401600060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b505060405163e3684e3960e01b8152600481018a9052600092506001600160a01b038b16915063e3684e39906024016040805180830381865afa1580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed9190612e27565b6040516313535f7360e21b815260048101829052909250600091506001600160a01b038b1690634d4d7dcc90602401608060405180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165d9190612e55565b93505050878214905061168357604051635f525f9560e11b815260040160405180910390fd5b600c546040516116e8916001600160a01b03169085908c906116ab908d908d90602001612c2b565b60408051601f19818403018152908290526116ca939291602001612e94565b60405160208183030381529060405280519060200120888888611a21565b6116f3838989611766565b50505050505050505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610f108561175e86611dd1565b858585611e1f565b600d54819060005b828110156118c257604051806060016040528086868481811061179357611793612ed3565b6117a9926020606090920201908101915061264a565b6001600160a01b031681526020018686848181106117c9576117c9612ed3565b90506060020160200160208101906117e19190612ee9565b65ffffffffffff16815260200186868481811061180057611800612ed3565b90506060020160400160208101906118189190612ee9565b65ffffffffffff9081169091526000848152600f6020908152604091829020845181549286015195909301518416600160d01b0279ffffffffffffffffffffffffffffffffffffffffffffffffffff95909416600160a01b027fffffffffffff00000000000000000000000000000000000000000000000000009092166001600160a01b039093169290921717929092161790556118b68683611e5c565b6001918201910161176e565b50600d81905560405182815281906001600160a01b038716907fcda33a906ffa8a5f960826827500581f4613a5db7a84b250433e0d591a6309389060200160405180910390a35050505050565b8060000361191c57505050565b6001600160a01b03821661192f57505050565b6001600160a01b03831615801561194f57506001600160a01b0382163014155b156119ec5760408051600080825260208201928390529182916001600160a01b03861691859161197e91612f04565b60006040518083038185875af1925050503d80600081146119bb576040519150601f19603f3d011682016040523d82523d6000602084013e6119c0565b606091505b509150915081610f10576119d381611f2d565b60405162461bcd60e51b815260040161123991906125bd565b6109e66001600160a01b0384168383611f67565b8042111561077e57604051630833dbeb60e21b815260040160405180910390fd5b610f108561175e866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b606081600003611aa35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611acd5780611ab781612f36565b9150611ac69050600a83612f65565b9150611aa7565b60008167ffffffffffffffff811115611ae857611ae86126a8565b6040519080825280601f01601f191660200182016040528015611b12576020820181803683370190505b5090505b8415611b9557611b27600183612f79565b9150611b34600a86612f8c565b611b3f906030612fa0565b60f81b818381518110611b5457611b54612ed3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b8e600a86612f65565b9450611b16565b949350505050565b600080611ba983610a44565b9050806001600160a01b0316846001600160a01b03161480611bf057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80611b95575050506000908152600460205260409020546001600160a01b0390811691161490565b6001600160a01b038116611c3f576040516319dfc00d60e21b815260040160405180910390fd5b600c54604080516001600160a01b03928316815291831660208301527f47e559da6059508432805319328633c48414988cc64bc54b540f9e9924ea7c23910160405180910390a1600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006301ffc9a760e01b6001600160e01b031983161480611cd957506380ac58cd60e01b6001600160e01b03198316145b8061060f5750506001600160e01b031916635b5e139f60e01b1490565b6000818152600760209081526040918290208251808401909352546001600160a01b0381168352600160a01b900467ffffffffffffffff16908201819052421015611d5457604051637a9bf00f60e01b815260040160405180910390fd5b826001600160a01b0316846001600160a01b031614158015611d7f575080516001600160a01b031615155b156108fc57600082815260076020908152604080832080546001600160e01b03191690555182815284917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe91016111ab565b600061060f611dde611382565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6001600160a01b038516611e3585858585611fce565b6001600160a01b031614610f105760405163f1787e4560e01b815260040160405180910390fd5b611e668282611ff6565b6001600160a01b0382163b15801590611f0f5750604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190612ba4565b6001600160e01b03191614155b156114b5576040516312df08fd60e11b815260040160405180910390fd5b6060604482511015611f4d57505060408051602081019091526000815290565b6004820191508180602001905181019061060f9190612fb3565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b1790526109e69084906120ca565b6000806000611fdf878787876121af565b91509150611fec8161229c565b5095945050505050565b6001600160a01b03821661201d57604051631476f34960e11b815260040160405180910390fd5b6000818152600260205260409020546001600160a01b0316156120535760405163ec125a8560e01b815260040160405180910390fd5b61205f60008383611377565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061211f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124529092919063ffffffff16565b8051909150156109e6578080602001905181019061213d919061302a565b6109e65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611239565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156121e65750600090506003612293565b8460ff16601b141580156121fe57508460ff16601c14155b1561220f5750600090506004612293565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612263573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661228c57600060019250925050612293565b9150600090505b94509492505050565b60008160048111156122b0576122b0613047565b036122b85750565b60018160048111156122cc576122cc613047565b036123195760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611239565b600281600481111561232d5761232d613047565b0361237a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611239565b600381600481111561238e5761238e613047565b036123e65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611239565b60048160048111156123fa576123fa613047565b0361077e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611239565b6060611b958484600085856001600160a01b0385163b6124b45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611239565b600080866001600160a01b031685876040516124d09190612f04565b60006040518083038185875af1925050503d806000811461250d576040519150601f19603f3d011682016040523d82523d6000602084013e612512565b606091505b509150915061252282828661252d565b979650505050505050565b6060831561253c575081610fe8565b82511561254c5782518084602001fd5b8160405162461bcd60e51b815260040161123991906125bd565b6001600160e01b03198116811461077e57600080fd5b60006020828403121561258e57600080fd5b8135610fe881612566565b60005b838110156125b457818101518382015260200161259c565b50506000910152565b60208152600082518060208401526125dc816040850160208701612599565b601f01601f19169190910160400192915050565b60006020828403121561260257600080fd5b5035919050565b6001600160a01b038116811461077e57600080fd5b6000806040838503121561263157600080fd5b823561263c81612609565b946020939093013593505050565b60006020828403121561265c57600080fd5b8135610fe881612609565b60008060006060848603121561267c57600080fd5b833561268781612609565b9250602084013561269781612609565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126e7576126e76126a8565b604052919050565b600067ffffffffffffffff821115612709576127096126a8565b50601f01601f191660200190565b60006020828403121561272957600080fd5b813567ffffffffffffffff81111561274057600080fd5b8201601f8101841361275157600080fd5b803561276461275f826126ef565b6126be565b81815285602083850101111561277957600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083601f8401126127a957600080fd5b50813567ffffffffffffffff8111156127c157600080fd5b6020830191508360206060830285010111156127dc57600080fd5b9250929050565b803560ff81168114610a7a57600080fd5b60008060008060008060a0878903121561280d57600080fd5b86359550602087013567ffffffffffffffff81111561282b57600080fd5b61283789828a01612797565b909650945061284a9050604088016127e3565b925060608701359150608087013590509295509295509295565b60008060008060008060c0878903121561287d57600080fd5b863561288881612609565b955060208701359450604087013593506128a4606088016127e3565b92506080870135915060a087013590509295509295509295565b6000806000604084860312156128d357600080fd5b83356128de81612609565b9250602084013567ffffffffffffffff8111156128fa57600080fd5b61290686828701612797565b9497909650939450505050565b6000806000806000806000806000806101208b8d03121561293357600080fd5b8a35995060208b013567ffffffffffffffff81111561295157600080fd5b61295d8d828e01612797565b909a5098505060408b0135965061297660608c016127e3565b955060808b0135945060a08b0135935061299260c08c016127e3565b925060e08b013591506101008b013590509295989b9194979a5092959850565b801515811461077e57600080fd5b600080604083850312156129d357600080fd5b82356129de81612609565b915060208301356129ee816129b2565b809150509250929050565b600080600080600060808688031215612a1157600080fd5b8535612a1c81612609565b94506020860135612a2c81612609565b935060408601359250606086013567ffffffffffffffff80821115612a5057600080fd5b818801915088601f830112612a6457600080fd5b813581811115612a7357600080fd5b896020828501011115612a8557600080fd5b9699959850939650602001949392505050565b60008060008060008060a08789031215612ab157600080fd5b863567ffffffffffffffff811115612ac857600080fd5b612ad489828a01612797565b9097509550506020870135935061284a604088016127e3565b600080600060608486031215612b0257600080fd5b833592506020840135612b1481612609565b9150604084013567ffffffffffffffff81168114612b3157600080fd5b809150509250925092565b60008060408385031215612b4f57600080fd5b8235612b5a81612609565b915060208301356129ee81612609565b600181811c90821680612b7e57607f821691505b602082108103612b9e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612bb657600080fd5b8151610fe881612566565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b803565ffffffffffff81168114610a7a57600080fd5b6020808252818101839052600090604080840186845b87811015612c9e578135612c5481612609565b6001600160a01b03168352612c6a828601612c15565b65ffffffffffff8082168786015280612c84878601612c15565b168587015250506060928301929190910190600101612c41565b5090979650505050505050565b6bffffffffffffffffffffffff198460601b16815260008351612cd5816014850160208801612599565b60149201918201929092526034019392505050565b60008351612cfc818460208801612599565b835190830190612d10818360208801612599565b01949350505050565b601f8211156109e657600081815260208120601f850160051c81016020861015612d405750805b601f850160051c820191505b81811015612d5f57828155600101612d4c565b505050505050565b815167ffffffffffffffff811115612d8157612d816126a8565b612d9581612d8f8454612b6a565b84612d19565b602080601f831160018114612dca5760008415612db25750858301515b600019600386901b1c1916600185901b178555612d5f565b600085815260208120601f198616915b82811015612df957888601518255948401946001909101908401612dda565b5085821015612e175787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008060408385031215612e3a57600080fd5b8251612e4581612609565b6020939093015192949293505050565b60008060008060808587031215612e6b57600080fd5b8451612e7681612609565b60208601516040870151606090970151919890975090945092505050565b6bffffffffffffffffffffffff198460601b16815282601482015260008251612ec4816034850160208701612599565b91909101603401949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612efb57600080fd5b610fe882612c15565b60008251612f16818460208701612599565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b600060018201612f4857612f48612f20565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612f7457612f74612f4f565b500490565b8181038181111561060f5761060f612f20565b600082612f9b57612f9b612f4f565b500690565b8082018082111561060f5761060f612f20565b600060208284031215612fc557600080fd5b815167ffffffffffffffff811115612fdc57600080fd5b8201601f81018413612fed57600080fd5b8051612ffb61275f826126ef565b81815285602083850101111561301057600080fd5b613021826020830160208601612599565b95945050505050565b60006020828403121561303c57600080fd5b8151610fe8816129b2565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000811000a000000000000000000000000942d3b55707f2b0be98bb2d7f9b1a03f9de478b5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000647656e4e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004474e465400000000000000000000000000000000000000000000000000000000