[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyAuthorized", "type": "error" }, { "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": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "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": [], "name": "NotAuthorized", "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": [], "name": "Unauthorized", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_account", "type": "address" } ], "name": "AddAuthorization", "type": "event" }, { "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_account", "type": "address" } ], "name": "RemoveAuthorization", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "_mode", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "addAuthorization", "outputs": [], "stateMutability": "nonpayable", "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": "authorizedAccounts", "outputs": [ { "internalType": "bool", "name": "_authorized", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "authorizedAccounts", "outputs": [ { "internalType": "address[]", "name": "_accounts", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_wad", "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": "_timestamp", "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": "address", "name": "_dst", "type": "address" }, { "internalType": "uint256", "name": "_wad", "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": "_nonce", "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": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "removeAuthorization", "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": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101606040523480156200001257600080fd5b50604051620030c9380380620030c9833981016040819052620000359162000408565b338280604051806040016040528060018152602001603160f81b8152508585816003908162000065919062000501565b50600462000074828262000501565b50620000869150839050600562000157565b610120526200009781600662000157565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250600b805460ff19169055620001448162000190565b506200014f620001fb565b505062000627565b600060208351101562000177576200016f8362000258565b90506200018a565b8162000184848262000501565b5060ff90505b92915050565b6200019d600c82620002a4565b15620001e2576040516001600160a01b03821681527f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029060200160405180910390a150565b604051633013e93f60e11b815260040160405180910390fd5b62000205620002c2565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200023b3390565b6040516001600160a01b03909116815260200160405180910390a1565b600080829050601f815111156200028f578260405163305a27a960e01b8152600401620002869190620005cd565b60405180910390fd5b80516200029c8262000602565b179392505050565b6000620002bb836001600160a01b038416620002e9565b9392505050565b600b5460ff1615620002e75760405163d93c066560e01b815260040160405180910390fd5b565b600081815260018301602052604081205462000332575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200018a565b5060006200018a565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200036e57818101518382015260200162000354565b50506000910152565b600082601f8301126200038957600080fd5b81516001600160401b0380821115620003a657620003a66200033b565b604051601f8301601f19908116603f01168101908282118183101715620003d157620003d16200033b565b81604052838152866020858801011115620003eb57600080fd5b620003fe84602083016020890162000351565b9695505050505050565b600080604083850312156200041c57600080fd5b82516001600160401b03808211156200043457600080fd5b620004428683870162000377565b935060208501519150808211156200045957600080fd5b50620004688582860162000377565b9150509250929050565b600181811c908216806200048757607f821691505b602082108103620004a857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004fc57600081815260208120601f850160051c81016020861015620004d75750805b601f850160051c820191505b81811015620004f857828155600101620004e3565b5050505b505050565b81516001600160401b038111156200051d576200051d6200033b565b62000535816200052e845462000472565b84620004ae565b602080601f8311600181146200056d5760008415620005545750858301515b600019600386901b1c1916600185901b178555620004f8565b600085815260208120601f198616915b828110156200059e578886015182559484019460019091019084016200057d565b5085821015620005bd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620005ee81604085016020870162000351565b601f01601f19169190910160400192915050565b80516020808301519190811015620004a85760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051612a47620006826000396000611224015260006111f701526000610eb601526000610e8e01526000610de901526000610e1301526000610e3d0152612a476000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80635c19a95c1161010f57806394f3f81d116100a2578063c3cda52011610071578063c3cda52014610472578063d505accf14610485578063dd62ed3e14610498578063f1127ed8146104d157600080fd5b806394f3f81d1461043157806395d89b41146104445780639ab24eb01461044c578063a9059cbb1461045f57600080fd5b80637ecebe00116100de5780637ecebe00146103d157806384b0196e146103e45780638e539e8c146103ff57806391ddadf41461041257600080fd5b80635c19a95c146103625780635c975abb146103755780636fcfff451461038057806370a08231146103a857600080fd5b806335b281531161018757806340c10f191161015657806340c10f19146102bf57806342966c68146102d25780634bf5d7e9146102e5578063587cde1e1461031e57600080fd5b806335b28153146102875780633644e5151461029c5780633a46b1a8146102a45780633f4ba83a146102b757600080fd5b806323b872dd116101c357806323b872dd1461023d57806324ba5884146102505780632e39187614610263578063313ce5671461027857600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f2610523565b6040516101ff919061250a565b60405180910390f35b61021b610216366004612539565b6105b5565b60405190151581526020016101ff565b6002545b6040519081526020016101ff565b61021b61024b366004612563565b6105cf565b61021b61025e36600461259f565b6105f3565b61026b6105fe565b6040516101ff91906125ba565b604051601281526020016101ff565b61029a61029536600461259f565b61060f565b005b61022f61065a565b61022f6102b2366004612539565b610664565b61029a610716565b61029a6102cd366004612539565b61075f565b61029a6102e03660046125fb565b6107ac565b60408051808201909152600e81527f6d6f64653d74696d657374616d7000000000000000000000000000000000000060208201526101f2565b61034a61032c36600461259f565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101ff565b61029a61037036600461259f565b6107b6565b600b5460ff1661021b565b61039361038e36600461259f565b6107c1565b60405163ffffffff90911681526020016101ff565b61022f6103b636600461259f565b6001600160a01b031660009081526020819052604090205490565b61022f6103df36600461259f565b6107cc565b6103ec6107d7565b6040516101ff9796959493929190612614565b61022f61040d3660046125fb565b610839565b61041a6108cf565b60405165ffffffffffff90911681526020016101ff565b61029a61043f36600461259f565b6108d9565b6101f2610921565b61022f61045a36600461259f565b610930565b61021b61046d366004612539565b610973565b61029a6104803660046126d7565b610981565b61029a61049336600461272f565b610a57565b61022f6104a6366004612799565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104e46104df3660046127cc565b610bc3565b60408051825165ffffffffffff16815260209283015179ffffffffffffffffffffffffffffffffffffffffffffffffffff1692810192909252016101ff565b6060600380546105329061280c565b80601f016020809104026020016040519081016040528092919081815260200182805461055e9061280c565b80156105ab5780601f10610580576101008083540402835291602001916105ab565b820191906000526020600020905b81548152906001019060200180831161058e57829003601f168201915b5050505050905090565b6000336105c3818585610be8565b60019150505b92915050565b6000336105dd858285610bfa565b6105e8858585610caf565b506001949350505050565b60006105c982610d40565b606061060a600c610d4d565b905090565b61061833610d40565b61064e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61065781610d5a565b50565b600061060a610ddc565b60008061066f6108cf565b90508065ffffffffffff1683106106c8576040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6106f26106d484610f07565b6001600160a01b038616600090815260096020526040902090610f57565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b61071f33610d40565b610755576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075d611023565b565b61076833610d40565b61079e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a88282611088565b5050565b61065733826110d7565b336107a88183611126565b60006105c9826111b0565b60006105c9826111d2565b6000606080600080600060606107eb6111f0565b6107f361121d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b6000806108446108cf565b90508065ffffffffffff168310610898576040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004810184905265ffffffffffff821660248201526044016106bf565b6108ac6108a484610f07565b600a90610f57565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b600061060a61124a565b6108e233610d40565b610918576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61065781611255565b6060600480546105329061280c565b6001600160a01b0381166000908152600960205260408120610951906112d0565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1692915050565b6000336105c3818585610caf565b834211156109be576040517f4683af0e000000000000000000000000000000000000000000000000000000008152600481018590526024016106bf565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a3890610a309060a0016040516020818303038152906040528051906020012061131f565b858585611367565b9050610a448187611395565b610a4e8188611126565b50505050505050565b83421115610a94576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024016106bf565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610ae18c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610b3c8261131f565b90506000610b4c82878787611367565b9050896001600160a01b0316816001600160a01b031614610bac576040517f4b800e460000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301528b1660248201526044016106bf565b610bb78a8a8a610be8565b50505050505050505050565b6040805180820190915260008082526020820152610be18383611401565b9392505050565b610bf58383836001611437565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ca95781811015610c9a576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604481018390526064016106bf565b610ca984848484036000611437565b50505050565b6001600160a01b038316610cf2576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016106bf565b6001600160a01b038216610d35576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016106bf565b610bf583838361153e565b60006105c9600c83611562565b60606000610be183611584565b610d65600c826115e0565b15610daa576040516001600160a01b03821681527f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f7000102906020015b60405180910390a150565b6040517f6027d27e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610e3557507f000000000000000000000000000000000000000000000000000000000000000046145b15610e5f57507f000000000000000000000000000000000000000000000000000000000000000090565b61060a604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610f53576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260306004820152602481018390526044016106bf565b5090565b815460009081816005811115610fb6576000610f72846115f5565b610f7c908561288e565b60008881526020902090915081015465ffffffffffff9081169087161015610fa657809150610fb4565b610fb18160016128a1565b92505b505b6000610fc4878785856116dd565b9050801561101557610fe987610fdb60018461288e565b600091825260209091200190565b546601000000000000900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611018565b60005b979650505050505050565b61102b61173f565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6001600160a01b0382166110cb576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016106bf565b6107a86000838361153e565b6001600160a01b03821661111a576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016106bf565b6107a88260008361153e565b6001600160a01b0382811660008181526008602052604080822080548686167fffffffffffffffffffffffff0000000000000000000000000000000000000000821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610bf581836111ab8661177b565b611799565b6001600160a01b0381166000908152600960205260408120546105c990611951565b6001600160a01b0381166000908152600760205260408120546105c9565b606061060a7f0000000000000000000000000000000000000000000000000000000000000000600561199b565b606061060a7f0000000000000000000000000000000000000000000000000000000000000000600661199b565b600061060a42610f07565b611260600c82611a46565b1561129e576040516001600160a01b03821681527f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b90390602001610d9f565b6040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546000908015611316576112ea83610fdb60018461288e565b546601000000000000900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16610be1565b60009392505050565b60006105c961132c610ddc565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060008061137988888888611a5b565b9250925092506113898282611b48565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610bf5576040517f752d88c00000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018290526044016106bf565b60408051808201909152600080825260208201526001600160a01b0383166000908152600960205260409020610be19083611c4c565b6001600160a01b03841661147a576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016106bf565b6001600160a01b0383166114bd576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016106bf565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ca957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161153091815260200190565b60405180910390a350505050565b6001600160a01b03831661155757610bf5838383611cd2565b610bf5838383611d65565b6001600160a01b03811660009081526001830160205260408120541515610be1565b6060816000018054806020026020016040519081016040528092919081815260200182805480156115d457602002820191906000526020600020905b8154815260200190600101908083116115c0575b50505050509050919050565b6000610be1836001600160a01b038416611d78565b60008160000361160757506000919050565b6000600161161484611dc7565b901c6001901b9050600181848161162d5761162d6128b4565b048201901c90506001818481611645576116456128b4565b048201901c9050600181848161165d5761165d6128b4565b048201901c90506001818481611675576116756128b4565b048201901c9050600181848161168d5761168d6128b4565b048201901c905060018184816116a5576116a56128b4565b048201901c905060018184816116bd576116bd6128b4565b048201901c9050610be1818285816116d7576116d76128b4565b04611e5b565b60005b818310156117375760006116f48484611e71565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561172357809250611731565b61172e8160016128a1565b93505b506116e0565b509392505050565b600b5460ff1661075d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166000908152602081905260408120546105c9565b816001600160a01b0316836001600160a01b0316141580156117bb5750600081115b15610bf5576001600160a01b03831615611889576001600160a01b038316600090815260096020526040812081906117fe90611e8c6117f986611e98565b611ef8565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161187e929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610bf5576001600160a01b038216600090815260096020526040812081906118c290611f316117f986611e98565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611942929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610f53576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260206004820152602481018390526044016106bf565b606060ff83146119b5576119ae83611f3d565b90506105c9565b8180546119c19061280c565b80601f01602080910402602001604051908101604052809291908181526020018280546119ed9061280c565b8015611a3a5780601f10611a0f57610100808354040283529160200191611a3a565b820191906000526020600020905b815481529060010190602001808311611a1d57829003601f168201915b505050505090506105c9565b6000610be1836001600160a01b038416611f7c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611a965750600091506003905082611b3e565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611aea573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611b3457506000925060019150829050611b3e565b9250600091508190505b9450945094915050565b6000826003811115611b5c57611b5c6128e3565b03611b65575050565b6001826003811115611b7957611b796128e3565b03611bb0576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611bc457611bc46128e3565b03611bfe576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016106bf565b6003826003811115611c1257611c126128e3565b036107a8576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016106bf565b6040805180820190915260008082526020820152826000018263ffffffff1681548110611c7b57611c7b612912565b60009182526020918290206040805180820190915291015465ffffffffffff811682526601000000000000900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b611cdd838383612076565b6001600160a01b038316611d5a576000611cf660025490565b905079ffffffffffffffffffffffffffffffffffffffffffffffffffff80821115611d57576040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016106bf565b50505b610bf58383836121b9565b611d6d61222f565b610bf5838383611cd2565b6000818152600183016020526040812054611dbf575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105c9565b5060006105c9565b600080608083901c15611ddc57608092831c92015b604083901c15611dee57604092831c92015b602083901c15611e0057602092831c92015b601083901c15611e1257601092831c92015b600883901c15611e2457600892831c92015b600483901c15611e3657600492831c92015b600283901c15611e4857600292831c92015b600183901c156105c95760010192915050565b6000818310611e6a5781610be1565b5090919050565b6000611e806002848418612941565b610be1908484166128a1565b6000610be1828461297c565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff821115610f53576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260d06004820152602481018390526044016106bf565b600080611f24611f066108cf565b611f1c611f12886112d0565b868863ffffffff16565b87919061226c565b915091505b935093915050565b6000610be182846129af565b60606000611f4a8361227a565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60008181526001830160205260408120548015612065576000611fa060018361288e565b8554909150600090611fb49060019061288e565b9050808214612019576000866000018281548110611fd457611fd4612912565b9060005260206000200154905080876000018481548110611ff757611ff7612912565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061202a5761202a6129e2565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105c9565b60009150506105c9565b5092915050565b6001600160a01b0383166120a157806002600082825461209691906128a1565b9091555061212c9050565b6001600160a01b0383166000908152602081905260409020548181101561210d576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260248101829052604481018390526064016106bf565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661214857600280548290039055612167565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ac91815260200190565b60405180910390a3505050565b6001600160a01b0383166121db576121d8600a611f316117f984611e98565b50505b6001600160a01b0382166121fd576121fa600a611e8c6117f984611e98565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610bf592918216911683611799565b600b5460ff161561075d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611f248585856122bb565b600060ff8216601f8111156105c9576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8254600090819080156124355760006122d987610fdb60018561288e565b60408051808201909152905465ffffffffffff808216808452660100000000000090920479ffffffffffffffffffffffffffffffffffffffffffffffffffff166020840152919250908716101561235c576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805165ffffffffffff8088169116036123be578461237f88610fdb60018661288e565b805479ffffffffffffffffffffffffffffffffffffffffffffffffffff9290921666010000000000000265ffffffffffff909216919091179055612425565b6040805180820190915265ffffffffffff808816825279ffffffffffffffffffffffffffffffffffffffffffffffffffff80881660208085019182528b54600181018d5560008d815291909120945191519092166601000000000000029216919091179101555b602001519250839150611f299050565b50506040805180820190915265ffffffffffff808516825279ffffffffffffffffffffffffffffffffffffffffffffffffffff80851660208085019182528854600181018a5560008a8152918220955192519093166601000000000000029190931617920191909155905081611f29565b6000815180845260005b818110156124cc576020818501810151868301820152016124b0565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610be160208301846124a6565b80356001600160a01b038116811461253457600080fd5b919050565b6000806040838503121561254c57600080fd5b6125558361251d565b946020939093013593505050565b60008060006060848603121561257857600080fd5b6125818461251d565b925061258f6020850161251d565b9150604084013590509250925092565b6000602082840312156125b157600080fd5b610be18261251d565b6020808252825182820181905260009190848201906040850190845b818110156113895783516001600160a01b0316835292840192918401916001016125d6565b60006020828403121561260d57600080fd5b5035919050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261265060e084018a6124a6565b8381036040850152612662818a6124a6565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156126b457835183529284019291840191600101612698565b50909c9b505050505050505050505050565b803560ff8116811461253457600080fd5b60008060008060008060c087890312156126f057600080fd5b6126f98761251d565b95506020870135945060408701359350612715606088016126c6565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561274a57600080fd5b6127538861251d565b96506127616020890161251d565b9550604088013594506060880135935061277d608089016126c6565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156127ac57600080fd5b6127b58361251d565b91506127c36020840161251d565b90509250929050565b600080604083850312156127df57600080fd5b6127e88361251d565b9150602083013563ffffffff8116811461280157600080fd5b809150509250929050565b600181811c9082168061282057607f821691505b602082108103612859577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105c9576105c961285f565b808201808211156105c9576105c961285f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082612977577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82811682821603908082111561206f5761206f61285f565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff81811683821601908082111561206f5761206f61285f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212208a3a51b24014263dc0ef1a73ff14db34e0019d38fbc75bbcfbe782a67c710ad864736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e50726f746f636f6c20546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044b49544500000000000000000000000000000000000000000000000000000000