[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_totalSupply", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "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": "currentAllowance", "type": "uint256" }, { "internalType": "uint256", "name": "requestedDecrease", "type": "uint256" } ], "name": "ERC20FailedDecreaseAllowance", "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": "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": "previousBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "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": "amount", "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": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint32", "name": "_key", "type": "uint32" }, { "internalType": "uint224", "name": "_value", "type": "uint224" } ], "internalType": "struct Checkpoints.Checkpoint224", "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": "spender", "type": "address" }, { "internalType": "uint256", "name": "requestedDecrease", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "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": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [ { "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": "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": "amount", "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": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
6101608060405234620000e15762002f829081380380926200002182620000f9565b823960808282019212620000e15780516001600160401b039290838111620000e157816200005191840162000175565b9261018051908111620000e1576200006a920162000175565b6101a0516101c051916001600160a01b0383168303620000e1576200008f93620001db565b604051611eec90816200105682396080518161154e015260a05181611609015260c05181611518015260e0518161159d015261010051816115c3015261012051816106dc015261014051816107050152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b601f01601f1916610160908101906001600160401b038211908210176200011f57604052565b620000e5565b604081019081106001600160401b038211176200011f57604052565b60405190620001508262000125565b565b5f5b838110620001645750505f910152565b818101518382015260200162000154565b81601f82011215620000e15780516001600160401b03928382116200011f5760405193601f8301601f19908116603f01168501908111858210176200011f5760405281845260208284010111620000e157620001d8916020808501910162000152565b90565b939290604051620001ec8162000125565b600195868252602080830193603160f81b8552825160018060401b0381116200011f5762000227816200022160035462000347565b62000382565b8299601f8211600114620002b657908080620002629493620001509c9d5f93620002aa575b501b915f199060031b1c191617600355620004e2565b6200026d8262000970565b610120526200027c8362000a7a565b61014052815191012060e052519020610100524660a0526200029d62000bf2565b6080523060c052620005d0565b88015192505f6200024c565b60035f529299919291601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b818110620003315750918391620001509c9d96946200026296941062000318575b5050811b01600355620004e2565b8701515f1960f88460031b161c191690555f806200030a565b87830151845592850192918d01918d01620002e9565b90600182811c9216801562000377575b60208310146200036357565b634e487b7160e01b5f52602260045260245ffd5b91607f169162000357565b601f81116200038f575050565b5f906003825260208220906020601f850160051c83019410620003cf575b601f0160051c01915b828110620003c357505050565b818155600101620003b6565b9092508290620003ad565b601f8111620003e7575050565b5f906004825260208220906020601f850160051c8301941062000427575b601f0160051c01915b8281106200041b57505050565b8181556001016200040e565b909250829062000405565b601f81116200043f575050565b5f906005825260208220906020601f850160051c830194106200047f575b601f0160051c01915b8281106200047357505050565b81815560010162000466565b90925082906200045d565b601f811162000497575050565b5f906006825260208220906020601f850160051c83019410620004d7575b601f0160051c01915b828110620004cb57505050565b818155600101620004be565b9092508290620004b5565b80519091906001600160401b0381116200011f576200050e816200050860045462000347565b620003da565b602080601f83116001146200054b57508192935f926200053f575b50508160011b915f199060031b1c191617600455565b015190505f8062000529565b60045f52601f198316949091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b925f905b878210620005b75750508360019596106200059e575b505050811b01600455565b01515f1960f88460031b161c191690555f808062000593565b806001859682949686015181550195019301906200057d565b91906001600160a01b0383168015620006865760025482810180911162000680576002556001600160a01b0384165f90815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160e01b0384116200065a57620001509293506200069e565b604051630e58ae9360e11b8152600481018590526001600160e01b036024820152604490fd5b6200095c565b60405163ec442f0560e01b81525f6004820152602490fd5b9190620006ab8162000c5e565b9265ffffffffffff804311620007825743169363ffffffff94858111620007635750620001509394620006ec620006f592620006e662000ca1565b62001021565b90431662000dfc565b50506001600160a01b0390811690811562000746575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f92835260409092205481169116620007a1565b6200075b620007558462000c5e565b620008ea565b50506200070b565b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b6040516306dfcc6560e41b815260306004820152436024820152604490fd5b6001600160a01b03808316939291908116908185141580620008e0575b620007cb575b5050505050565b8162000845575b505082620007e3575b8080620007c4565b6001600160a01b03165f9081526009602052604090205f8051602062002f628339815191529162000821916200081a909162000c5e565b9062000923565b604080516001600160e01b039384168152919092166020820152a25f8080620007db565b6001600160a01b03165f908152600960205260409020620008668462000c5e565b9065ffffffffffff804311620007825743169163ffffffff928381116200076357509181620008b35f8051602062002f6283398151915294620008ad620008bd9562000cdb565b6200103b565b9143169062000f32565b604080516001600160e01b039384168152919092166020820152a25f80620007d2565b50831515620007be565b65ffffffffffff804311620007825743169063ffffffff9182811162000763575090620006ec6200091f92620008ad62000ca1565b9091565b91909165ffffffffffff804311620007825743169063ffffffff91828111620007635750620008b36200091f9394620006e68362000cdb565b634e487b7160e01b5f52601160045260245ffd5b90815160208082105f146200098d57505090620001d89062000b84565b6001600160401b0382116200011f57620009b482620009ae60055462000347565b62000432565b80601f8311600114620009f257508192935f92620009e6575b50508160011b915f199060031b1c19161760055560ff90565b015190505f80620009cd565b60055f52601f198316949091907f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0925f905b87821062000a6157505083600195961062000a48575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f808062000a3a565b8060018596829496860151815501950193019062000a24565b90815160208082105f1462000a9757505090620001d89062000b84565b6001600160401b0382116200011f5762000abe8262000ab860065462000347565b6200048a565b80601f831160011462000afc57508192935f9262000af0575b50508160011b915f199060031b1c19161760065560ff90565b015190505f8062000ad7565b60065f52601f198316949091907ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f925f905b87821062000b6b57505083600195961062000b52575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f808062000b44565b8060018596829496860151815501950193019062000b2e565b601f81511162000bb157602081519101516020821062000ba2571790565b5f198260200360031b1b161790565b6044604051809263305a27a960e01b82526020600483015262000be4815180928160248601526020868601910162000152565b601f01601f19168101030190fd5b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b038211176200011f5760405251902090565b6001600160e01b039081811162000c73571690565b604490604051906306dfcc6560e41b825260e060048301526024820152fd5b5f198101919082116200068057565b600a545f908062000cb25750505f90565b5f199181838101116200068057600a9052015f8051602062002f42833981519152015460201c90565b80545f918162000cec575050505f90565b5f19928284810111620006805760209181522001015460201c90565b600a5490680100000000000000008210156200011f576001820180600a5582101562000d6357600a5f52805160209182015190911b63ffffffff191663ffffffff91909116175f8051602062002f4283398151915290910155565b634e487b7160e01b5f52603260045260245ffd5b908154680100000000000000008110156200011f576001810180845581101562000d63575f92835260209283902082519284015190931b63ffffffff191663ffffffff9290921691909117910155565b604080519192919081016001600160401b038111828210176200011f57604052602081935463ffffffff81168352811c910152565b600a5491929190811562000f045762000e3a62000e3462000e1d8462000c92565b600a5f525f8051602062002f428339815191520190565b62000dc7565b805163ffffffff838116949116841062000ef2578560209362000eb29562000e7362000e6a865163ffffffff1690565b63ffffffff1690565b0362000eb6575062000e8d62000e1d62000ea49362000c92565b9063ffffffff82549181199060201b169116179055565b01516001600160e01b031690565b9190565b905062000eec915062000ed862000ecc62000141565b63ffffffff9092168252565b6001600160e01b0387168185015262000d08565b62000ea4565b604051632520601d60e01b8152600490fd5b62000f2d915062000f1862000ecc62000141565b6001600160e01b038416602082015262000d08565b5f9190565b80549293929190821562000ff85762000f5e62000e3462000f538562000c92565b835f5260205f200190565b9062000f6e825163ffffffff1690565b63ffffffff8481169116811062000ef25762000eb294602094889262000f9c62000e6a875163ffffffff1690565b0362000fc2575062000ea49262000fb762000e8d9262000c92565b905f5260205f200190565b91505062000eec9162000fe462000fd862000141565b63ffffffff9093168352565b6001600160e01b0388168286015262000d77565b62000f2d92506200100c62000fd862000141565b6001600160e01b038516602083015262000d77565b6001600160e01b0391821690821601908111620006805790565b6001600160e01b039182169082160390811162000680579056fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146101a4578063095ea7b31461019f57806318160ddd1461019a57806323b872dd14610195578063313ce567146101905780633644e5151461018b57806339509351146101865780633a46b1a8146101815780634bf5d7e91461017c578063587cde1e146101775780635c19a95c146101725780636fcfff451461016d57806370a08231146101685780637ecebe001461016357806384b0196e1461015e5780638e539e8c1461015957806391ddadf41461015457806395d89b411461014f5780639ab24eb01461014a578063a457c2d714610145578063a9059cbb14610140578063c3cda5201461013b578063d505accf14610136578063dd62ed3e146101315763f1127ed81461012c575f80fd5b610ccc565b610c81565b610b4e565b610a84565b610a3e565b6109da565b610993565b6108f0565b6108c5565b6107b9565b6106c2565b61068a565b610652565b61060c565b6105e8565b6105af565b610529565b61047f565b610435565b610413565b6103f8565b610358565b61033b565b61030a565b6101fb565b91908251928382525f5b8481106101d3575050825f602080949584010152601f8019910116010190565b6020818301810151848301820152016101b3565b9060206101f89281815201906101a9565b90565b346102da575f806003193601126102d7576040518160035461021c8161106d565b808452906001908181169081156102af5750600114610256575b6102528461024681880382610dde565b604051918291826101e7565b0390f35b60038352602094507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061029c5750505081610252936102469282010193610236565b8054858501870152928501928101610280565b61025296506102469450602092508593915060ff191682840152151560051b82010193610236565b80fd5b5f80fd5b600435906001600160a01b03821682036102da57565b602435906001600160a01b03821682036102da57565b346102da5760403660031901126102da576103306103266102de565b602435903361119f565b602060405160018152f35b346102da575f3660031901126102da576020600254604051908152f35b346102da5760603660031901126102da576103716102de565b6103796102f4565b6044359060018060a01b0383165f52600160205261039a3360405f20610e27565b5492600184016103bb575b6103af93506110d1565b60405160018152602090f35b8284106103d7576103d2836103af9503338361123d565b6103a5565b604051637dc7a0d960e11b8152806103f4858733600485016110b3565b0390fd5b346102da575f3660031901126102da57602060405160128152f35b346102da575f3660031901126102da57602061042d611515565b604051908152f35b346102da5760403660031901126102da5761044e6102de565b335f5260016020526104638160405f20610e27565b54602435810180911161047a57610330913361119f565b611059565b346102da5760403660031901126102da576104986102de565b6024356104a443611836565b9165ffffffffffff83168210156104fe576001600160a01b03165f90815260096020526040902061025292506001600160e01b03916104ed91906104e790611868565b906118a6565b604051911681529081906020820190565b50604051637669fc0f60e11b8152600481019190915265ffffffffffff919091166024820152604490fd5b346102da575f3660031901126102da574365ffffffffffff61054a43611836565b160361059d5761025260405161055f81610d6d565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c7400000060208201526040519182916020835260208301906101a9565b6040516301bfc1c560e61b8152600490fd5b346102da5760203660031901126102da5760206001600160a01b03806105d36102de565b165f526008825260405f205416604051908152f35b346102da5760203660031901126102da5761060a6106046102de565b33610e3c565b005b346102da5760203660031901126102da576001600160a01b0361062d6102de565b165f526009602052602061064460405f2054611868565b63ffffffff60405191168152f35b346102da5760203660031901126102da57602061042d6106706102de565b6001600160a01b03165f9081526020819052604090205490565b346102da5760203660031901126102da576001600160a01b036106ab6102de565b165f526007602052602060405f2054604051908152f35b346102da575f806003193601126102d75761076b906107007f0000000000000000000000000000000000000000000000000000000000000000611655565b6107297f000000000000000000000000000000000000000000000000000000000000000061174b565b916040519161073783610d8d565b818352604051948594600f60f81b865261075d60209360e08589015260e08801906101a9565b9086820360408801526101a9565b904660608601523060808601528260a086015284820360c08601528080855193848152019401925b8281106107a257505050500390f35b835185528695509381019392810192600101610793565b346102da5760203660031901126102da576004356107d643611836565b9065ffffffffffff821681101561089b576107f090611868565b600a54905f829160058411610843575b61080a9350611e32565b5f8161082857505060205f5b6040516001600160e01b039091168152f35b60206108348193611898565b91600a8152200154811c610816565b919261084e8161199a565b810390811161047a57600a82525f80516020611e9783398151915281015461080a949063ffffffff9081169085161015610889575091610800565b929150610895906110a5565b90610800565b604051637669fc0f60e11b8152600481019190915265ffffffffffff919091166024820152604490fd5b346102da575f3660031901126102da5760206108e043611836565b65ffffffffffff60405191168152f35b346102da575f806003193601126102d757604051816004546109118161106d565b808452906001908181169081156102af575060011461093a576102528461024681880382610dde565b60048352602094507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106109805750505081610252936102469282010193610236565b8054858501870152928501928101610964565b346102da5760203660031901126102da576001600160a01b036109b46102de565b165f526009602052602060018060e01b036109d160405f20611b21565b16604051908152f35b346102da5760403660031901126102da576109f36102de565b60243590335f526001602052610a0c8160405f20610e27565b5491808310610a21576103309203903361119f565b6103f490604051938493632983c0c360e21b8552600485016110b3565b346102da5760403660031901126102da57610330610a5a6102de565b60243590336110d1565b6064359060ff821682036102da57565b6084359060ff821682036102da57565b346102da5760c03660031901126102da57610a9d6102de565b60443590602435610aac610a64565b834211610b3557610b2861060a94610b2f926040519060208201927fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf845260018060a01b0388166040840152866060840152608083015260808252610b1082610da8565b610b2360a435936084359351902061162f565b6113ce565b9182611390565b50610e3c565b604051632341d78760e11b815260048101859052602490fd5b346102da5760e03660031901126102da57610b676102de565b610b6f6102f4565b60443590606435610b7e610a74565b814211610c685790610c00610c2192610c0e610b998861136e565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082019081526001600160a01b03808d16938301939093529189166060820152608081018a905260a081019290925260c082019590955292839060e0820190565b03601f198101845283610dde565b610b2360c4359360a4359351902061162f565b6001600160a01b0384811690821603610c3e575061060a9261119f565b6040516325c0072360e11b81526001600160a01b0391821660048201529084166024820152604490fd5b60405163313c898160e11b815260048101839052602490fd5b346102da5760403660031901126102da576020610cc3610c9f6102de565b610ca76102f4565b6001600160a01b039091165f9081526001845260409020610e27565b54604051908152f35b346102da5760403660031901126102da57610ce56102de565b63ffffffff60243581811681036102da57610d35610d3b91604094610d08611356565b50610d11611356565b506001600160a01b03165f9081526009602052859020610d2f611356565b50611b4c565b50611b75565b8251815190921682526020908101516001600160e01b031690820152f35b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b03821117610d8857604052565b610d59565b602081019081106001600160401b03821117610d8857604052565b60a081019081106001600160401b03821117610d8857604052565b60c081019081106001600160401b03821117610d8857604052565b90601f801991011681019081106001600160401b03821117610d8857604052565b60405190610e0c82610d6d565b565b6001600160a01b03165f90815260208190526040902090565b9060018060a01b03165f5260205260405f2090565b6001600160a01b038181165f81815260086020526040812080548685166001600160a01b031982168117909255610e0c96941694610eb79390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a46001600160a01b03165f9081526020819052604090205490565b915b6001600160a01b03808316939291908116908185141580611010575b610ee1575b5050505050565b81610f65575b505082610ef6575b8080610eda565b6001600160a01b03165f9081526009602052604090207fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72491610f4291610f3c9091611803565b90611019565b604080516001600160e01b039384168152919092166020820152a25f8080610eef565b6001600160a01b03165f908152600960205260409020610f8484611803565b610f9d65ffffffffffff610f9743611836565b16611868565b6001600160e01b03918280610fb186611b21565b16911690039282841161047a577fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249361100692610fed92611d5c565b6040805192851683529316602082015291829190820190565b0390a25f80610ee7565b50831515610ed5565b9061102d65ffffffffffff610f9743611836565b6001600160e01b0391828061104186611b21565b169116019182116110595761105592611d5c565b9091565b634e487b7160e01b5f52601160045260245ffd5b90600182811c9216801561109b575b602083101461108757565b634e487b7160e01b5f52602260045260245ffd5b91607f169161107c565b906001820180921161047a57565b604091949392606082019560018060a01b0316825260208201520152565b6001600160a01b0380821694939291908515611187578216801561116f576110f882610e0e565b54958487106111525784610e0c96970361111184610e0e565b5561111b84610e0e565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3611275565b60405163391434e360e21b8152806103f4878a87600485016110b3565b60405163ec442f0560e01b81525f6004820152602490fd5b604051634b637e8f60e11b81525f6004820152602490fd5b6001600160a01b03808216929190831561122557821693841561120d57806112037f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925946111fe60209560018060a01b03165f52600160205260405f2090565b610e27565b55604051908152a3565b604051634a1406b160e11b81525f6004820152602490fd5b60405163e602df0560e01b81525f6004820152602490fd5b906001600160a01b03808316156112255781161561120d576111fe6112729260018060a01b03165f52600160205260405f2090565b55565b6001600160a01b03908116929181908415611307575b169081156112b5575b610e0c935f5260086020528060405f205416915f5260405f20541690610eb9565b6112be83611803565b936112d265ffffffffffff610f9743611836565b6001600160e01b039586806112e5611aea565b169116900395861161047a57610e0c956112fe91611c41565b50509350611294565b905061131283611803565b9061132665ffffffffffff610f9743611836565b6001600160e01b03928380611339611aea565b1691160192831161047a57839261134f91611c41565b505061128b565b6040519061136382610d6d565b5f6020838281520152565b6001600160a01b03165f90815260076020526040902080546001810190915590565b6113998161136e565b8092036113a4575090565b6040516301d4b62360e61b81526001600160a01b0390911660048201526024810191909152604490fd5b916101f893916113dd93611491565b90929192611404565b600411156113f057565b634e487b7160e01b5f52602160045260245ffd5b61140d816113e6565b80611416575050565b61141f816113e6565b600181036114395760405163f645eedf60e01b8152600490fd5b611442816113e6565b600281036114635760405163fce698f760e01b815260048101839052602490fd5b8061146f6003926113e6565b146114775750565b6040516335e2f38360e21b81526004810191909152602490fd5b91906fa2a8918ca85bafe22016d0b997e4df60600160ff1b03841161150a57926020929160ff6080956040519485521684840152604083015260608201525f92839182805260015afa156114fe5780516001600160a01b038116156114f557918190565b50809160019190565b604051903d90823e3d90fd5b5050505f9160039190565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480611606575b15611570577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261160081610dc3565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614611547565b60429061163a611515565b906040519161190160f01b8352600283015260228201522090565b60ff81146116935760ff811690601f8211611681576040519161167783610d6d565b8252602082015290565b604051632cd44ac360e21b8152600490fd5b50604051600554815f6116a58361106d565b80835260019380851690811561172a57506001146116cb575b506101f892500382610dde565b60055f9081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db094602093509091905b8183106117125750506101f893508201015f6116be565b855487840185015294850194869450918301916116fb565b90506101f894506020925060ff191682840152151560051b8201015f6116be565b60ff811461176d5760ff811690601f8211611681576040519161167783610d6d565b50604051600654815f61177f8361106d565b80835260019380851690811561172a57506001146117a457506101f892500382610dde565b60065f9081527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f94602093509091905b8183106117eb5750506101f893508201015f6116be565b855487840185015294850194869450918301916117d4565b6001600160e01b0390818111611817571690565b604490604051906306dfcc6560e41b825260e060048301526024820152fd5b65ffffffffffff90818111611849571690565b604490604051906306dfcc6560e41b8252603060048301526024820152fd5b63ffffffff90818111611879571690565b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b5f1981019190821161047a57565b9081545f8160058111611934575b509190915b8281106118e95750505f81155f146118d2575050505f90565b6118dd602092611898565b92815220015460201c90565b90918082169080831860011c820180921161047a57845f5263ffffffff808360205f20015416908516105f146119225750915b906118b9565b92915061192e906110a5565b9061191c565b909161193f8261199a565b820391821161047a5784835263ffffffff808360208620015416908516105f1461196c5750905b5f6118b4565b9150611977906110a5565b611966565b8115611986570490565b634e487b7160e01b5f52601260045260245ffd5b8015611ad35780611a6c611a65611a5b611a51611a47611a3d611a33611a2960016101f89a5f908b60801c80611ac7575b508060401c80611aba575b508060201c80611aad575b508060101c80611aa0575b508060081c80611a93575b508060041c80611a86575b508060021c80611a79575b50821c611a72575b811c1b611a22818b61197c565b0160011c90565b611a22818a61197c565b611a22818961197c565b611a22818861197c565b611a22818761197c565b611a22818661197c565b611a22818561197c565b809261197c565b90611ad8565b8101611a15565b600291509101905f611a0d565b600491509101905f611a02565b600891509101905f6119f7565b601091509101905f6119ec565b602091509101905f6119e1565b604091509101905f6119d6565b9150506080905f6119cb565b505f90565b9080821015611ae5575090565b905090565b600a545f9080611afa5750505f90565b5f1991818381011161047a57600a9052015f80516020611e97833981519152015460201c90565b80545f9181611b31575050505f90565b5f1992828481011161047a5760209181522001015460201c90565b8054821015611b61575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b90604051611b8281610d6d565b602081935463ffffffff81168352811c910152565b600a5490600160401b821015610d88576001820180600a55821015611b6157600a5f52805160209182015190911b63ffffffff191663ffffffff91909116175f80516020611e9783398151915290910155565b8054600160401b811015610d8857611c0791600182018155611b4c565b611c2e57815160209283015190921b63ffffffff191663ffffffff92909216919091179055565b634e487b7160e01b5f525f60045260245ffd5b600a54919291908115611d3357611c78611c73611c5d84611898565b600a5f525f80516020611e978339815191520190565b611b75565b805163ffffffff8381169491168410611d215785602093611ce795611cad611ca4865163ffffffff1690565b63ffffffff1690565b03611ceb5750611cc2611c5d611cd993611898565b9063ffffffff82549181199060201b169116179055565b01516001600160e01b031690565b9190565b9050611d1c9150611d09611cfd610dff565b63ffffffff9092168252565b6001600160e01b03871681850152611b97565b611cd9565b604051632520601d60e01b8152600490fd5b611d579150611d43611cfd610dff565b6001600160e01b0384166020820152611b97565b5f9190565b805492939291908215611e0e57611d83611c73611d7885611898565b835f5260205f200190565b90611d92825163ffffffff1690565b63ffffffff84811691168110611d2157611ce7946020948892611dbc611ca4875163ffffffff1690565b03611ddd5750611cd992611dd2611cc292611898565b905f5260205f200190565b915050611d1c91611dfb611def610dff565b63ffffffff9093168352565b6001600160e01b03881682860152611bea565b611d579250611e1e611def610dff565b6001600160e01b0385166020830152611bea565b905b828110611e4057505090565b90918082169080831860011c820180921161047a57600a5f525f80516020611e9783398151915282015463ffffffff9081169085161015611e845750915b90611e34565b929150611e90906110a5565b90611e7e56fec65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8a2646970667358221220f18ea0254b82fef75585dc7704610ea0fa2cab71adec6958abde29f3660d6b6d64736f6c63430008140033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000000e63d6f414b40bafca676810ef1abf05ecc8e4590000000000000000000000000000000000000000000000000000000000000004546573740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035453540000000000000000000000000000000000000000000000000000000000