[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "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": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101606040523480156200001257600080fd5b50306040518060400160405280600781526020016625212a37b5b2b760c91b81525080604051806040016040528060018152602001603160f81b815250604051806040016040528060078152602001661a5b9d985b1a5960ca1b815250604051806040016040528060078152602001661a5b9d985b1a5960ca1b8152508160039081620000a0919062000321565b506004620000af828262000321565b50620000c191508390506005620001ac565b61012052620000d2816006620001ac565b61014052815160208084019190912060e052815190820120610100524660a0526200016060e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200019a57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001a581620001e5565b5062000463565b6000602083511015620001cc57620001c48362000237565b9050620001df565b81620001d9848262000321565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f8151111562000265578260405163305a27a960e01b8152600401620001919190620003ed565b805162000272826200043e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002a557607f821691505b602082108103620002c657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031c576000816000526020600020601f850160051c81016020861015620002f75750805b601f850160051c820191505b81811015620003185782815560010162000303565b5050505b505050565b81516001600160401b038111156200033d576200033d6200027a565b62000355816200034e845462000290565b84620002cc565b602080601f8311600181146200038d5760008415620003745750858301515b600019600386901b1c1916600185901b17855562000318565b600085815260208120601f198616915b82811015620003be578886015182559484019460019091019084016200039d565b5085821015620003dd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200041d57858101830151858201604001528201620003ff565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002c65760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516122e7620004be6000396000610f4e01526000610f2101526000610cbc01526000610c9401526000610bef01526000610c1901526000610c4301526122e76000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063715018a6116101045780639ab24eb0116100a2578063d505accf11610071578063d505accf146103f7578063dd62ed3e1461040a578063f1127ed814610443578063f2fde38b1461048257600080fd5b80639ab24eb0146103ab5780639dc29fac146103be578063a9059cbb146103d1578063c3cda520146103e457600080fd5b80638da5cb5b116100de5780638da5cb5b146103605780638e539e8c1461037157806391ddadf41461038457806395d89b41146103a357600080fd5b8063715018a61461032a5780637ecebe001461033257806384b0196e1461034557600080fd5b80633a46b1a811610171578063587cde1e1161014b578063587cde1e146102985780635c19a95c146102dc5780636fcfff45146102ef57806370a082311461031757600080fd5b80633a46b1a81461026a57806340c10f191461027d5780634bf5d7e91461029057600080fd5b806318160ddd116101ad57806318160ddd1461022a57806323b872dd14610240578063313ce567146102535780633644e5151461026257600080fd5b806306fdde03146101d4578063077f224a146101f2578063095ea7b314610207575b600080fd5b6101dc610495565b6040516101e99190611cc1565b60405180910390f35b610205610200366004611d93565b610527565b005b61021a610215366004611e07565b610574565b60405190151581526020016101e9565b61023261058e565b6040519081526020016101e9565b61021a61024e366004611e31565b61059e565b604051601281526020016101e9565b6102326105c2565b610232610278366004611e07565b6105cc565b61020561028b366004611e07565b610652565b6101dc610668565b6102c46102a6366004611e6d565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101e9565b6102056102ea366004611e6d565b6106e0565b6103026102fd366004611e6d565b6106eb565b60405163ffffffff90911681526020016101e9565b610232610325366004611e6d565b6106f6565b610205610714565b610232610340366004611e6d565b610728565b61034d610733565b6040516101e99796959493929190611e88565b600b546001600160a01b03166102c4565b61023261037f366004611f21565b610779565b61038c6107e3565b60405165ffffffffffff90911681526020016101e9565b6101dc6107ed565b6102326103b9366004611e6d565b6107fc565b6102056103cc366004611e07565b61082c565b61021a6103df366004611e07565b61083e565b6102056103f2366004611f4b565b61084c565b610205610405366004611fa3565b610909565b61023261041836600461200d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610456610451366004612040565b610a43565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101e9565b610205610490366004611e6d565b610a68565b6060600c80546104a490612080565b80601f01602080910402602001604051908101604052809291908181526020018280546104d090612080565b801561051d5780601f106104f25761010080835404028352916020019161051d565b820191906000526020600020905b81548152906001019060200180831161050057829003601f168201915b5050505050905090565b600c805461053490612080565b151590508061054257508251155b1561054c57600080fd5b600c610558848261210a565b50600d610565838261210a565b5061056f81610aa6565b505050565b600033610582818585610af8565b60019150505b92915050565b600061059960025490565b905090565b6000336105ac858285610b05565b6105b7858585610b83565b506001949350505050565b6000610599610be2565b6000806105d76107e3565b90508065ffffffffffff16831061061757604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b61064161062384610d0d565b6001600160a01b038616600090815260096020526040902090610d44565b6001600160d01b0316949350505050565b61065a610dfa565b6106648282610e27565b5050565b6060610672610e5d565b65ffffffffffff166106826107e3565b65ffffffffffff16146106a8576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336106648183610e68565b600061058882610eda565b6001600160a01b038116600090815260208190526040812054610588565b61071c610dfa565b6107266000610aa6565b565b600061058882610efc565b600060608060008060006060610747610f1a565b61074f610f47565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000806107846107e3565b90508065ffffffffffff1683106107bf57604051637669fc0f60e11b81526004810184905265ffffffffffff8216602482015260440161060e565b6107d36107cb84610d0d565b600a90610d44565b6001600160d01b03169392505050565b6000610599610e5d565b6060600d80546104a490612080565b6001600160a01b038116600090815260096020526040812061081d90610f74565b6001600160d01b031692915050565b610834610dfa565b6106648282610fad565b600033610582818585610b83565b8342111561087057604051632341d78760e11b81526004810185905260240161060e565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906108ea906108e29060a00160405160208183030381529060405280519060200120610fe3565b858585611010565b90506108f6818761103e565b6109008188610e68565b50505050505050565b8342111561092d5760405163313c898160e11b81526004810185905260240161060e565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861097a8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006109d582610fe3565b905060006109e582878787611010565b9050896001600160a01b0316816001600160a01b031614610a2c576040516325c0072360e11b81526001600160a01b0380831660048301528b16602482015260440161060e565b610a378a8a8a610af8565b50505050505050505050565b6040805180820190915260008082526020820152610a618383611091565b9392505050565b610a70610dfa565b6001600160a01b038116610a9a57604051631e4fbdf760e01b81526000600482015260240161060e565b610aa381610aa6565b50565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61056f83838360016110c7565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610b7d5781811015610b6e57604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161060e565b610b7d848484840360006110c7565b50505050565b6001600160a01b038316610bad57604051634b637e8f60e11b81526000600482015260240161060e565b6001600160a01b038216610bd75760405163ec442f0560e01b81526000600482015260240161060e565b61056f83838361119c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610c3b57507f000000000000000000000000000000000000000000000000000000000000000046145b15610c6557507f000000000000000000000000000000000000000000000000000000000000000090565b610599604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610d40576040516306dfcc6560e41b8152603060048201526024810183905260440161060e565b5090565b815460009081816005811115610da3576000610d5f846111a7565b610d6990856121e0565b60008881526020902090915081015465ffffffffffff9081169087161015610d9357809150610da1565b610d9e8160016121f3565b92505b505b6000610db18787858561128f565b90508015610dec57610dd687610dc86001846121e0565b600091825260209091200190565b54600160301b90046001600160d01b0316610def565b60005b979650505050505050565b600b546001600160a01b031633146107265760405163118cdaa760e01b815233600482015260240161060e565b6001600160a01b038216610e515760405163ec442f0560e01b81526000600482015260240161060e565b6106646000838361119c565b600061059943610d0d565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461056f8183610ed5866112f1565b6112fc565b6001600160a01b03811660009081526009602052604081205461058890611468565b6001600160a01b038116600090815260076020526040812054610588565b60606105997f00000000000000000000000000000000000000000000000000000000000000006005611499565b60606105997f00000000000000000000000000000000000000000000000000000000000000006006611499565b80546000908015610fa457610f8e83610dc86001846121e0565b54600160301b90046001600160d01b0316610a61565b60009392505050565b6001600160a01b038216610fd757604051634b637e8f60e11b81526000600482015260240161060e565b6106648260008361119c565b6000610588610ff0610be2565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061102288888888611544565b9250925092506110328282611613565b50909695505050505050565b6001600160a01b038216600090815260076020526040902080546001810190915581811461056f576040516301d4b62360e61b81526001600160a01b03841660048201526024810182905260440161060e565b60408051808201909152600080825260208201526001600160a01b0383166000908152600960205260409020610a6190836116cc565b6001600160a01b0384166110f15760405163e602df0560e01b81526000600482015260240161060e565b6001600160a01b03831661111b57604051634a1406b160e11b81526000600482015260240161060e565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610b7d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161118e91815260200190565b60405180910390a350505050565b61056f83838361173c565b6000816000036111b957506000919050565b600060016111c6846117a2565b901c6001901b905060018184816111df576111df612206565b048201901c905060018184816111f7576111f7612206565b048201901c9050600181848161120f5761120f612206565b048201901c9050600181848161122757611227612206565b048201901c9050600181848161123f5761123f612206565b048201901c9050600181848161125757611257612206565b048201901c9050600181848161126f5761126f612206565b048201901c9050610a618182858161128957611289612206565b04611836565b60005b818310156112e95760006112a6848461184c565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156112d5578092506112e3565b6112e08160016121f3565b93505b50611292565b509392505050565b6000610588826106f6565b816001600160a01b0316836001600160a01b03161415801561131e5750600081115b1561056f576001600160a01b038316156113c6576001600160a01b038316600090815260096020526040812081906113619061186761135c86611873565b6118a7565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113bb929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561056f576001600160a01b038216600090815260096020526040812081906113ff906118e061135c86611873565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611459929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610d40576040516306dfcc6560e41b8152602060048201526024810183905260440161060e565b606060ff83146114b3576114ac836118ec565b9050610588565b8180546114bf90612080565b80601f01602080910402602001604051908101604052809291908181526020018280546114eb90612080565b80156115385780601f1061150d57610100808354040283529160200191611538565b820191906000526020600020905b81548152906001019060200180831161151b57829003601f168201915b50505050509050610588565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561157f5750600091506003905082611609565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156115d3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166115ff57506000925060019150829050611609565b9250600091508190505b9450945094915050565b60008260038111156116275761162761221c565b03611630575050565b60018260038111156116445761164461221c565b036116625760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156116765761167661221c565b036116975760405163fce698f760e01b81526004810182905260240161060e565b60038260038111156116ab576116ab61221c565b03610664576040516335e2f38360e21b81526004810182905260240161060e565b6040805180820190915260008082526020820152826000018263ffffffff16815481106116fb576116fb612232565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b61174783838361192b565b6001600160a01b03831661179757600061175f61058e565b90506001600160d01b038082111561179457604051630e58ae9360e11b8152600481018390526024810182905260440161060e565b50505b61056f838383611a55565b600080608083901c156117b757608092831c92015b604083901c156117c957604092831c92015b602083901c156117db57602092831c92015b601083901c156117ed57601092831c92015b600883901c156117ff57600892831c92015b600483901c1561181157600492831c92015b600283901c1561182357600292831c92015b600183901c156105885760010192915050565b60008183106118455781610a61565b5090919050565b600061185b6002848418612248565b610a61908484166121f3565b6000610a61828461226a565b60006001600160d01b03821115610d40576040516306dfcc6560e41b815260d060048201526024810183905260440161060e565b6000806118d36118b56107e3565b6118cb6118c188610f74565b868863ffffffff16565b879190611acb565b915091505b935093915050565b6000610a618284612291565b606060006118f983611ad9565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b03831661195657806002600082825461194b91906121f3565b909155506119c89050565b6001600160a01b038316600090815260208190526040902054818110156119a95760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161060e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166119e457600280548290039055611a03565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4891815260200190565b60405180910390a3505050565b6001600160a01b038316611a7757611a74600a6118e061135c84611873565b50505b6001600160a01b038216611a9957611a96600a61186761135c84611873565b50505b6001600160a01b0383811660009081526008602052604080822054858416835291205461056f929182169116836112fc565b6000806118d3858585611b01565b600060ff8216601f81111561058857604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611c20576000611b1f87610dc86001856121e0565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b7357604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611bbf5784611b9688610dc86001866121e0565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611c10565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118d89050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b0291909316179201919091559050816118d8565b6000815180845260005b81811015611ca157602081850181015186830182015201611c85565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610a616020830184611c7b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611cfb57600080fd5b813567ffffffffffffffff80821115611d1657611d16611cd4565b604051601f8301601f19908116603f01168101908282118183101715611d3e57611d3e611cd4565b81604052838152866020858801011115611d5757600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b0381168114611d8e57600080fd5b919050565b600080600060608486031215611da857600080fd5b833567ffffffffffffffff80821115611dc057600080fd5b611dcc87838801611cea565b94506020860135915080821115611de257600080fd5b50611def86828701611cea565b925050611dfe60408501611d77565b90509250925092565b60008060408385031215611e1a57600080fd5b611e2383611d77565b946020939093013593505050565b600080600060608486031215611e4657600080fd5b611e4f84611d77565b9250611e5d60208501611d77565b9150604084013590509250925092565b600060208284031215611e7f57600080fd5b610a6182611d77565b60ff60f81b881681526000602060e06020840152611ea960e084018a611c7b565b8381036040850152611ebb818a611c7b565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611f0f57835183529284019291840191600101611ef3565b50909c9b505050505050505050505050565b600060208284031215611f3357600080fd5b5035919050565b803560ff81168114611d8e57600080fd5b60008060008060008060c08789031215611f6457600080fd5b611f6d87611d77565b95506020870135945060408701359350611f8960608801611f3a565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611fbe57600080fd5b611fc788611d77565b9650611fd560208901611d77565b95506040880135945060608801359350611ff160808901611f3a565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561202057600080fd5b61202983611d77565b915061203760208401611d77565b90509250929050565b6000806040838503121561205357600080fd5b61205c83611d77565b9150602083013563ffffffff8116811461207557600080fd5b809150509250929050565b600181811c9082168061209457607f821691505b6020821081036120b457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561056f576000816000526020600020601f850160051c810160208610156120e35750805b601f850160051c820191505b81811015612102578281556001016120ef565b505050505050565b815167ffffffffffffffff81111561212457612124611cd4565b612138816121328454612080565b846120ba565b602080601f83116001811461216d57600084156121555750858301515b600019600386901b1c1916600185901b178555612102565b600085815260208120601f198616915b8281101561219c5788860151825594840194600190910190840161217d565b50858210156121ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b81810381811115610588576105886121ca565b80820180821115610588576105886121ca565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008261226557634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b0382811682821603908082111561228a5761228a6121ca565b5092915050565b6001600160d01b0381811683821601908082111561228a5761228a6121ca56fea2646970667358221220c8994ab33c62cdf092c828ffa818f8bf6264a04370589dfd19393c46461ea88464736f6c63430008170033