[ { "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": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Lock", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "LockWithTime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Unlock", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_nextTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenUri", "type": "string" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "claimTokenUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "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": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bytes", "name": "settings", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "isFreeMintable", "outputs": [ { "internalType": "enum FreeMintableKind", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "isLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isSemiTransferable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isSoulBound", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "lock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "lockWithTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "locks", "outputs": [ { "internalType": "enum LockingKind", "name": "kind", "type": "uint8" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "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": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "safeMint", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "safeMintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "tokenUris", "type": "string[]" } ], "name": "safeMintBatchWithTokenUris", "outputs": [ { "internalType": "uint256", "name": "startId", "type": "uint256" }, { "internalType": "uint256", "name": "endId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "tokenUris", "type": "string[]" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint96", "name": "royaltyRate", "type": "uint96" } ], "name": "safeMintBatchWithTokenUrisAndRoyalty", "outputs": [ { "internalType": "uint256", "name": "startId", "type": "uint256" }, { "internalType": "uint256", "name": "endId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "tokenUri", "type": "string" } ], "name": "safeMintWithTokenUri", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "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": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "unlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_merkleRoot", "type": "bytes32" } ], "name": "updateUriMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "uriMerkleRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" } ]
608060405234801561001057600080fd5b5061343b806100206000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80636b1c4c4811610146578063b88d4fde116100c3578063d539139311610087578063d539139314610550578063d547741f14610565578063dd46706414610578578063e985e9c51461058b578063f4dadc61146105c7578063f6aacfb11461060957600080fd5b8063b88d4fde146104f1578063c45a015514610504578063c509946e14610517578063c87b56dd1461052a578063cdebec401461053d57600080fd5b806395d89b411161010a57806395d89b41146104ae578063a217fddf146104b6578063a22cb465146104be578063b0fde7fb146104d1578063b56bf7e5146104de57600080fd5b80636b1c4c481461044f5780636f9edacd1461046257806370a0823114610475578063775943781461048857806391d148541461049b57600080fd5b80632f2ff15d116101d457806342966c681161019857806342966c68146103fa5780634a60f6201461040d5780634bc96248146104165780636198e339146104295780636352211e1461043c57600080fd5b80632f2ff15d146103a557806332637c5d146103b857806336568abe146103c157806340d097c3146103d457806342842e0e146103e757600080fd5b806323b872dd1161021b57806323b872dd146102fd578063240294cd14610310578063248a9ca31461032f578063267eb9ed146103605780632a55205a1461037357600080fd5b806301ffc9a71461025857806306fdde0314610280578063081812fc14610295578063095ea7b3146102c057806315fb4178146102d5575b600080fd5b61026b610266366004612744565b61061c565b60405190151581526020015b60405180910390f35b610288610663565b60405161027791906127b1565b6102a86102a33660046127c4565b6106f5565b6040516001600160a01b039091168152602001610277565b6102d36102ce3660046127f4565b61071c565b005b6102e86102e3366004612879565b610836565b60408051928352602083019190915201610277565b6102d361030b3660046128ee565b61086d565b60995461032290610100900460ff1681565b604051610277919061295e565b61035261033d3660046127c4565b60009081526065602052604090206001015490565b604051908152602001610277565b6102d361036e3660046129b2565b61089e565b610386610381366004612a5c565b610ab6565b604080516001600160a01b039093168352602083019190915201610277565b6102d36103b3366004612a7e565b610b4a565b61035260d05481565b6102d36103cf366004612a7e565b610b6f565b6103526103e2366004612aaa565b610bed565b6102d36103f53660046128ee565b610c2d565b6102d36104083660046127c4565b610c48565b61035260cc5481565b6102d36104243660046127f4565b610c8d565b6102d36104373660046127c4565b610cea565b6102a861044a3660046127c4565b610e26565b6102d361045d366004612a5c565b610e86565b60995461026b9062010000900460ff1681565b610352610483366004612aaa565b6110ec565b610352610496366004612ac5565b611172565b61026b6104a9366004612a7e565b6111d5565b610288611200565b610352600081565b6102d36104cc366004612b25565b61120f565b60995461026b9060ff1681565b6102e86104ec366004612b5c565b61121a565b6102d36104ff366004612be7565b611250565b6097546102a8906001600160a01b031681565b6102d36105253660046127c4565b611282565b6102886105383660046127c4565b61131e565b6102d361054b366004612ca6565b6113c0565b6103526000805160206133e683398151915281565b6102d3610573366004612a7e565b611552565b6102d36105863660046127c4565b611577565b61026b610599366004612d1f565b6001600160a01b039182166000908152609f6020908152604080832093909416825291909152205460ff1690565b6105fa6105d53660046127c4565b60cf6020526000908152604090208054600182015460029092015460ff909116919083565b60405161027793929190612d49565b61026b6106173660046127c4565b6116da565b6000610627826117b0565b8061064257506001600160e01b0319821663152a902d60e11b145b8061065d57506001600160e01b0319821663085a042960e21b145b92915050565b6060609a805461067290612d6a565b80601f016020809104026020016040519081016040528092919081815260200182805461069e90612d6a565b80156106eb5780601f106106c0576101008083540402835291602001916106eb565b820191906000526020600020905b8154815290600101906020018083116106ce57829003601f168201915b5050505050905090565b6000610700826117f0565b506000908152609e60205260409020546001600160a01b031690565b600061072782610e26565b9050806001600160a01b0316836001600160a01b0316036107995760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806107b557506107b58133610599565b6108275760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610790565b610831838361184f565b505050565b6000806000805160206133e6833981519152610851816118bd565b61085e88888888886118c7565b92509250509550959350505050565b6108773382611a2c565b6108935760405162461bcd60e51b815260040161079090612d9e565b610831838383611aab565b600054610100900460ff16158080156108be5750600054600160ff909116105b806108d85750303b1580156108d8575060005460ff166001145b61093b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610790565b6000805460ff19166001179055801561095e576000805461ff0019166101001790555b60978054336001600160a01b031991821617909155609880549091166001600160a01b038a16179055604080516020601f89018190048102820181019092528781526109f891899089908190840183828082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250611c1c92505050565b6000610a0683850185612deb565b9050610a158160000151611c4d565b60208101516099805460ff1916911515919091179055610a388160400151611ceb565b610a5c816060015160998054911515620100000262ff000019909216919091179055565b610a6589611d14565b508015610aac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600082815260ce60205260408120548190600160a01b90046001600160601b031615610b3457600084815260ce602052604090205461271090610b0990600160a01b90046001600160601b031685612e87565b610b139190612e9e565b600085815260ce60205260409020546001600160a01b031692509050610b43565b610b3e8484611d37565b915091505b9250929050565b600082815260656020526040902060010154610b65816118bd565b6108318383611d7d565b6001600160a01b0381163314610bdf5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610790565b610be98282611e03565b5050565b60006000805160206133e6833981519152610c07816118bd565b60cc8054906000610c1783612ec0565b919050559150610c278383611e6a565b50919050565b61083183838360405180602001604052806000815250611250565b610c5181610e26565b6001600160a01b0316336001600160a01b031614610c815760405162461bcd60e51b815260040161079090612ed9565b610c8a81611e84565b50565b6000805160206133e6833981519152610ca5816118bd565b60005b82811015610ce45760cc805460009182610cc183612ec0565b919050559050610cd18582611e6a565b81610cdb81612ec0565b92505050610ca8565b50505050565b60995462010000900460ff16610d125760405162461bcd60e51b815260040161079090612f10565b33610d1c82610e26565b6001600160a01b031614610d425760405162461bcd60e51b815260040161079090612ed9565b6001600082815260cf602052604090205460ff166002811115610d6757610d6761292a565b14610dbe5760405162461bcd60e51b815260206004820152602160248201527f546f6b656e204d555354206265206c6f636b696e672070657270657475616c6c6044820152607960f81b6064820152608401610790565b600081815260cf60205260408120805460ff1916815560018101829055600201557f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1335b604080516001600160a01b039092168252602082018490520160405180910390a150565b6000818152609c60205260408120546001600160a01b03168061065d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610790565b60995462010000900460ff16610eae5760405162461bcd60e51b815260040161079090612f10565b33610eb883610e26565b6001600160a01b031614610ede5760405162461bcd60e51b815260040161079090612ed9565b804210610f265760405162461bcd60e51b8152602060048201526016602482015275115b99081d1a5b5948135554d5081899481d985b1a5960521b6044820152606401610790565b6001600083815260cf602052604090205460ff166002811115610f4b57610f4b61292a565b03610f985760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e206973206c6f636b696e672070657270657475616c6c79000000006044820152606401610790565b6002600083815260cf602052604090205460ff166002811115610fbd57610fbd61292a565b0361103157600082815260cf602052604090206002015442116110315760405162461bcd60e51b815260206004820152602660248201527f546f6b656e206c6f636b696e672066697865642074696d65206e6f742079657460448201526508195b99195960d21b6064820152608401610790565b60408051606081019091528060028152426020808301919091526040918201849052600085815260cf9091522081518154829060ff1916600183600281111561107c5761107c61292a565b0217905550602082015160018201556040909101516002909101557f32184275a0a593e54467a42e767eaa7dfaf2c49055d225bd8a29ce02c31bf01233604080516001600160a01b0390921682526020820185905242908201526060810183905260800160405180910390a15050565b60006001600160a01b0382166111565760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610790565b506001600160a01b03166000908152609d602052604090205490565b60006000805160206133e683398151915261118c816118bd565b6111cc8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f2792505050565b95945050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b805461067290612d6a565b610be9338383611f6b565b6000806000805160206133e6833981519152611235816118bd565b6112438686863360006118c7565b9250925050935093915050565b61125a3383611a2c565b6112765760405162461bcd60e51b815260040161079090612d9e565b610ce484848484612039565b6001609954610100900460ff1660028111156112a0576112a061292a565b14806112c757506002609954610100900460ff1660028111156112c5576112c561292a565b145b61130d5760405162461bcd60e51b8152602060048201526017602482015276467265656d696e74204d55535420626520656e61626c6560481b6044820152606401610790565b6000611318816118bd565b5060d055565b600081815260cd6020526040902080546060919061133b90612d6a565b80601f016020809104026020016040519081016040528092919081815260200182805461136790612d6a565b80156113b45780601f10611389576101008083540402835291602001916113b4565b820191906000526020600020905b81548152906001019060200180831161139757829003601f168201915b50505050509050919050565b6001609954610100900460ff1660028111156113de576113de61292a565b148061140557506002609954610100900460ff1660028111156114035761140361292a565b145b61144b5760405162461bcd60e51b8152602060048201526017602482015276467265656d696e74204d55535420626520656e61626c6560481b6044820152606401610790565b61145485610e26565b6001600160a01b0316336001600160a01b0316146114845760405162461bcd60e51b815260040161079090612ed9565b600085858560405160200161149b93929190612f47565b6040516020818303038152906040528051906020012090506114f48383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060d054915084905061206c565b6115305760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610790565b600086815260cd60205260409020611549858783612fcb565b50505050505050565b60008281526065602052604090206001015461156d816118bd565b6108318383611e03565b60995462010000900460ff1661159f5760405162461bcd60e51b815260040161079090612f10565b336115a982610e26565b6001600160a01b0316146115cf5760405162461bcd60e51b815260040161079090612ed9565b6001600082815260cf602052604090205460ff1660028111156115f4576115f461292a565b0361164d5760405162461bcd60e51b815260206004820152602360248201527f546f6b656e206973206c6f636b65642070657270657475616c6c7920616c726560448201526261647960e81b6064820152608401610790565b60408051606081019091528060018152426020808301919091526000604092830181905284815260cf9091522081518154829060ff191660018360028111156116985761169861292a565b0217905550602082015160018201556040909101516002909101557f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d42733610e02565b60995460009062010000900460ff166117055760405162461bcd60e51b815260040161079090612f10565b6001600083815260cf602052604090205460ff16600281111561172a5761172a61292a565b036117485750600090815260cf602052604090206001015442101590565b6002600083815260cf602052604090205460ff16600281111561176d5761176d61292a565b036117a757600082815260cf6020526040902060010154421080159061065d575050600090815260cf602052604090206002015442111590565b5060005b919050565b60006001600160e01b031982166380ac58cd60e01b14806117e157506001600160e01b03198216635b5e139f60e01b145b8061065d575061065d82612082565b6000818152609c60205260409020546001600160a01b0316610c8a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610790565b6000818152609e6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061188482610e26565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610c8a81336120b7565b600080606485111561191b5760405162461bcd60e51b815260206004820181905260248201527f42617463682073697a65204d555354206e6f7420657863656564206c696d69746044820152606401610790565b60008060cc5493505b60ff8216871180156119395750606460ff8316105b15611a0c5760cc805490600061194e83612ec0565b91905055905061195e8982611e6a565b87878360ff168181106119735761197361308a565b905060200281019061198591906130a0565b600083815260cd602052604090209161199f919083612fcb565b506001600160601b038516156119fa576040805180820182526001600160a01b0380891682526001600160601b038089166020808501918252600087815260ce909152949094209251935116600160a01b0292169190911790555b81611a04816130e6565b925050611924565b83600160cc54611a1c9190613105565b9350935050509550959350505050565b600080611a3883610e26565b9050806001600160a01b0316846001600160a01b03161480611a7f57506001600160a01b038082166000908152609f602090815260408083209388168352929052205460ff165b80611aa35750836001600160a01b0316611a98846106f5565b6001600160a01b0316145b949350505050565b826001600160a01b0316611abe82610e26565b6001600160a01b031614611ae45760405162461bcd60e51b815260040161079090613118565b6001600160a01b038216611b465760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610790565b611b538383836001612110565b826001600160a01b0316611b6682610e26565b6001600160a01b031614611b8c5760405162461bcd60e51b815260040161079090613118565b6000818152609e6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609d8552838620805460001901905590871680865283862080546001019055868652609c90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600054610100900460ff16611c435760405162461bcd60e51b81526004016107909061315d565b610be982826121f9565b6127106001600160601b0382161115611cc35760405162461bcd60e51b815260206004820152603260248201527f54686520726f79616c74792072617465204d555354204e4f5420657863656564604482015271103634b6b4ba103832b931b2b73a30b3b29760711b6064820152608401610790565b609880546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b6099805482919061ff001916610100836002811115611d0c57611d0c61292a565b021790555050565b611d1f600082611d7d565b610c8a6000805160206133e683398151915282611d7d565b609854600090819061271090611d5d90600160a01b90046001600160601b031685612e87565b611d679190612e9e565b6098546001600160a01b03169590945092505050565b611d8782826111d5565b610be95760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611dbf3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611e0d82826111d5565b15610be95760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610be9828260405180602001604052806000815250612239565b6000611e8f82610e26565b9050611e9f816000846001612110565b611ea882610e26565b6000838152609e6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552609d84528285208054600019019055878552609c909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60cc805460009182919082611f3b83612ec0565b919050559050611f4b8482611e6a565b600081815260cd60205260409020611f6384826131a8565b509392505050565b816001600160a01b0316836001600160a01b031603611fcc5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610790565b6001600160a01b038381166000818152609f6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612044848484611aab565b6120508484848461226c565b610ce45760405162461bcd60e51b815260040161079090613267565b600082612079858461236d565b14949350505050565b60006001600160e01b03198216637965db0b60e01b148061065d57506301ffc9a760e01b6001600160e01b031983161461065d565b6120c182826111d5565b610be9576120ce816123b2565b6120d98360206123c4565b6040516020016120ea9291906132b9565b60408051601f198184030181529082905262461bcd60e51b8252610790916004016127b1565b6001600160a01b0384161580159061213057506001600160a01b03831615155b15610ce45760995460ff16156121485761214861332e565b60995462010000900460ff1615610ce45760005b818110156121f2573063f6aacfb16121748386613344565b6040518263ffffffff1660e01b815260040161219291815260200190565b602060405180830381865afa1580156121af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d39190613357565b156121e0576121e061332e565b806121ea81612ec0565b91505061215c565b5050505050565b600054610100900460ff166122205760405162461bcd60e51b81526004016107909061315d565b609a61222c83826131a8565b50609b61083182826131a8565b6122438383612566565b612250600084848461226c565b6108315760405162461bcd60e51b815260040161079090613267565b60006001600160a01b0384163b1561236257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122b0903390899088908890600401613374565b6020604051808303816000875af19250505080156122eb575060408051601f3d908101601f191682019092526122e8918101906133b1565b60015b612348573d808015612319576040519150601f19603f3d011682016040523d82523d6000602084013e61231e565b606091505b5080516000036123405760405162461bcd60e51b815260040161079090613267565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611aa3565b506001949350505050565b600081815b8451811015611f635761239e828683815181106123915761239161308a565b60200260200101516126ff565b9150806123aa81612ec0565b915050612372565b606061065d6001600160a01b03831660145b606060006123d3836002612e87565b6123de906002613344565b6001600160401b038111156123f5576123f5612ba1565b6040519080825280601f01601f19166020018201604052801561241f576020820181803683370190505b509050600360fc1b8160008151811061243a5761243a61308a565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124695761246961308a565b60200101906001600160f81b031916908160001a905350600061248d846002612e87565b612498906001613344565b90505b6001811115612510576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106124cc576124cc61308a565b1a60f81b8282815181106124e2576124e261308a565b60200101906001600160f81b031916908160001a90535060049490941c93612509816133ce565b905061249b565b50831561255f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610790565b9392505050565b6001600160a01b0382166125bc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610790565b6000818152609c60205260409020546001600160a01b0316156126215760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610790565b61262f600083836001612110565b6000818152609c60205260409020546001600160a01b0316156126945760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610790565b6001600160a01b0382166000818152609d6020908152604080832080546001019055848352609c90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600081831061271b57600082815260208490526040902061255f565b600083815260208390526040902061255f565b6001600160e01b031981168114610c8a57600080fd5b60006020828403121561275657600080fd5b813561255f8161272e565b60005b8381101561277c578181015183820152602001612764565b50506000910152565b6000815180845261279d816020860160208601612761565b601f01601f19169290920160200192915050565b60208152600061255f6020830184612785565b6000602082840312156127d657600080fd5b5035919050565b80356001600160a01b03811681146117ab57600080fd5b6000806040838503121561280757600080fd5b612810836127dd565b946020939093013593505050565b60008083601f84011261283057600080fd5b5081356001600160401b0381111561284757600080fd5b6020830191508360208260051b8501011115610b4357600080fd5b80356001600160601b03811681146117ab57600080fd5b60008060008060006080868803121561289157600080fd5b61289a866127dd565b945060208601356001600160401b038111156128b557600080fd5b6128c18882890161281e565b90955093506128d49050604087016127dd565b91506128e260608701612862565b90509295509295909350565b60008060006060848603121561290357600080fd5b61290c846127dd565b925061291a602085016127dd565b9150604084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b60038110610c8a57634e487b7160e01b600052602160045260246000fd5b6020810161296b83612940565b91905290565b60008083601f84011261298357600080fd5b5081356001600160401b0381111561299a57600080fd5b602083019150836020828501011115610b4357600080fd5b60008060008060008060006080888a0312156129cd57600080fd5b6129d6886127dd565b965060208801356001600160401b03808211156129f257600080fd5b6129fe8b838c01612971565b909850965060408a0135915080821115612a1757600080fd5b612a238b838c01612971565b909650945060608a0135915080821115612a3c57600080fd5b50612a498a828b01612971565b989b979a50959850939692959293505050565b60008060408385031215612a6f57600080fd5b50508035926020909101359150565b60008060408385031215612a9157600080fd5b82359150612aa1602084016127dd565b90509250929050565b600060208284031215612abc57600080fd5b61255f826127dd565b600080600060408486031215612ada57600080fd5b612ae3846127dd565b925060208401356001600160401b03811115612afe57600080fd5b612b0a86828701612971565b9497909650939450505050565b8015158114610c8a57600080fd5b60008060408385031215612b3857600080fd5b612b41836127dd565b91506020830135612b5181612b17565b809150509250929050565b600080600060408486031215612b7157600080fd5b612b7a846127dd565b925060208401356001600160401b03811115612b9557600080fd5b612b0a8682870161281e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612bdf57612bdf612ba1565b604052919050565b60008060008060808587031215612bfd57600080fd5b612c06856127dd565b93506020612c158187016127dd565b93506040860135925060608601356001600160401b0380821115612c3857600080fd5b818801915088601f830112612c4c57600080fd5b813581811115612c5e57612c5e612ba1565b612c70601f8201601f19168501612bb7565b91508082528984828501011115612c8657600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080600080600060608688031215612cbe57600080fd5b8535945060208601356001600160401b0380821115612cdc57600080fd5b612ce889838a01612971565b90965094506040880135915080821115612d0157600080fd5b50612d0e8882890161281e565b969995985093965092949392505050565b60008060408385031215612d3257600080fd5b612d3b836127dd565b9150612aa1602084016127dd565b60608101612d5685612940565b938152602081019290925260409091015290565b600181811c90821680612d7e57607f821691505b602082108103610c2757634e487b7160e01b600052602260045260246000fd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060808284031215612dfd57600080fd5b604051608081018181106001600160401b0382111715612e1f57612e1f612ba1565b604052612e2b83612862565b81526020830135612e3b81612b17565b6020820152604083013560038110612e5257600080fd5b60408201526060830135612e6581612b17565b60608201529392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761065d5761065d612e71565b600082612ebb57634e487b7160e01b600052601260045260246000fd5b500490565b600060018201612ed257612ed2612e71565b5060010190565b6020808252601d908201527f53656e646572204d555354206265206f776e6572206f6620746f6b656e000000604082015260600190565b6020808252601f908201527f53656d695472616e7366657261626c65204d55535420626520656e61626c6500604082015260600190565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b601f82111561083157600081815260208120601f850160051c81016020861015612fa45750805b601f850160051c820191505b81811015612fc357828155600101612fb0565b505050505050565b6001600160401b03831115612fe257612fe2612ba1565b612ff683612ff08354612d6a565b83612f7d565b6000601f84116001811461302a57600085156130125750838201355b600019600387901b1c1916600186901b1783556121f2565b600083815260209020601f19861690835b8281101561305b578685013582556020948501946001909201910161303b565b50868210156130785760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126130b757600080fd5b8301803591506001600160401b038211156130d157600080fd5b602001915036819003821315610b4357600080fd5b600060ff821660ff81036130fc576130fc612e71565b60010192915050565b8181038181111561065d5761065d612e71565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81516001600160401b038111156131c1576131c1612ba1565b6131d5816131cf8454612d6a565b84612f7d565b602080601f83116001811461320a57600084156131f25750858301515b600019600386901b1c1916600185901b178555612fc3565b600085815260208120601f198616915b828110156132395788860151825594840194600190910190840161321a565b50858210156132575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516132f1816017850160208801612761565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613322816028840160208801612761565b01602801949350505050565b634e487b7160e01b600052600160045260246000fd5b8082018082111561065d5761065d612e71565b60006020828403121561336957600080fd5b815161255f81612b17565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133a790830184612785565b9695505050505050565b6000602082840312156133c357600080fd5b815161255f8161272e565b6000816133dd576133dd612e71565b50600019019056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122093ae08f3928f23130c7c29c5bd9731106751fa7ec0a0f5d7f3b95a96840f63a464736f6c63430008140033