10 txs
2.3k calls
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
getAllLevelCounts
viewfunction getAllLevelCounts() view returns (uint256[] list)
getAllMintProcess
viewfunction getAllMintProcess() view returns (uint8[] levelList, uint256[] totalList, uint256[] currList)
getAllTokenIds
viewfunction getAllTokenIds(uint256 startIndex, uint256 limit) view returns (uint256[] tokenIds)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getLevelCounts
viewfunction getLevelCounts(uint8 level) view returns (uint256)
getNextTokenId
viewfunction getNextTokenId() view returns (uint256)
getNFTInfo
viewfunction getNFTInfo(uint256 tokenId) view returns (tuple info, address owner)
getRemainingMint
viewfunction getRemainingMint(uint8 level) view returns (uint256)
getUserNFTInfos
viewfunction getUserNFTInfos(address user) view returns (uint256[] tokenIds, tuple[] infos)
getUserNFTs
viewfunction getUserNFTs(address user) view returns (uint256[] tokenIds)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
isTokenValid
viewfunction isTokenValid(uint256 tokenId) view returns (bool)
levelCounts
viewfunction levelCounts(uint8) view returns (uint256)
maxMintPerLevel
viewfunction maxMintPerLevel(uint8) view returns (uint256)
mintedPerLevel
viewfunction mintedPerLevel(uint8) view returns (uint256)
name
viewfunction name() view returns (string)
nftInfo
viewfunction nftInfo(uint256) view returns (uint8 level, address from, uint256 mintTime)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
stakingContracts
viewfunction stakingContracts(address) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenByIndex
viewfunction tokenByIndex(uint256 index) view returns (uint256)
tokenOfOwnerByIndex
viewfunction tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 tokenId)
burnByStaking
nonpayablefunction burnByStaking(uint256 tokenId)
mint
nonpayablefunction mint(address to, uint8 level) returns (uint256)
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string baseURI_)
setMaxMint
nonpayablefunction setMaxMint(uint8 level, uint256 maxAmount)
setStakingContract
nonpayablefunction setStakingContract(address target, bool flag)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BaseURISet
event BaseURISet(string baseURI)
MaxMintSet
event MaxMintSet(uint8 level, uint256 maxAmount)
NFTBurned
event NFTBurned(address indexed owner, uint256 tokenId, uint8 level)
NFTMinted
event NFTMinted(address indexed owner, uint256 tokenId, uint8 level)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
errors
ERC721EnumerableForbiddenBatchMint
error ERC721EnumerableForbiddenBatchMint()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ERC721OutOfBoundsIndex
error ERC721OutOfBoundsIndex(address owner, uint256 index)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
creation bytecode
0x608060405234801562000010575f80fd5b503360405180604001604052806012815260200171111111110810dbdb5b5d5b9a5d1e4813919560721b81525060405180604001604052806006815260200165442d41524d5960d01b815250815f90816200006c9190620001d7565b5060016200007b8282620001d7565b5050506001600160a01b038116620000ac57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000b781620000e8565b506001600b556201e24060125560408051602081019091525f8152601190620000e19082620001d7565b50620002a3565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200016257607f821691505b6020821081036200018157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001d257805f5260205f20601f840160051c81016020851015620001ae5750805b601f840160051c820191505b81811015620001cf575f8155600101620001ba565b50505b505050565b81516001600160401b03811115620001f357620001f362000139565b6200020b816200020484546200014d565b8462000187565b602080601f83116001811462000241575f8415620002295750858301515b5f19600386901b1c1916600185901b1785556200029b565b5f85815260208120601f198616915b82811015620002715788860151825594840194600190910190840162000250565b50858210156200028f57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b612ae080620002b15f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c8063715018a611610135578063b88d4fde116100b4578063d188929f11610079578063d188929f14610566578063deb8934e14610587578063df3bdc8f1461059a578063e985e9c5146105ad578063f2fde38b146105c0575f80fd5b8063b88d4fde14610506578063bcf8b8b414610519578063c87b56dd14610538578063c92243d81461054b578063caa0f92a1461055e575f80fd5b806393336d87116100fa57806393336d871461048b57806395d89b41146104aa5780639bc181d2146104b2578063a22cb465146104d4578063a5219b6c146104e7575f80fd5b8063715018a6146104445780637e7e81cd1461044c5780638515934c1461045f5780638da5cb5b146104725780638e0e972c14610483575f80fd5b806342966c68116101c15780636352211e116101865780636352211e146103e55780636680ce69146103f8578063691562a01461040b5780636ea8ba591461041e57806370a0823114610431575f80fd5b806342966c68146103755780634f6ccce71461038857806352de4ee51461039b57806355f804b3146103bb5780635c4f4078146103ce575f80fd5b80631f8bc790116102075780631f8bc790146102d257806323b872dd1461031b5780632f745c591461032e57806330cd91871461034157806342842e0e14610362575f80fd5b806301ffc9a71461024357806306fdde031461026b578063081812fc14610280578063095ea7b3146102ab57806318160ddd146102c0575b5f80fd5b6102566102513660046122bc565b6105d3565b60405190151581526020015b60405180910390f35b6102736105e3565b6040516102629190612324565b61029361028e366004612336565b610672565b6040516001600160a01b039091168152602001610262565b6102be6102b9366004612368565b610699565b005b6008545b604051908152602001610262565b61030c6102e0366004612336565b600e6020525f90815260409020805460019091015460ff82169161010090046001600160a01b03169083565b604051610262939291906123c4565b6102be6103293660046123ec565b6106a8565b6102c461033c366004612368565b610736565b61035461034f366004612425565b610799565b6040516102629291906124a1565b6102be6103703660046123ec565b61091e565b6102be610383366004612336565b61093d565b6102c4610396366004612336565b61094b565b6103ae6103a9366004612425565b6109a0565b6040516102629190612500565b6102be6103c9366004612512565b610a38565b6103d6610a8b565b6040516102629392919061257e565b6102936103f3366004612336565b610c63565b6102be610406366004612336565b610c6d565b6102c46104193660046125fb565b610c78565b6102c461042c36600461262c565b610f86565b6102c461043f366004612425565b610fc2565b6102be611007565b6103ae61045a366004612645565b61101a565b6102be61046d366004612665565b611134565b600a546001600160a01b0316610293565b6103ae611228565b6102c461049936600461262c565b600f6020525f908152604090205481565b6102736112db565b6102566104c0366004612425565b60106020525f908152604090205460ff1681565b6102be6104e236600461267f565b6112ea565b6102c46104f536600461262c565b600c6020525f908152604090205481565b6102be6105143660046126cc565b6112f5565b6102c461052736600461262c565b600d6020525f908152604090205481565b610273610546366004612336565b61130d565b610256610559366004612336565b6113e0565b6012546102c4565b610579610574366004612336565b6113fc565b6040516102629291906127a1565b6102c461059536600461262c565b6114e8565b6102be6105a836600461267f565b61155b565b6102566105bb3660046127c7565b61158d565b6102be6105ce366004612425565b6115ba565b5f6105dd826115f4565b92915050565b60605f80546105f1906127ef565b80601f016020809104026020016040519081016040528092919081815260200182805461061d906127ef565b80156106685780601f1061063f57610100808354040283529160200191610668565b820191905f5260205f20905b81548152906001019060200180831161064b57829003601f168201915b5050505050905090565b5f61067c82611618565b505f828152600460205260409020546001600160a01b03166105dd565b6106a4828233611650565b5050565b6001600160a01b0382166106d657604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f6106e283833361165d565b9050836001600160a01b0316816001600160a01b031614610730576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016106cd565b50505050565b5f61074083610fc2565b82106107715760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016106cd565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b6060805f6107a684610fc2565b90508067ffffffffffffffff8111156107c1576107c16126b8565b6040519080825280602002602001820160405280156107ea578160200160208202803683370190505b5092508067ffffffffffffffff811115610806576108066126b8565b60405190808252806020026020018201604052801561084f57816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816108245790505b5091505f5b81811015610917575f6108678683610736565b90508085838151811061087c5761087c612827565b6020908102919091018101919091525f828152600e9091526040908190208151606081019092528054829060ff16600f8111156108bb576108bb612390565b600f8111156108cc576108cc612390565b8152815461010090046001600160a01b03166020820152600190910154604090910152845185908490811061090357610903612827565b602090810291909101015250600101610854565b5050915091565b61093883838360405180602001604052805f8152506112f5565b505050565b6109488160016116c9565b50565b5f61095560085490565b821061097d5760405163295f44f760e21b81525f6004820152602481018390526044016106cd565b6008828154811061099057610990612827565b905f5260205f2001549050919050565b60605f6109ac83610fc2565b90508067ffffffffffffffff8111156109c7576109c76126b8565b6040519080825280602002602001820160405280156109f0578160200160208202803683370190505b5091505f5b81811015610a31575f610a088583610736565b905080848381518110610a1d57610a1d612827565b6020908102919091010152506001016109f5565b5050919050565b610a406118b3565b6011610a4d82848361287f565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f68282604051610a7f929190612939565b60405180910390a15050565b60408051600f8082526102008201909252606091829182919081602082016101e0803683370190505093508067ffffffffffffffff811115610acf57610acf6126b8565b604051908082528060200260200182016040528015610af8578160200160208202803683370190505b5092508067ffffffffffffffff811115610b1457610b146126b8565b604051908082528060200260200182016040528015610b3d578160200160208202803683370190505b5091505f5b818160ff161015610c5c575f8160ff16600f811115610b6357610b63612390565b905080600f811115610b7757610b77612390565b868360ff1681518110610b8c57610b8c612827565b602002602001019060ff16908160ff1681525050600c5f82600f811115610bb557610bb5612390565b600f811115610bc657610bc6612390565b81526020019081526020015f2054858360ff1681518110610be957610be9612827565b602002602001018181525050600d5f82600f811115610c0a57610c0a612390565b600f811115610c1b57610c1b612390565b81526020019081526020015f2054848360ff1681518110610c3e57610c3e612827565b60209081029190910101525080610c548161297b565b915050610b42565b5050909192565b5f6105dd82611618565b6109488160026116c9565b5f610c816118e0565b335f9081526010602052604090205460ff1680610cb7575033610cac600a546001600160a01b031690565b6001600160a01b0316145b610ced5760405162461bcd60e51b815260206004820152600760248201526609cde40c2eae8d60cb1b60448201526064016106cd565b600c5f83600f811115610d0257610d02612390565b600f811115610d1357610d13612390565b81526020019081526020015f2054600d5f84600f811115610d3657610d36612390565b600f811115610d4757610d47612390565b81526020019081526020015f205410610da25760405162461bcd60e51b815260206004820152601a60248201527f45786365656473206d6178206d696e7420666f72206c6576656c00000000000060448201526064016106cd565b6001600160a01b038316610df85760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74206d696e7420746f207a65726f2061646472657373000000000060448201526064016106cd565b601280545f9182610e0883612999565b919050559050600d5f84600f811115610e2357610e23612390565b600f811115610e3457610e34612390565b81526020019081526020015f205f815480929190610e5190612999565b9190505550600f5f84600f811115610e6b57610e6b612390565b600f811115610e7c57610e7c612390565b81526020019081526020015f205f815480929190610e9990612999565b9190505550604051806060016040528084600f811115610ebb57610ebb612390565b815233602080830191909152426040928301525f848152600e9091522081518154829060ff1916600183600f811115610ef657610ef6612390565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b0319909116178155604090910151600190910155610f37848261190a565b836001600160a01b03167f5716925f2a990bb51e5354134a606547c86dc787be1a2729eef575fd0c2bea1e8285604051610f729291906129b1565b60405180910390a290506105dd6001600b55565b5f600f5f83600f811115610f9c57610f9c612390565b600f811115610fad57610fad612390565b81526020019081526020015f20549050919050565b5f6001600160a01b038216610fec576040516322718ad960e21b81525f60048201526024016106cd565b506001600160a01b03165f9081526003602052604090205490565b61100f6118b3565b6110185f611923565b565b60605f61102660085490565b90508084106110775760405162461bcd60e51b815260206004820152601960248201527f537461727420696e646578206f7574206f6620626f756e64730000000000000060448201526064016106cd565b5f61108285836129c5565b90505f8185116110925784611094565b815b9050606481116110a457806110a7565b60645b90508067ffffffffffffffff8111156110c2576110c26126b8565b6040519080825280602002602001820160405280156110eb578160200160208202803683370190505b5093505f5b8181101561112a5761110561039682896129d8565b85828151811061111757611117612827565b60209081029190910101526001016110f0565b5050505092915050565b61113c6118b3565b600d5f83600f81111561115157611151612390565b600f81111561116257611162612390565b81526020019081526020015f20548110156111bf5760405162461bcd60e51b815260206004820152601b60248201527f4d617820616d6f756e74206c657373207468616e206d696e746564000000000060448201526064016106cd565b80600c5f84600f8111156111d5576111d5612390565b600f8111156111e6576111e6612390565b81526020019081526020015f20819055507f567e1cd425ee1b3ad1aaa6d23a606b95801138f16471b9b7e78e643862bfb6fc8282604051610a7f9291906129eb565b60408051600f80825261020082019092526060919081602082016101e0803683370190505091505f5b818160ff1610156112d657600f5f8260ff16600f81111561127457611274612390565b600f81111561128557611285612390565b600f81111561129657611296612390565b81526020019081526020015f2054838260ff16815181106112b9576112b9612827565b6020908102919091010152806112ce8161297b565b915050611251565b505090565b6060600180546105f1906127ef565b6106a4338383611974565b6113008484846106a8565b6107303385858585611a12565b60605f61131983610c63565b6001600160a01b0316036113875760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106cd565b5f611390611b3a565b90505f8151116113ae5760405180602001604052805f8152506113d9565b806113b884611b49565b6040516020016113c9929190612a06565b6040516020818303038152906040525b9392505050565b5f806113eb83610c63565b6001600160a01b0316141592915050565b604080516060810182525f80825260208201819052918101829052908061142284610c63565b6001600160a01b03160361146f5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016106cd565b5f838152600e6020526040902061148584610c63565b604080516060810190915282548390829060ff16600f8111156114aa576114aa612390565b600f8111156114bb576114bb612390565b8152815461010090046001600160a01b031660208201526001909101546040909101529590945092505050565b5f600d5f83600f8111156114fe576114fe612390565b600f81111561150f5761150f612390565b81526020019081526020015f2054600c5f84600f81111561153257611532612390565b600f81111561154357611543612390565b81526020019081526020015f20546105dd91906129c5565b6115636118b3565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6115c26118b3565b6001600160a01b0381166115eb57604051631e4fbdf760e01b81525f60048201526024016106cd565b61094881611923565b5f6001600160e01b0319821663780e9d6360e01b14806105dd57506105dd82611bd9565b5f818152600260205260408120546001600160a01b0316806105dd57604051637e27328960e01b8152600481018490526024016106cd565b6109388383836001611c28565b5f306001600160a01b038516036116b65760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207472616e7366657220746f20636f6e7472616374000000000060448201526064016106cd565b6116c1848484611d2c565b949350505050565b6116d16118e0565b5f6116db83610c63565b6001600160a01b0316036117285760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016106cd565b8060ff1660010361178c573361173d83610c63565b6001600160a01b0316146117875760405162461bcd60e51b81526020600482015260116024820152702737ba10333937b6903cb7bab939b2b63360791b60448201526064016106cd565b6117dd565b335f9081526010602052604090205460ff166117dd5760405162461bcd60e51b815260206004820152601060248201526f4e6f742066726f6d207374616b696e6760801b60448201526064016106cd565b5f6117e783610c63565b5f848152600e6020526040812080546001600160a81b031981168255600190910182905591925060ff90911690600f90828281111561182857611828612390565b600f81111561183957611839612390565b81526020019081526020015f205f81548092919061185690612a34565b919050555061186484611df7565b816001600160a01b03167fa645354f9200af615e56df68bd4cc63a8e1e3318d266122d1c7bae76a83a59bd858360405161189f9291906129b1565b60405180910390a250506106a46001600b55565b600a546001600160a01b031633146110185760405163118cdaa760e01b81523360048201526024016106cd565b6002600b540361190357604051633ee5aeb560e01b815260040160405180910390fd5b6002600b55565b6106a4828260405180602001604052805f815250611e2f565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166119a657604051630b61174360e31b81526001600160a01b03831660048201526024016106cd565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15611b3357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611a54908890889087908790600401612a49565b6020604051808303815f875af1925050508015611a8e575060408051601f3d908101601f19168201909252611a8b91810190612a7b565b60015b611af5573d808015611abb576040519150601f19603f3d011682016040523d82523d5f602084013e611ac0565b606091505b5080515f03611aed57604051633250574960e11b81526001600160a01b03851660048201526024016106cd565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14611b3157604051633250574960e11b81526001600160a01b03851660048201526024016106cd565b505b5050505050565b6060601180546105f1906127ef565b60605f611b5583611e46565b60010190505f8167ffffffffffffffff811115611b7457611b746126b8565b6040519080825280601f01601f191660200182016040528015611b9e576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611ba857509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480611c0957506001600160e01b03198216635b5e139f60e01b145b806105dd57506301ffc9a760e01b6001600160e01b03198316146105dd565b8080611c3c57506001600160a01b03821615155b15611cfd575f611c4b84611618565b90506001600160a01b03831615801590611c775750826001600160a01b0316816001600160a01b031614155b8015611c8a5750611c88818461158d565b155b15611cb35760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016106cd565b8115611cfb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f80611d39858585611f1d565b90506001600160a01b038116611d9557611d9084600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611db8565b846001600160a01b0316816001600160a01b031614611db857611db8818561200f565b6001600160a01b038516611dd457611dcf8461208c565b6116c1565b846001600160a01b0316816001600160a01b0316146116c1576116c18585612133565b5f611e035f835f61165d565b90506001600160a01b0381166106a457604051637e27328960e01b8152600481018390526024016106cd565b611e398383612181565b610938335f858585611a12565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e845772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611eb0576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ece57662386f26fc10000830492506010015b6305f5e1008310611ee6576305f5e100830492506008015b6127108310611efa57612710830492506004015b60648310611f0c576064830492506002015b600a83106105dd5760010192915050565b5f828152600260205260408120546001600160a01b0390811690831615611f4957611f498184866121e2565b6001600160a01b03811615611f8357611f645f855f80611c28565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615611fb1576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f61201983610fc2565b5f838152600760209081526040808320546001600160a01b038816845260069092529091209192509081831461206e575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f9061209d906001906129c5565b5f83815260096020526040812054600880549394509092849081106120c4576120c4612827565b905f5260205f200154905080600883815481106120e3576120e3612827565b5f91825260208083209091019290925582815260099091526040808220849055858252812055600880548061211a5761211a612a96565b600190038181905f5260205f20015f9055905550505050565b5f600161213f84610fc2565b61214991906129c5565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166121aa57604051633250574960e11b81525f60048201526024016106cd565b5f6121b683835f61165d565b90506001600160a01b03811615610938576040516339e3563760e11b81525f60048201526024016106cd565b6121ed838383612246565b610938576001600160a01b03831661221b57604051637e27328960e01b8152600481018290526024016106cd565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016106cd565b5f6001600160a01b038316158015906116c15750826001600160a01b0316846001600160a01b0316148061227f575061227f848461158d565b806116c15750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610948575f80fd5b5f602082840312156122cc575f80fd5b81356113d9816122a7565b5f5b838110156122f15781810151838201526020016122d9565b50505f910152565b5f81518084526123108160208601602086016122d7565b601f01601f19169290920160200192915050565b602081525f6113d960208301846122f9565b5f60208284031215612346575f80fd5b5035919050565b80356001600160a01b0381168114612363575f80fd5b919050565b5f8060408385031215612379575f80fd5b6123828361234d565b946020939093013593505050565b634e487b7160e01b5f52602160045260245ffd5b601081106123c057634e487b7160e01b5f52602160045260245ffd5b9052565b606081016123d282866123a4565b6001600160a01b0393909316602082015260400152919050565b5f805f606084860312156123fe575f80fd5b6124078461234d565b92506124156020850161234d565b9150604084013590509250925092565b5f60208284031215612435575f80fd5b6113d98261234d565b5f815180845260208085019450602084015f5b8381101561246d57815187529582019590820190600101612451565b509495945050505050565b6124838282516123a4565b6020818101516001600160a01b031690830152604090810151910152565b604081525f6124b3604083018561243e565b8281036020848101919091528451808352858201928201905f5b818110156124f3576124e0838651612478565b93830193606092909201916001016124cd565b5090979650505050505050565b602081525f6113d9602083018461243e565b5f8060208385031215612523575f80fd5b823567ffffffffffffffff8082111561253a575f80fd5b818501915085601f83011261254d575f80fd5b81358181111561255b575f80fd5b86602082850101111561256c575f80fd5b60209290920196919550909350505050565b606080825284519082018190525f906020906080840190828801845b828110156125b957815160ff168452928401929084019060010161259a565b50505083810360208501526125ce818761243e565b91505082810360408401526125e3818561243e565b9695505050505050565b803560108110612363575f80fd5b5f806040838503121561260c575f80fd5b6126158361234d565b9150612623602084016125ed565b90509250929050565b5f6020828403121561263c575f80fd5b6113d9826125ed565b5f8060408385031215612656575f80fd5b50508035926020909101359150565b5f8060408385031215612676575f80fd5b612382836125ed565b5f8060408385031215612690575f80fd5b6126998361234d565b9150602083013580151581146126ad575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f80608085870312156126df575f80fd5b6126e88561234d565b93506126f66020860161234d565b925060408501359150606085013567ffffffffffffffff80821115612719575f80fd5b818701915087601f83011261272c575f80fd5b81358181111561273e5761273e6126b8565b604051601f8201601f19908116603f01168101908382118183101715612766576127666126b8565b816040528281528a602084870101111561277e575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b608081016127af8285612478565b6001600160a01b039290921660609190910152919050565b5f80604083850312156127d8575f80fd5b6127e18361234d565b91506126236020840161234d565b600181811c9082168061280357607f821691505b60208210810361282157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b601f82111561093857805f5260205f20601f840160051c810160208510156128605750805b601f840160051c820191505b81811015611b33575f815560010161286c565b67ffffffffffffffff831115612897576128976126b8565b6128ab836128a583546127ef565b8361283b565b5f601f8411600181146128dc575f85156128c55750838201355b5f19600387901b1c1916600186901b178355611b33565b5f83815260208120601f198716915b8281101561290b57868501358255602094850194600190920191016128eb565b5086821015612927575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52601160045260245ffd5b5f60ff821660ff810361299057612990612967565b60010192915050565b5f600182016129aa576129aa612967565b5060010190565b828152604081016113d960208301846123a4565b818103818111156105dd576105dd612967565b808201808211156105dd576105dd612967565b604081016129f982856123a4565b8260208301529392505050565b5f8351612a178184602088016122d7565b835190830190612a2b8183602088016122d7565b01949350505050565b5f81612a4257612a42612967565b505f190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906125e3908301846122f9565b5f60208284031215612a8b575f80fd5b81516113d9816122a7565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212207ca404751165a62b640a880016408706bd4206fc41c2a862be24abd833eb3bb564736f6c63430008180033