[ { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "address", "name": "_handler", "type": "address" } ], "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": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_new", "type": "address" }, { "internalType": "bool", "name": "_change", "type": "bool" } ], "name": "addOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "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": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "generateNfts", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getAttribute", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "iStart", "type": "uint256" }, { "internalType": "uint256", "name": "iEnd", "type": "uint256" } ], "name": "getNodeOwnersBetweenIndexes", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNodeOwnersSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwnersSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "handler", "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": "", "type": "address" } ], "name": "isAuthorized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isBlacklisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "nodeOwners", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nodeOwnersInserted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "onlyAuthorized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "openCreateNft", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "owners", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_new", "type": "address" } ], "name": "removeOwner", "outputs": [], "stateMutability": "nonpayable", "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": "string", "name": "_new", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_new", "type": "address" } ], "name": "setHandler", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_new", "type": "address" }, { "internalType": "bool", "name": "_value", "type": "bool" } ], "name": "setIsAuthorized", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_new", "type": "address" }, { "internalType": "bool", "name": "_value", "type": "bool" } ], "name": "setIsBlacklisted", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_new", "type": "bool" } ], "name": "setOnlyAuthorized", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_new", "type": "bool" } ], "name": "setOpenCreateNft", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "nodeType", "type": "string" } ], "name": "setTokenIdToType", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenIdsToType", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "user", "type": "address" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "iStart", "type": "uint256" }, { "internalType": "uint256", "name": "iEnd", "type": "uint256" } ], "name": "tokensOfOwnerByIndexesBetween", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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" } ]
60806040526011805460ff199081166001179091556013805490911690553480156200002a57600080fd5b506040516200358b3803806200358b8339810160408190526200004d916200020e565b604080518082018252600a815269506f6c6172204e6f646560b01b602080830191825283518085019094526002845261282760f11b90840152815191929162000099916000916200014b565b508051620000af9060019060208401906200014b565b5050600a805460018181019092557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b031916339081179091556000908152600b60209081526040909120805460ff19169092179091558351620001239250600f918501906200014b565b50600c80546001600160a01b0319166001600160a01b03929092169190911790555062000345565b8280546200015990620002f2565b90600052602060002090601f0160209004810192826200017d5760008555620001c8565b82601f106200019857805160ff1916838001178555620001c8565b82800160010185558215620001c8579182015b82811115620001c8578251825591602001919060010190620001ab565b50620001d6929150620001da565b5090565b5b80821115620001d65760008155600101620001db565b80516001600160a01b03811681146200020957600080fd5b919050565b6000806040838503121562000221578182fd5b82516001600160401b038082111562000238578384fd5b818501915085601f8301126200024c578384fd5b8151818111156200026157620002616200032f565b6040516020601f8301601f19168201810184811183821017156200028957620002896200032f565b6040528282528483018101891015620002a0578687fd5b8693505b82841015620002c35784840181015182850182015292830192620002a4565b82841115620002d457868184840101525b819650620002e4818901620001f1565b955050505050509250929050565b6002810460018216806200030757607f821691505b602082108114156200032957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61323680620003556000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80636352211e11610151578063b3ad18e2116100c3578063c395016211610087578063c395016214610557578063c80916d41461055f578063c87b56dd14610567578063e985e9c51461057a578063fe575a871461058d578063fe9fbb80146105a057610274565b8063b3ad18e2146104eb578063b88d4fde146104fe578063bac426d014610511578063c23e6f9314610524578063c29f54a01461054457610274565b8063864b7e9511610115578063864b7e951461048f5780638b4db110146104a257806395d89b41146104aa578063a0e38492146104b2578063a22cb465146104c5578063b2dc5dc3146104d857610274565b80636352211e1461043b5780636c0360eb1461044e57806370a0823114610456578063842e7669146104695780638462151c1461047c57610274565b806333a481dd116101ea5780635139839c116101ae5780635139839c146103d45780635181db2b146103e7578063518e32d3146103fa578063551a6d931461040d57806355f804b3146104155780635d23273f1461042857610274565b806333a481dd1461036857806342842e0e1461037b578063493fe80f1461038e5780634cee1e3b146103a15780634f6ccce7146103c157610274565b80630c7b1d7b1161023c5780630c7b1d7b146102ff578063173825d91461031457806318160ddd1461032757806323b872dd1461032f5780632f54bf6e146103425780632f745c591461035557610274565b806301ffc9a714610279578063025e7c27146102a257806306fdde03146102c2578063081812fc146102d7578063095ea7b3146102ea575b600080fd5b61028c6102873660046126d2565b6105b3565b60405161029991906129c4565b60405180910390f35b6102b56102b03660046127f2565b6105c6565b60405161029991906128ca565b6102ca6105f0565b60405161029991906129cf565b6102b56102e53660046127f2565b610682565b6102fd6102f836600461265d565b6106ce565b005b610307610766565b6040516102999190613073565b6102fd61032236600461247c565b61076c565b6103076109be565b6102fd61033d3660046124c8565b6109c4565b61028c61035036600461247c565b6109fc565b61030761036336600461265d565b610a11565b6102fd6103763660046126b8565b610a63565b6102fd6103893660046124c8565b610aa5565b6102ca61039c3660046127f2565b610ac0565b6103b46103af366004612686565b610b45565b604051610299919061298c565b6103076103cf3660046127f2565b610c07565b6102b56103e23660046127f2565b610c62565b6103b46103f53660046127ae565b610c72565b6102fd610408366004612634565b610e5e565b610307611022565b6102fd61042336600461270a565b611028565b6102fd610436366004612634565b61106a565b6102b56104493660046127f2565b6110c4565b6102ca6110f9565b61030761046436600461247c565b611108565b61028c61047736600461247c565b61114c565b6103b461048a36600461247c565b611161565b6102fd61049d36600461280a565b611220565b61028c611269565b6102ca611272565b6102fd6104c0366004612634565b611281565b6102fd6104d3366004612634565b6112db565b6102fd6104e636600461257b565b6112ed565b6102ca6104f93660046127f2565b6113c5565b6102fd61050c366004612503565b61145f565b6102fd61051f36600461247c565b61149e565b61053761053236600461284e565b6114ef565b604051610299919061293f565b6102fd6105523660046126b8565b6115e9565b61028c61162b565b6102b5611634565b6102ca6105753660046127f2565b611643565b61028c610588366004612496565b6116c6565b61028c61059b36600461247c565b6116f4565b61028c6105ae36600461247c565b611709565b60006105be8261171e565b90505b919050565b600a81815481106105d657600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600080546105ff9061313b565b80601f016020809104026020016040519081016040528092919081815260200182805461062b9061313b565b80156106785780601f1061064d57610100808354040283529160200191610678565b820191906000526020600020905b81548152906001019060200180831161065b57829003601f168201915b5050505050905090565b600061068d82611743565b6106b25760405162461bcd60e51b81526004016106a990612ddf565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006106d9826110c4565b9050806001600160a01b0316836001600160a01b0316141561070d5760405162461bcd60e51b81526004016106a990612f3b565b806001600160a01b031661071f611760565b6001600160a01b0316148061073b575061073b81610588611760565b6107575760405162461bcd60e51b81526004016106a990612c83565b6107618383611764565b505050565b600a5490565b336001600160a01b0316600a60008154811061079857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316146107ca5760405162461bcd60e51b81526004016106a990612a0f565b6001600160a01b0381166000908152600b602052604090205460ff166108025760405162461bcd60e51b81526004016106a990613048565b600a60008154811061082457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b038281169116141561085b5760405162461bcd60e51b81526004016106a990612b1a565b60015b600a5481101561099c57816001600160a01b0316600a828154811061089357634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561098a57600a80546108be906001906130f8565b815481106108dc57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b03909216918390811061091657634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a80548061096357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905561099c565b8061099481613176565b91505061085e565b506001600160a01b03166000908152600b60205260409020805460ff19169055565b60085490565b6109d56109cf611760565b826117d2565b6109f15760405162461bcd60e51b81526004016106a990612f7c565b610761838383611857565b600b6020526000908152604090205460ff1681565b6000610a1c83611108565b8210610a3a5760405162461bcd60e51b81526004016106a990612a46565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b336000908152600b602052604090205460ff16610a925760405162461bcd60e51b81526004016106a990612bd6565b6013805460ff1916911515919091179055565b6107618383836040518060200160405280600081525061145f565b600c5460405163493fe80f60e01b81526060916001600160a01b03169063493fe80f90610af1908590600401613073565b60006040518083038186803b158015610b0957600080fd5b505afa158015610b1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105be919081019061273c565b60606000610b5384846130f8565b6001600160401b03811115610b7857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ba1578160200160208202803683370190505b509050835b83811015610bfe57610bb88682610a11565b82610bc387846130f8565b81518110610be157634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610bf681613176565b915050610ba6565b50949350505050565b6000610c116109be565b8210610c2f5760405162461bcd60e51b81526004016106a990612fcd565b60088281548110610c5057634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b601481815481106105d657600080fd5b600c546060906001600160a01b03163314610c9f5760405162461bcd60e51b81526004016106a990612efa565b6001600160a01b03831660009081526010602052604090205460ff1615610cd85760405162461bcd60e51b81526004016106a990612ce0565b60135460ff16610cfa5760405162461bcd60e51b81526004016106a9906129e2565b6001600160a01b03831660009081526015602052604090205460ff16610d7e576014805460018082019092557fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0386169081179091556000908152601560205260409020805460ff191690911790555b6000826001600160401b03811115610da657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610dcf578160200160208202803683370190505b50905060005b83811015610bfe576000610de9600e611a47565b905080838381518110610e0c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101919091526000828152600d8252604090208851610e36928a019061235f565b50610e418682611a4b565b610e4b600e611a65565b5080610e5681613176565b915050610dd5565b336001600160a01b0316600a600081548110610e8a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614610ebc5760405162461bcd60e51b81526004016106a990612a0f565b6001600160a01b0382166000908152600b602052604090205460ff1615610ef55760405162461bcd60e51b81526004016106a990613019565b6001600160a01b0382166000908152600b60205260409020805460ff191660011790558015610fd257600a80600081548110610f4157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154835460018101855593835290822090920180546001600160a01b0319166001600160a01b0390931692909217909155600a8054849290610f9f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061101e565b600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790555b5050565b60145490565b336000908152600b602052604090205460ff166110575760405162461bcd60e51b81526004016106a990612bd6565b805161101e90600f90602084019061235f565b336000908152600b602052604090205460ff166110995760405162461bcd60e51b81526004016106a990612bd6565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000818152600260205260408120546001600160a01b0316806105be5760405162461bcd60e51b81526004016106a990612d61565b6060611103611a6e565b905090565b60006001600160a01b0382166111305760405162461bcd60e51b81526004016106a990612d17565b506001600160a01b031660009081526003602052604090205490565b60156020526000908152604090205460ff1681565b6060600061116e83611108565b6001600160401b0381111561119357634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156111bc578160200160208202803683370190505b50905060005b6111cb84611108565b811015611219576111dc8482610a11565b8282815181106111fc57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061121181613176565b9150506111c2565b5092915050565b600c546001600160a01b0316331461124a5760405162461bcd60e51b81526004016106a990612efa565b6000828152600d6020908152604090912082516107619284019061235f565b60115460ff1681565b6060600180546105ff9061313b565b336000908152600b602052604090205460ff166112b05760405162461bcd60e51b81526004016106a990612bd6565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b61101e6112e6611760565b8383611a7d565b600c546001600160a01b031633146113175760405162461bcd60e51b81526004016106a990612efa565b60005b815181101561076157826001600160a01b031661135d83838151811061135057634e487b7160e01b600052603260045260246000fd5b60200260200101516110c4565b6001600160a01b0316146113835760405162461bcd60e51b81526004016106a990612e74565b6113b38282815181106113a657634e487b7160e01b600052603260045260246000fd5b6020026020010151611b20565b806113bd81613176565b91505061131a565b600d60205260009081526040902080546113de9061313b565b80601f016020809104026020016040519081016040528092919081815260200182805461140a9061313b565b80156114575780601f1061142c57610100808354040283529160200191611457565b820191906000526020600020905b81548152906001019060200180831161143a57829003601f168201915b505050505081565b61147061146a611760565b836117d2565b61148c5760405162461bcd60e51b81526004016106a990612f7c565b61149884848484611bc7565b50505050565b336000908152600b602052604090205460ff166114cd5760405162461bcd60e51b81526004016106a990612bd6565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b606060006114fd84846130f8565b6001600160401b0381111561152257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561154b578160200160208202803683370190505b509050835b838110156115e1576014818154811061157957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03168261159987846130f8565b815181106115b757634e487b7160e01b600052603260045260246000fd5b6001600160a01b0390921660209283029190910190910152806115d981613176565b915050611550565b509392505050565b336000908152600b602052604090205460ff166116185760405162461bcd60e51b81526004016106a990612bd6565b6011805460ff1916911515919091179055565b60135460ff1681565b600c546001600160a01b031681565b606061164e82611743565b61166a5760405162461bcd60e51b81526004016106a990612eab565b6000611674611a6e565b9050600081511161169457604051806020016040528060008152506116bf565b8061169e84611bfa565b6040516020016116af92919061289b565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60106020526000908152604090205460ff1681565b60126020526000908152604090205460ff1681565b60006001600160e01b0319821663780e9d6360e01b14806105be57506105be82611d14565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611799826110c4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117dd82611743565b6117f95760405162461bcd60e51b81526004016106a990612c02565b6000611804836110c4565b9050806001600160a01b0316846001600160a01b0316148061183f5750836001600160a01b031661183484610682565b6001600160a01b0316145b8061184f575061184f81856116c6565b949350505050565b6001600160a01b03831660009081526010602052604090205460ff1615801561189957506001600160a01b03821660009081526010602052604090205460ff16155b6118b55760405162461bcd60e51b81526004016106a990612ce0565b60115460ff1615611952576118c983611d54565b15806118ed57506001600160a01b03831660009081526012602052604090205460ff165b6119095760405162461bcd60e51b81526004016106a990612c4e565b61191282611d54565b158061193657506001600160a01b03821660009081526012602052604090205460ff165b6119525760405162461bcd60e51b81526004016106a990612c4e565b6001600160a01b03821660009081526015602052604090205460ff166119d6576014805460018082019092557fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0385169081179091556000908152601560205260409020805460ff191690911790555b600c546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611a0a908690869086906004016128de565b600060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b50505050610761838383611d5a565b5490565b61101e828260405180602001604052806000815250611e87565b80546001019055565b6060600f80546105ff9061313b565b816001600160a01b0316836001600160a01b03161415611aaf5760405162461bcd60e51b81526004016106a990612b9f565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611b139085906129c4565b60405180910390a3505050565b6000611b2b826110c4565b9050611b3981600084611eba565b611b44600083611764565b6001600160a01b0381166000908152600360205260408120805460019290611b6d9084906130f8565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611bd2848484611857565b611bde84848484611ec5565b6114985760405162461bcd60e51b81526004016106a990612a91565b606081611c1f57506040805180820190915260018152600360fc1b60208201526105c1565b8160005b8115611c495780611c3381613176565b9150611c429050600a836130e4565b9150611c23565b6000816001600160401b03811115611c7157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c9b576020820181803683370190505b5090505b841561184f57611cb06001836130f8565b9150611cbd600a86613191565b611cc89060306130cc565b60f81b818381518110611ceb57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611d0d600a866130e4565b9450611c9f565b60006001600160e01b031982166380ac58cd60e01b1480611d4557506001600160e01b03198216635b5e139f60e01b145b806105be57506105be82611fe0565b3b151590565b826001600160a01b0316611d6d826110c4565b6001600160a01b031614611d935760405162461bcd60e51b81526004016106a990612e2b565b6001600160a01b038216611db95760405162461bcd60e51b81526004016106a990612b5b565b611dc4838383611eba565b611dcf600082611764565b6001600160a01b0383166000908152600360205260408120805460019290611df89084906130f8565b90915550506001600160a01b0382166000908152600360205260408120805460019290611e269084906130cc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611e918383611ff9565b611e9e6000848484611ec5565b6107615760405162461bcd60e51b81526004016106a990612a91565b6107618383836120d8565b6000611ed9846001600160a01b0316611d54565b15611fd557836001600160a01b031663150b7a02611ef5611760565b8786866040518563ffffffff1660e01b8152600401611f179493929190612902565b602060405180830381600087803b158015611f3157600080fd5b505af1925050508015611f61575060408051601f3d908101601f19168201909252611f5e918101906126ee565b60015b611fbb573d808015611f8f576040519150601f19603f3d011682016040523d82523d6000602084013e611f94565b606091505b508051611fb35760405162461bcd60e51b81526004016106a990612a91565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061184f565b506001949350505050565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b03821661201f5760405162461bcd60e51b81526004016106a990612daa565b61202881611743565b156120455760405162461bcd60e51b81526004016106a990612ae3565b61205160008383611eba565b6001600160a01b038216600090815260036020526040812080546001929061207a9084906130cc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6120e3838383610761565b6001600160a01b0383166120ff576120fa81612161565b612122565b816001600160a01b0316836001600160a01b0316146121225761212283826121a5565b6001600160a01b03821661213e5761213981612242565b610761565b826001600160a01b0316826001600160a01b03161461076157610761828261231b565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b600060016121b284611108565b6121bc91906130f8565b60008381526007602052604090205490915080821461220f576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612254906001906130f8565b6000838152600960205260408120546008805493945090928490811061228a57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106122b957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806122ff57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061232683611108565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461236b9061313b565b90600052602060002090601f01602090048101928261238d57600085556123d3565b82601f106123a657805160ff19168380011785556123d3565b828001600101855582156123d3579182015b828111156123d35782518255916020019190600101906123b8565b506123df9291506123e3565b5090565b5b808211156123df57600081556001016123e4565b600061240b612406846130a5565b61307c565b905082815283838301111561241f57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146105c157600080fd5b803580151581146105c157600080fd5b600082601f83011261246d578081fd5b6116bf838335602085016123f8565b60006020828403121561248d578081fd5b6116bf82612436565b600080604083850312156124a8578081fd5b6124b183612436565b91506124bf60208401612436565b90509250929050565b6000806000606084860312156124dc578081fd5b6124e584612436565b92506124f360208501612436565b9150604084013590509250925092565b60008060008060808587031215612518578081fd5b61252185612436565b935061252f60208601612436565b92506040850135915060608501356001600160401b03811115612550578182fd5b8501601f81018713612560578182fd5b61256f878235602084016123f8565b91505092959194509250565b6000806040838503121561258d578182fd5b61259683612436565b91506020808401356001600160401b03808211156125b2578384fd5b818601915086601f8301126125c5578384fd5b8135818111156125d7576125d76131d1565b83810291506125e784830161307c565b8181528481019084860184860187018b1015612601578788fd5b8795505b83861015612623578035835260019590950194918601918601612605565b508096505050505050509250929050565b60008060408385031215612646578182fd5b61264f83612436565b91506124bf6020840161244d565b6000806040838503121561266f578182fd5b61267883612436565b946020939093013593505050565b60008060006060848603121561269a578283fd5b6126a384612436565b95602085013595506040909401359392505050565b6000602082840312156126c9578081fd5b6116bf8261244d565b6000602082840312156126e3578081fd5b81356116bf816131e7565b6000602082840312156126ff578081fd5b81516116bf816131e7565b60006020828403121561271b578081fd5b81356001600160401b03811115612730578182fd5b61184f8482850161245d565b60006020828403121561274d578081fd5b81516001600160401b03811115612762578182fd5b8201601f81018413612772578182fd5b8051612780612406826130a5565b818152856020838501011115612794578384fd5b6127a582602083016020860161310f565b95945050505050565b6000806000606084860312156127c2578081fd5b83356001600160401b038111156127d7578182fd5b6127e38682870161245d565b9350506124f360208501612436565b600060208284031215612803578081fd5b5035919050565b6000806040838503121561281c578182fd5b8235915060208301356001600160401b03811115612838578182fd5b6128448582860161245d565b9150509250929050565b60008060408385031215612860578182fd5b50508035926020909101359150565b6000815180845261288781602086016020860161310f565b601f01601f19169290920160200192915050565b600083516128ad81846020880161310f565b8351908301906128c181836020880161310f565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129359083018461286f565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129805783516001600160a01b03168352928401929184019160010161295b565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612980578351835292840192918401916001016129a8565b901515815260200190565b6000602082526116bf602083018461286f565b6020808252601390820152722837b630b92737b2329d102737ba1037b832b760691b604082015260600190565b60208082526018908201527f4f776e6572733a204f6e6c79205375706572204f776e65720000000000000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526021908201527f4f776e6572733a2043616e6e6f742072656d6f7665207375706572206f776e656040820152603960f91b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526012908201527127bbb732b9399d1027b7363c9027bbb732b960711b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f506f6c61724e6f64653a20556e617574686f72697a656420636f6e7472616374604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252601e908201527f506f6c61724e6f64653a20426c61636b6c697374656420616464726573730000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526018908201527f506f6c61724e6f64653a204e6f74206e6674206f776e65720000000000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f506f6c61724e6f64653a20476f64206d6f6465206e6f742061637469766174656040820152601960fa1b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526015908201527427bbb732b9399d1020b63932b0b23c9037bbb732b960591b604082015260600190565b60208082526011908201527027bbb732b9399d102737ba1037bbb732b960791b604082015260600190565b90815260200190565b6040518181016001600160401b038111828210171561309d5761309d6131d1565b604052919050565b60006001600160401b038211156130be576130be6131d1565b50601f01601f191660200190565b600082198211156130df576130df6131a5565b500190565b6000826130f3576130f36131bb565b500490565b60008282101561310a5761310a6131a5565b500390565b60005b8381101561312a578181015183820152602001613112565b838111156114985750506000910152565b60028104600182168061314f57607f821691505b6020821081141561317057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561318a5761318a6131a5565b5060010190565b6000826131a0576131a06131bb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146131fd57600080fd5b5056fea2646970667358221220e93a9cfad9a0f1093885d88a5095b647fdcc7411281ba4bd2e36602d0903312c64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ea9a51ab1ea78709f51dee512f1b57a46569a84c000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e706f6c61722e66696e616e6369616c2f6e6f64652f00000000000000000000000000000000000000000000000000000000000000