[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address", "name": "_creator", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "InvalidQueryRange", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "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": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "_to", "type": "address" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NonFungibleTokenRecovery", "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": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokenRecovery", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_factory", "type": "address" } ], "name": "UpdateFactory", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" } ], "name": "batchMint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "creator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "explicitOwnershipOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721A.TokenOwnership", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "explicitOwnershipsOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721A.TokenOwnership[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "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": "string", "name": "_tokenURI", "type": "string" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenId", "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": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "recoverNonFungibleToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "recoverToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" }, { "internalType": "address", "name": "_newFactory", "type": "address" } ], "name": "restoreByFactoryWhitelist", "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": "payable", "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": "payable", "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": "_newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_newContractURI", "type": "string" } ], "name": "setContractURI", "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": "uint256", "name": "", "type": "uint256" } ], "name": "tokenURIs", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "stop", "type": "uint256" } ], "name": "tokensOfOwnerIn", "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newFactoryAddress", "type": "address" } ], "name": "updateFactory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "updateTokenInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b50604051620033a5380380620033a58339810160408190526200003491620002af565b82826200004133620000ae565b81516200005690600490602085019062000152565b5080516200006c90600590602084019062000152565b5060016002555050600a80546001600160a01b0319166001600160a01b0383161790556200009a81620000ae565b620000a533620000fe565b5050506200038f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f20690ae37b722d1d6265acdad124822baeb394891cc396d0722cbdb5fa2a683d9060200160405180910390a150565b82805462000160906200033c565b90600052602060002090601f016020900481019282620001845760008555620001cf565b82601f106200019f57805160ff1916838001178555620001cf565b82800160010185558215620001cf579182015b82811115620001cf578251825591602001919060010190620001b2565b50620001dd929150620001e1565b5090565b5b80821115620001dd5760008155600101620001e2565b600082601f8301126200020a57600080fd5b81516001600160401b038082111562000227576200022762000379565b604051601f8301601f19908116603f0116810190828211818310171562000252576200025262000379565b816040528381526020925086838588010111156200026f57600080fd5b600091505b8382101562000293578582018301518183018401529082019062000274565b83821115620002a55760008385830101525b9695505050505050565b600080600060608486031215620002c557600080fd5b83516001600160401b0380821115620002dd57600080fd5b620002eb87838801620001f8565b945060208601519150808211156200030257600080fd5b506200031186828701620001f8565b604086015190935090506001600160a01b03811681146200033157600080fd5b809150509250925092565b600181811c908216806200035157607f821691505b602082108114156200037357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b613006806200039f6000396000f3fe6080604052600436106102345760003560e01c80638462151c11610138578063c23dc68f116100b0578063da8e5dee1161007f578063e8a3d48511610064578063e8a3d48514610645578063e985e9c51461065a578063f2fde38b146106a357600080fd5b8063da8e5dee14610605578063e4f70bb81461062557600080fd5b8063c23dc68f14610578578063c45a0155146105a5578063c87b56dd146105c5578063d9f165dc146105e557600080fd5b806399a2557a11610107578063a22cb465116100ec578063a22cb46514610525578063b88d4fde14610545578063bb0fd1471461055857600080fd5b806399a2557a146104e55780639be65a601461050557600080fd5b80638462151c146104655780638da5cb5b14610492578063938e3d7b146104b057806395d89b41146104d057600080fd5b806342842e0e116101cb5780636352211e1161019a57806370a082311161017f57806370a082311461041b578063715018a61461043b57806375794a3c1461045057600080fd5b80636352211e146103db5780636c8b703f146103fb57600080fd5b806342842e0e1461036857806343508b051461037b57806355f804b31461038e5780635bbb2177146103ae57600080fd5b8063095ea7b311610207578063095ea7b3146102e857806318160ddd146102fd5780631c351a9d1461034257806323b872dd1461035557600080fd5b806301ffc9a71461023957806302d05d3f1461026e57806306fdde03146102a6578063081812fc146102c8575b600080fd5b34801561024557600080fd5b50610259610254366004612a60565b6106c3565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b50600a5461028e906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b3480156102b257600080fd5b506102bb6107a8565b6040516102659190612dde565b3480156102d457600080fd5b5061028e6102e3366004612b14565b61083a565b6102fb6102f6366004612971565b610897565b005b34801561030957600080fd5b50600354600254037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b604051908152602001610265565b610334610350366004612acf565b610968565b6102fb610363366004612882565b610a73565b6102fb610376366004612882565b610ca0565b6102fb610389366004612971565b610cc0565b34801561039a57600080fd5b506102fb6103a9366004612a9a565b610dca565b3480156103ba57600080fd5b506103ce6103c93660046129ce565b610f1d565b6040516102659190612d29565b3480156103e757600080fd5b5061028e6103f6366004612b14565b611007565b34801561040757600080fd5b506102bb610416366004612b14565b611012565b34801561042757600080fd5b50610334610436366004612834565b6110ac565b34801561044757600080fd5b506102fb611114565b34801561045c57600080fd5b50610334611128565b34801561047157600080fd5b50610485610480366004612834565b611138565b6040516102659190612da6565b34801561049e57600080fd5b506000546001600160a01b031661028e565b3480156104bc57600080fd5b506102fb6104cb366004612a9a565b611243565b3480156104dc57600080fd5b506102bb61125e565b3480156104f157600080fd5b5061048561050036600461299b565b61126d565b34801561051157600080fd5b506102fb610520366004612834565b611412565b34801561053157600080fd5b506102fb61054036600461293a565b61167b565b6102fb6105533660046128be565b611705565b34801561056457600080fd5b506102fb610573366004612971565b611768565b34801561058457600080fd5b50610598610593366004612b14565b611928565b6040516102659190612df1565b3480156105b157600080fd5b5060015461028e906001600160a01b031681565b3480156105d157600080fd5b506102bb6105e0366004612b14565b6119b0565b3480156105f157600080fd5b506102fb610600366004612834565b611aec565b34801561061157600080fd5b506102fb610620366004612b46565b611bfe565b34801561063157600080fd5b506102fb61064036600461284f565b611c25565b34801561065157600080fd5b506102bb611d3d565b34801561066657600080fd5b5061025961067536600461284f565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b3480156106af57600080fd5b506102fb6106be366004612834565b611d4c565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061075657507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806107a257507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600480546107b790612e7a565b80601f01602080910402602001604051908101604052809291908181526020018280546107e390612e7a565b80156108305780601f1061080557610100808354040283529160200191610830565b820191906000526020600020905b81548152906001019060200180831161081357829003601f168201915b5050505050905090565b600061084582611dd9565b61087b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600860205260409020546001600160a01b031690565b60006108a282611007565b9050336001600160a01b038216146108f4576108be8133610675565b6108f4576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526008602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001546000906001600160a01b031633146109f05760405162461bcd60e51b815260206004820152602c60248201527f466163746f727947656e657261746564203a206d73672e73656e64657220697360448201527f206e6f7420666163746f7279000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60006109fb60025490565b6000818152600d602090815260409091208651929350610a1f9290918701906126cb565b50610a2b836001611e27565b604080518281526001600160a01b03851660208201527ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e50102910160405180910390a19392505050565b6000610a7e82611f51565b9050836001600160a01b0316816001600160a01b031614610acb576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526008602052604090208054338082146001600160a01b03881690911417610b3157610afb8633610675565b610b31576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610b71576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015610b7c57600082555b6001600160a01b0386811660009081526007602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600660205260409020557c02000000000000000000000000000000000000000000000000000000008316610c575760018401600081815260066020526040902054610c55576002548114610c555760008181526006602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b610cbb83838360405180602001604052806000815250611705565b505050565b6001546001600160a01b03163314610d405760405162461bcd60e51b815260206004820152602c60248201527f466163746f727947656e657261746564203a206d73672e73656e64657220697360448201527f206e6f7420666163746f7279000000000000000000000000000000000000000060648201526084016109e7565b6000610d4b60025490565b905060005b82811015610dbb576000610d64828461200a565b604080518281526001600160a01b03881660208201529192507ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e50102910160405180910390a15080610db381612ece565b915050610d50565b50610cbb8383611e27565b5050565b6000546001600160a01b0316331480610e7257506001546040517f09fd82120000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906309fd82129060240160206040518083038186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190612a43565b610f0a5760405162461bcd60e51b815260206004820152604a60248201527f466163746f727947656e657261746564203a206d73672e73656e64657220697360448201527f206e656974686572206f776e6572206e6f7220666163746f72792061646d696e60648201527f2077686974656c69737400000000000000000000000000000000000000000000608482015260a4016109e7565b8051610dc690600c9060208401906126cb565b60608160008167ffffffffffffffff811115610f3b57610f3b612f65565b604051908082528060200260200182016040528015610fab57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610f595790505b50905060005b828114610ffe57610fd9868683818110610fcd57610fcd612f36565b90506020020135611928565b828281518110610feb57610feb612f36565b6020908102919091010152600101610fb1565b50949350505050565b60006107a282611f51565b600d602052600090815260409020805461102b90612e7a565b80601f016020809104026020016040519081016040528092919081815260200182805461105790612e7a565b80156110a45780601f10611079576101008083540402835291602001916110a4565b820191906000526020600020905b81548152906001019060200180831161108757829003601f168201915b505050505081565b60006001600160a01b0382166110ee576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b61111c612016565b6111266000612070565b565b600061113360025490565b905090565b60606000806000611148856110ac565b905060008167ffffffffffffffff81111561116557611165612f65565b60405190808252806020026020018201604052801561118e578160200160208202803683370190505b5060408051608081018252600080825260208201819052918101829052606081019190915290915060015b838614611237576111c9816120d8565b91508160400151156111da5761122f565b81516001600160a01b0316156111ef57815194505b876001600160a01b0316856001600160a01b0316141561122f578083878060010198508151811061122257611222612f36565b6020026020010181815250505b6001016111b9565b50909695505050505050565b61124b612016565b8051610dc690600b9060208401906126cb565b6060600580546107b790612e7a565b60608183106112a8576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806112b460025490565b905060018510156112c457600194505b808411156112d0578093505b60006112db876110ac565b9050848610156112fa57858503818110156112f4578091505b506112fe565b5060005b60008167ffffffffffffffff81111561131957611319612f65565b604051908082528060200260200182016040528015611342578160200160208202803683370190505b5090508161135557935061140b92505050565b600061136088611928565b905060008160400151611371575080515b885b8881141580156113835750848714155b156113ff57611391816120d8565b92508260400151156113a2576113f7565b82516001600160a01b0316156113b757825191505b8a6001600160a01b0316826001600160a01b031614156113f757808488806001019950815181106113ea576113ea612f36565b6020026020010181815250505b600101611373565b50505092835250909150505b9392505050565b6001546040517f09fd82120000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906309fd82129060240160206040518083038186803b15801561146e57600080fd5b505afa158015611482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a69190612a43565b6115185760405162461bcd60e51b815260206004820152603f60248201527f466163746f727947656e657261746564203a206d73672e73656e64657220697360448201527f206e6f7420696e20666163746f72792061646d696e2077686974656c6973740060648201526084016109e7565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561157357600080fd5b505afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190612b2d565b9050806116205760405162461bcd60e51b815260206004820152602760248201527f4f7065726174696f6e733a2043616e6e6f74207265636f766572207a65726f2060448201527f62616c616e63650000000000000000000000000000000000000000000000000060648201526084016109e7565b6116346001600160a01b0383163383612170565b816001600160a01b03167f14f11966a996e0629572e51064726d2057a80fbd34efc066682c06a71dbb6e988260405161166f91815260200190565b60405180910390a25050565b3360008181526009602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611710848484610a73565b6001600160a01b0383163b156117625761172c848484846121f0565b611762576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6001546040517f09fd82120000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906309fd82129060240160206040518083038186803b1580156117c457600080fd5b505afa1580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fc9190612a43565b61186e5760405162461bcd60e51b815260206004820152603f60248201527f466163746f727947656e657261746564203a206d73672e73656e64657220697360448201527f206e6f7420696e20666163746f72792061646d696e2077686974656c6973740060648201526084016109e7565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038316906323b872dd90606401600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b50505050816001600160a01b03167f861c3ea25dbda3af0bf5d258ba8582c0276c9446b1479e817be3f1b4a89acf918260405161166f91815260200190565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152600183108061198157506002548310155b1561198c5792915050565b611995836120d8565b90508060400151156119a75792915050565b61140b83612369565b60606119bb82611dd9565b6119d357505060408051602081019091526000815290565b6000828152600d6020526040902080546119ec90612e7a565b159050611a91576000828152600d602052604090208054611a0c90612e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3890612e7a565b8015611a855780601f10611a5a57610100808354040283529160200191611a85565b820191906000526020600020905b815481529060010190602001808311611a6857829003601f168201915b50505050509050919050565b600c8054611a9e90612e7a565b15159050611abb57604051806020016040528060008152506107a2565b600c611ac6836123fa565b604051602001611ad7929190612c0f565b60405160208183030381529060405292915050565b6001546040517f09fd82120000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906309fd82129060240160206040518083038186803b158015611b4857600080fd5b505afa158015611b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b809190612a43565b611bf25760405162461bcd60e51b815260206004820152603f60248201527f466163746f727947656e657261746564203a206d73672e73656e64657220697360448201527f206e6f7420696e20666163746f72792061646d696e2077686974656c6973740060648201526084016109e7565b611bfb81612466565b50565b611c06612016565b6000828152600d602090815260409091208251610cbb928401906126cb565b6001546040517f09fd82120000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906309fd82129060240160206040518083038186803b158015611c8157600080fd5b505afa158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb99190612a43565b611d2b5760405162461bcd60e51b815260206004820152603f60248201527f466163746f727947656e657261746564203a206d73672e73656e64657220697360448201527f206e6f7420696e20666163746f72792061646d696e2077686974656c6973740060648201526084016109e7565b611d3482612070565b610dc681612466565b6060600b80546107b790612e7a565b611d54612016565b6001600160a01b038116611dd05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109e7565b611bfb81612070565b600081600111158015611ded575060025482105b80156107a25750506000908152600660205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b60025481611e61576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526007602090815260408083208054680100000000000000018802019055848352600690915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611f1057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611ed8565b5081611f48576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025550505050565b60008180600111611fd857600254811015611fd8576000818152600660205260409020547c01000000000000000000000000000000000000000000000000000000008116611fd6575b8061140b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600081815260066020526040902054611f9a565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061140b8284612e36565b6000546001600160a01b031633146111265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e7565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600660205260409020546107a290604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff1660208201527c0100000000000000000000000000000000000000000000000000000000831615159181019190915260e89190911c606082015290565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610cbb9084906124d2565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081526000906001600160a01b0385169063150b7a029061223e903390899088908890600401612ced565b602060405180830381600087803b15801561225857600080fd5b505af19250505080156122a6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122a391810190612a7d565b60015b61231a573d8080156122d4576040519150601f19603f3d011682016040523d82523d6000602084013e6122d9565b606091505b508051612312576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490505b949350505050565b6040805160808101825260008082526020820181905291810182905260608101919091526107a261239983611f51565b604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff1660208201527c0100000000000000000000000000000000000000000000000000000000831615159181019190915260e89190911c606082015290565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061243157612436565b612414565b508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f20690ae37b722d1d6265acdad124822baeb394891cc396d0722cbdb5fa2a683d9060200160405180910390a150565b6000612527826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125b79092919063ffffffff16565b805190915015610cbb57808060200190518101906125459190612a43565b610cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109e7565b60606123618484600085856001600160a01b0385163b6126195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e7565b600080866001600160a01b031685876040516126359190612bf3565b60006040518083038185875af1925050503d8060008114612672576040519150601f19603f3d011682016040523d82523d6000602084013e612677565b606091505b5091509150612687828286612692565b979650505050505050565b606083156126a157508161140b565b8251156126b15782518084602001fd5b8160405162461bcd60e51b81526004016109e79190612dde565b8280546126d790612e7a565b90600052602060002090601f0160209004810192826126f9576000855561273f565b82601f1061271257805160ff191683800117855561273f565b8280016001018555821561273f579182015b8281111561273f578251825591602001919060010190612724565b5061274b92915061274f565b5090565b5b8082111561274b5760008155600101612750565b600067ffffffffffffffff8084111561277f5761277f612f65565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156127c5576127c5612f65565b816040528093508581528686860111156127de57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461280f57600080fd5b919050565b600082601f83011261282557600080fd5b61140b83833560208501612764565b60006020828403121561284657600080fd5b61140b826127f8565b6000806040838503121561286257600080fd5b61286b836127f8565b9150612879602084016127f8565b90509250929050565b60008060006060848603121561289757600080fd5b6128a0846127f8565b92506128ae602085016127f8565b9150604084013590509250925092565b600080600080608085870312156128d457600080fd5b6128dd856127f8565b93506128eb602086016127f8565b925060408501359150606085013567ffffffffffffffff81111561290e57600080fd5b8501601f8101871361291f57600080fd5b61292e87823560208401612764565b91505092959194509250565b6000806040838503121561294d57600080fd5b612956836127f8565b9150602083013561296681612f94565b809150509250929050565b6000806040838503121561298457600080fd5b61298d836127f8565b946020939093013593505050565b6000806000606084860312156129b057600080fd5b6129b9846127f8565b95602085013595506040909401359392505050565b600080602083850312156129e157600080fd5b823567ffffffffffffffff808211156129f957600080fd5b818501915085601f830112612a0d57600080fd5b813581811115612a1c57600080fd5b8660208260051b8501011115612a3157600080fd5b60209290920196919550909350505050565b600060208284031215612a5557600080fd5b815161140b81612f94565b600060208284031215612a7257600080fd5b813561140b81612fa2565b600060208284031215612a8f57600080fd5b815161140b81612fa2565b600060208284031215612aac57600080fd5b813567ffffffffffffffff811115612ac357600080fd5b61236184828501612814565b60008060408385031215612ae257600080fd5b823567ffffffffffffffff811115612af957600080fd5b612b0585828601612814565b925050612879602084016127f8565b600060208284031215612b2657600080fd5b5035919050565b600060208284031215612b3f57600080fd5b5051919050565b60008060408385031215612b5957600080fd5b82359150602083013567ffffffffffffffff811115612b7757600080fd5b612b8385828601612814565b9150509250929050565b60008151808452612ba5816020860160208601612e4e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008151612be9818560208601612e4e565b9290920192915050565b60008251612c05818460208701612e4e565b9190910192915050565b600080845481600182811c915080831680612c2b57607f831692505b6020808410821415612c64577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015612c785760018114612ca757612cd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650612cd4565b60008b81526020902060005b86811015612ccc5781548b820152908501908301612cb3565b505084890196505b505050505050612ce48185612bd7565b95945050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612d1f6080830184612b8d565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561123757612d938385516001600160a01b03815116825267ffffffffffffffff602082015116602083015260408101511515604083015262ffffff60608201511660608301525050565b9284019260809290920191600101612d45565b6020808252825182820181905260009190848201906040850190845b8181101561123757835183529284019291840191600101612dc2565b60208152600061140b6020830184612b8d565b81516001600160a01b0316815260208083015167ffffffffffffffff169082015260408083015115159082015260608083015162ffffff1690820152608081016107a2565b60008219821115612e4957612e49612f07565b500190565b60005b83811015612e69578181015183820152602001612e51565b838111156117625750506000910152565b600181811c90821680612e8e57607f821691505b60208210811415612ec8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f0057612f00612f07565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8015158114611bfb57600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611bfb57600080fdfea264697066735822122062844b83a813f85ae9d6702f4d0729cc39d7882979a4d751bc3377506e132ee264736f6c63430008060033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000ac9d62a4d8341cd854529db715707595a3520db3000000000000000000000000000000000000000000000000000000000000001847484f5354204c414e44204d656d6265722773204361726400000000000000000000000000000000000000000000000000000000000000000000000000000004474c4d4300000000000000000000000000000000000000000000000000000000