[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint256", "name": "maxSupply_", "type": "uint256" }, { "internalType": "string", "name": "data_", "type": "string" } ], "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": "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": "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": "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": "data", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [], "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": "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" } ]
610160604052346100ed57612abd803803809161001b82610108565b610160396080816101600191126100ed57610160516001600160401b0381116100ed578161004c916101600161018b565b610180516001600160401b0381116100ed578261006c916101600161018b565b6101a0516101c0519091906001600160401b0381116100ed5761009c94610096916101600161018b565b92610486565b604051611be89081610e958239608051816110a4015260a05181611161015260c0518161106e015260e051816110f301526101005181611119015261012051816108c8015261014051816108f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b610160601f91909101601f19168101906001600160401b0382119082101761012f57604052565b6100f2565b601f909101601f19168101906001600160401b0382119082101761012f57604052565b60405190610166604083610134565b565b60005b83811061017b5750506000910152565b818101518382015260200161016b565b81601f820112156100ed5780516001600160401b03811161012f57604051926101be601f8301601f191660200185610134565b818452602082840101116100ed576101dc9160208085019101610168565b90565b90600182811c9216801561020f575b60208310146101f957565b634e487b7160e01b600052602260045260246000fd5b91607f16916101ee565b601f8111610225575050565b60036000526020600020906020601f840160051c83019310610262575b601f0160051c01905b818110610256575050565b6000815560010161024b565b9091508190610242565b601f821161027957505050565b6000526020600020906020601f840160051c830193106102b4575b601f0160051c01905b8181106102a8575050565b6000815560010161029d565b9091508190610294565b80519091906001600160401b03811161012f576102e7816102e06004546101df565b600461026c565b602092601f8211600114610329576103199293829160009261031e575b50508160011b916000199060031b1c19161790565b600455565b015190503880610304565b6004600052601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9160005b8681106103905750836001959610610377575b505050811b01600455565b015160001960f88460031b161c1916905538808061036c565b91926020600181928685015181550194019201610359565b80519091906001600160401b03811161012f576103d1816103ca600b546101df565b600b61026c565b602092601f8211600114610407576104029293829160009261031e5750508160011b916000199060031b1c19161790565b600b55565b600b600052601f198216937f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db99160005b86811061046e5750836001959610610455575b505050811b01600b55565b015160001960f88460031b161c1916905538808061044a565b91926020600181928685015181550194019201610437565b93929190604051610498604082610134565b60018152603160f81b6020820190815286519092906001600160401b03811161012f576104cf816104ca6003546101df565b610219565b6020601f8211600114610569576105599594939261050d836101669a9b946105159460009161055e575b508160011b916000199060031b1c19161790565b6003556102be565b61051e816106ba565b6101205261052b826107b2565b610140526020815191012060e052519020610100524660a05261054c6108aa565b6080523060c052336105fb565b6103a8565b9050850151386104f9565b6003600052601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9160005b8181106105e35750836105159361055999989796936101669c9d96600194106105ca575b5050811b016003556102be565b86015160001960f88460031b161c1916905538806105bd565b9192602060018192868f015181550194019201610599565b6001600160a01b03811692919083156106a45760025482810180911161069f576002556000938085528460205260408520838154019055847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040518061066787829190602083019252565b0390a36002546001600160d01b039081811161068a575050610166929350610989565b630e58ae9360e11b8652600452602452604484fd5b610973565b63ec442f0560e01b600052600060045260246000fd5b908151602081106000146106d35750906101dc90610908565b6001600160401b03811161012f576106f7816106f06005546101df565b600561026c565b602092601f8211600114610730576107289293829160009261031e5750508160011b916000199060031b1c19161790565b60055560ff90565b6005600052601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09160005b86811061079a5750836001959610610781575b505050811b0160055560ff90565b015160001960f88460031b161c19169055388080610773565b91926020600181928685015181550194019201610760565b908151602081106000146107cb5750906101dc90610908565b6001600160401b03811161012f576107ef816107e86006546101df565b600661026c565b602092601f8211600114610828576108209293829160009261031e5750508160011b916000199060031b1c19161790565b60065560ff90565b6006600052601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9160005b8681106108925750836001959610610879575b505050811b0160065560ff90565b015160001960f88460031b161c1916905538808061086b565b91926020600181928685015181550194019201610858565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261090260c082610134565b51902090565b601f815111610934576020815191015160208210610924571790565b6000198260200360031b1b161790565b6044604051809263305a27a960e01b8252602060048301526109658151809281602486015260208686019101610168565b601f01601f19168101030190fd5b634e487b7160e01b600052601160045260246000fd5b9061099381610a8b565b91600065ffffffffffff4311610a7357600a5480610a3d57506109bf610166946109cf925b6001610e36565b65ffffffffffff4316600a610d5b565b50506001600160a01b03168015610a25575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75460009182526040909120546001600160a01b039081169116610be2565b610a36610a3183610a8b565b610abe565b50506109e1565b8060001981011161069f57600a909152600080516020612a7d8339815191520154610166936109cf916109bf919060301c6109b8565b6306dfcc6560e41b8152603060045243602452604490fd5b6001600160d01b038111610aa5576001600160d01b031690565b6306dfcc6560e41b60005260d060045260245260446000fd5b65ffffffffffff4311610b1a57600a5480610ae957506109bf610ae59160005b6002610e36565b9091565b8060001981011161069f57600a600052600080516020612a7d8339815191520154610ae5916109bf9160301c610ade565b6306dfcc6560e41b60005260306004524360245260446000fd5b65ffffffffffff4311610b1a57805480610b695750610b59610ae59260006002610e36565b9065ffffffffffff431690610d5b565b8060001981011161069f57600082815260209020016000190154610ae592610b599160301c610ade565b65ffffffffffff4311610b1a57805480610bb85750610b59610ae59260006001610e36565b8060001981011161069f57600082815260209020016000190154610ae592610b599160301c6109b8565b6001600160a01b03808316939291908116908185141580610cd9575b610c0a575b5050505050565b81610c7d575b505082610c1f575b8080610c03565b6001600160a01b03166000908152600960205260409020600080516020612a9d83398151915291610c5a91610c549091610a8b565b90610b93565b604080516001600160d01b039384168152919092166020820152a2388080610c18565b6001600160a01b03166000908152600960205260409020600080516020612a9d83398151915290610cb790610cb186610a8b565b90610b34565b604080516001600160d01b039384168152919092166020820152a23880610c10565b50831515610bfe565b60001981019190821161069f57565b9081546801000000000000000081101561012f5760018101808455811015610d455760009283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b634e487b7160e01b600052603260045260246000fd5b80549293928015610e0b57610d72610d7f91610ce2565b8260005260206000200190565b8054603081901c9365ffffffffffff91821692918116808411610dfa57879303610dc65750610dc292509065ffffffffffff82549181199060301b169116179055565b9190565b915050610dc291610de6610dd8610157565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610cf1565b632520601d60e01b60005260046000fd5b5090610e3091610e1c610dd8610157565b6001600160d01b0385166020830152610cf1565b60009190565b91909180600114610e7a57600214610e5e57634e487b7160e01b600052605160045260246000fd5b6001600160d01b039081169181169190910390811161069f5790565b506001600160d01b039182169082160190811161069f579056fe6080604052600436101561001257600080fd5b60003560e01c806306fdde0314610197578063095ea7b31461019257806318160ddd1461018d57806323b872dd14610188578063313ce567146101835780633644e5151461017e5780633a46b1a8146101795780634bf5d7e914610174578063587cde1e1461016f5780635c19a95c1461016a5780636fcfff451461016557806370a082311461016057806373d4a13a1461015b5780637ecebe001461015657806384b0196e146101515780638e539e8c1461014c57806391ddadf41461014757806395d89b41146101425780639ab24eb01461013d578063a9059cbb14610138578063c3cda52014610133578063d505accf1461012e578063dd62ed3e146101295763f1127ed81461012457600080fd5b610e79565b610e21565b610cf8565b610be4565b610b9e565b610b55565b610aad565b610a81565b6109b0565b6108af565b610875565b6107cd565b61067e565b610618565b6105f4565b6105b2565b610520565b610431565b61040e565b6103f2565b61034e565b610330565b6102ff565b6101f1565b919082519283825260005b8481106101c8575050826000602080949584010152601f8019910116010190565b806020809284010151828286010152016101a7565b9060206101ee92818152019061019c565b90565b346102ce5760003660031901126102ce576040516000600354610213816106b7565b80845290600181169081156102aa575060011461024b575b6102478361023b818503826107ab565b604051918291826101dd565b0390f35b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b8082106102905750909150810160200161023b61022b565b919260018160209254838588010152019101909291610278565b60ff191660208086019190915291151560051b8401909101915061023b905061022b565b600080fd5b600435906001600160a01b03821682036102ce57565b602435906001600160a01b03821682036102ce57565b346102ce5760403660031901126102ce5761032561031b6102d3565b60243590336112c6565b602060405160018152f35b346102ce5760003660031901126102ce576020600254604051908152f35b346102ce5760603660031901126102ce576103676102d3565b61036f6102e9565b6001600160a01b038216600090815260016020908152604080832033845290915290205491604435919060001984106103b9575b6103ad9350610f6c565b60405160018152602090f35b8284106103d5576103d0836103ad9503338361136b565b6103a3565b8284637dc7a0d960e11b6000523360045260245260445260646000fd5b346102ce5760003660031901126102ce57602060405160128152f35b346102ce5760003660031901126102ce57602061042961106b565b604051908152f35b346102ce5760403660031901126102ce5761044a6102d3565b6001600160a01b0316600090815260096020526040902061046c602435611187565b906000908054829381600581116104c1575b509060209461048d9284611564565b806104a75750505b6040516001600160d01b039091168152f35b6104b0906111c2565b90825290829020015460301c610495565b946104cb86611406565b860395861161051b5760209561048d9385875265ffffffffffff8289892001541665ffffffffffff8516106000146105095750915b9192509461047e565b929150610515906111d1565b90610500565b610f2c565b346102ce5760003660031901126102ce5761053a436113b5565b65ffffffffffff8061054b436113b5565b169116036105a157610247604080519061056581836107ab565b601d82527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c7400000060208301525191829160208352602083019061019c565b6301bfc1c560e61b60005260046000fd5b346102ce5760203660031901126102ce576001600160a01b036105d36102d3565b166000526008602052602060018060a01b0360406000205416604051908152f35b346102ce5760203660031901126102ce576106166106106102d3565b336111df565b005b346102ce5760203660031901126102ce576001600160a01b036106396102d3565b16600052600960205260406000205463ffffffff81116106655760405163ffffffff9091168152602090f35b6306dfcc6560e41b600052602060045260245260446000fd5b346102ce5760203660031901126102ce57602061042961069c6102d3565b6001600160a01b031660009081526020819052604090205490565b90600182811c921680156106e7575b60208310146106d157565b634e487b7160e01b600052602260045260246000fd5b91607f16916106c6565b60009291815491610701836106b7565b8083529260018116908115610757575060011461071d57505050565b60009081526020812093945091925b83831061073d575060209250010190565b60018160209294939454838587010152019101919061072c565b915050602093945060ff929192191683830152151560051b010190565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176107a657604052565b610774565b90601f8019910116810190811067ffffffffffffffff8211176107a657604052565b346102ce5760003660031901126102ce576040516000600b546107ef816106b7565b80845290600181169081156102aa5750600114610816576102478361023b818503826107ab565b600b60009081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061085b5750909150810160200161023b61022b565b919260018160209254838588010152019101909291610843565b346102ce5760203660031901126102ce576001600160a01b036108966102d3565b1660005260076020526020604060002054604051908152f35b346102ce5760003660031901126102ce576109556108ec7f00000000000000000000000000000000000000000000000000000000000000006116ef565b6109157f0000000000000000000000000000000000000000000000000000000000000000611753565b602060405161092482826107ab565b600081528161096381830194601f198301368737604051978897600f60f81b895260e0858a015260e089019061019c565b90878203604089015261019c565b91466060870152306080870152600060a087015285830360c0870152519182815201929160005b82811061099957505050500390f35b83518552869550938101939281019260010161098a565b346102ce5760203660031901126102ce576109cc600435611187565b6000600a5481928160058111610a26575b50906020936109ed92600a611564565b80610a0557506040516001600160d01b039091168152f35b9082610a13610a21936111c2565b91600a815220015460301c90565b610495565b93610a3085611406565b850394851161051b576020946109ed93600a865265ffffffffffff8288882001541665ffffffffffff851610600014610a6f5750915b919250936109dd565b929150610a7b906111d1565b90610a66565b346102ce5760003660031901126102ce576020610a9d436113b5565b65ffffffffffff60405191168152f35b346102ce5760003660031901126102ce576040516000600454610acf816106b7565b80845290600181169081156102aa5750600114610af6576102478361023b818503826107ab565b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610b3b5750909150810160200161023b61022b565b919260018160209254838588010152019101909291610b23565b346102ce5760203660031901126102ce576001600160a01b03610b766102d3565b166000526009602052602060018060d01b03610b956040600020611262565b16604051908152f35b346102ce5760403660031901126102ce57610325610bba6102d3565b6024359033610f6c565b6064359060ff821682036102ce57565b6084359060ff821682036102ce57565b346102ce5760c03660031901126102ce57610bfd6102d3565b60243590604435610c0c610bc4565b6084359060a43592804211610ce45791610c919391610c83610c889460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835260018060a01b038a1660408301528a6060830152608082015260808152610c7b60a0826107ab565b519020611291565b61178a565b9092919261183f565b6001600160a01b0381166000908152600760205260409020805460018101909155809303610cc35761061692506111df565b90506301d4b62360e61b60005260018060a01b031660045260245260446000fd5b632341d78760e11b60005260045260246000fd5b346102ce5760e03660031901126102ce57610d116102d3565b610d196102e9565b6044359060643592610d29610bd4565b60a43560c43590864211610e0c576001600160a01b0384166000908152600760205260409020805460018101909155610dcf9390610dca909860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835260018060a01b0389169b8c604084015260018060a01b038b1660608401528b608084015260a083015260c082015260c08152610c7b60e0826107ab565b6112b7565b936001600160a01b03851603610de95761061693506112c6565b6325c0072360e11b6000526001600160a01b038085166004521660245260446000fd5b8663313c898160e11b60005260045260246000fd5b346102ce5760403660031901126102ce576020610e70610e3f6102d3565b610e476102e9565b6001600160a01b0391821660009081526001855260408082209290931681526020919091522090565b54604051908152f35b346102ce5760403660031901126102ce57610e926102d3565b6024359063ffffffff821682036102ce5761024791610ee291610eb3610f53565b50610ebc610f53565b506001600160a01b03166000908152600960205260409020610edc610f53565b506118c1565b5060405190610ef08261078a565b5465ffffffffffff811680835260309190911c60209283019081526040805192835290516001600160d01b031692820192909252918291820190565b634e487b7160e01b600052601160045260246000fd5b60405190610f516040836107ab565b565b60405190610f608261078a565b60006020838281520152565b6001600160a01b038116939291908415611055576001600160a01b038216801561103f576001600160a01b03821660009081526020819052604081205496908588106110255785610f51979803610fd58560018060a01b03166000526000602052604060002090565b55506001600160a01b0384166000908152602081815260409182902080548801905590518681527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a36119c3565b858860649363391434e360e21b8452600452602452604452fd5b63ec442f0560e01b600052600060045260246000fd5b634b637e8f60e11b600052600060045260246000fd5b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148061115e575b156110c6577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261115860c0826107ab565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461109d565b65ffffffffffff611197436113b5565b16808210156111aa57506101ee906113b5565b90637669fc0f60e11b60005260045260245260446000fd5b60001981019190821161051b57565b906001820180921161051b57565b6001600160a01b03818116600081815260086020526040812080548685166001600160a01b031982168117909255610f519694169461125c9390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a46001600160a01b031660009081526020819052604090205490565b916115cb565b80549081611271575050600090565b8160001981011161051b5760005260001990602060002001015460301c90565b60429061129c61106b565b906040519161190160f01b8352600283015260228201522090565b916101ee9391610c889361178a565b6001600160a01b0316908115611355576001600160a01b03811692831561133f57806113327f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259385600052600160205260406000209060018060a01b0316600052602052604060002090565b55604051908152602090a3565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b6001600160a01b0316908115611355576001600160a01b0381161561133f576113b291600052600160205260406000209060018060a01b0316600052602052604060002090565b55565b65ffffffffffff81116113cd5765ffffffffffff1690565b6306dfcc6560e41b600052603060045260245260446000fd5b81156113f0570490565b634e487b7160e01b600052601260045260246000fd5b60018111156101ee57806001600160801b821015611527575b6114cd6114c36114b96114af6114a561149b61148a6114d49760048a600160401b6114d99c101561151a575b64010000000081101561150d575b62010000811015611500575b6101008110156114f3575b60108110156114e6575b10156114de575b60030260011c90565b611494818b6113e6565b0160011c90565b611494818a6113e6565b61149481896113e6565b61149481886113e6565b61149481876113e6565b61149481866113e6565b80936113e6565b821190565b900390565b60011b611481565b60041c9160021b9161147a565b60081c9160041b91611470565b60101c9160081b91611465565b60201c9160101b91611459565b60401c9160201b9161144b565b50506114d96114d46114cd6114c36114b96114af6114a561149b61148a61154e8a60801c90565b9850600160401b975061141f9650505050505050565b91905b8382106115745750505090565b9091928083169080841860011c820180921161051b578460005265ffffffffffff82602060002001541665ffffffffffff8416106000146115b95750925b9190611567565b9392506115c5906111d1565b916115b2565b6001600160a01b038083169392919081169081851415806116e6575b6115f3575b5050505050565b81611678575b505082611608575b80806115ec565b6001600160a01b031660009081526009602052604090207fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724916116559161164f90916118ef565b9061195a565b604080516001600160d01b039384168152919092166020820152a2388080611601565b6001600160a01b031660009081526009602052604090207fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724906116c4906116be866118ef565b90611922565b604080516001600160d01b039384168152919092166020820152a238806115f9565b508315156115e7565b60ff81146117395760ff811690601f821161172857604080519261171382856107ab565b6020808552840191601f190136833783525290565b632cd44ac360e21b60005260046000fd5b506040516101ee8161174c8160056106f1565b03826107ab565b60ff81146117775760ff811690601f821161172857604080519261171382856107ab565b506040516101ee8161174c8160066106f1565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611813579160209360809260ff60009560405194855216868401526040830152606082015282805260015afa15611807576000516001600160a01b038116156117fb5790600090600090565b50600090600190600090565b6040513d6000823e3d90fd5b50505060009160039190565b6004111561182957565b634e487b7160e01b600052602160045260246000fd5b6118488161181f565b80611851575050565b61185a8161181f565b600181036118735763f645eedf60e01b60005260046000fd5b61187c8161181f565b60028103611899575063fce698f760e01b60005260045260246000fd5b806118a560039261181f565b146118ad5750565b6335e2f38360e21b60005260045260246000fd5b80548210156118d95760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b6001600160d01b038111611909576001600160d01b031690565b6306dfcc6560e41b60005260d060045260245260446000fd5b9061192c436113b5565b9061193683611262565b6001600160d01b03918216908216039190821161051b5761195692611ad7565b9091565b90611964436113b5565b9061196e83611262565b6001600160d01b03918216908216019190821161051b5761195692611ad7565b611997436113b5565b906119a2600a611262565b6001600160d01b039182169082160390811161051b5761195691600a611ad7565b9091906001600160a01b03168015611a2b575b610f51926001600160a01b0316908115611a13575b600090815260086020526040808220549282529020546001600160a01b0390811691166115cb565b611a24611a1f846118ef565b61198e565b50506119eb565b611a34826118ef565b92611a3e436113b5565b93611a49600a611262565b6001600160d01b03918216908216019490851161051b57610f5194611a6f91600a611ad7565b90505092506119d6565b8054600160401b8110156107a657611a96916001820181556118c1565b611ac157815160209092015160301b65ffffffffffff191665ffffffffffff92909216919091179055565b634e487b7160e01b600052600060045260246000fd5b80549293928015611b8757611aee611afb916111c2565b8260005260206000200190565b8054603081901c9365ffffffffffff91821692918116808411611b7657879303611b425750611b3e92509065ffffffffffff82549181199060301b169116179055565b9190565b915050611b3e91611b62611b54610f42565b65ffffffffffff9093168352565b6001600160d01b0386166020830152611a79565b632520601d60e01b60005260046000fd5b5090611bac91611b98611b54610f42565b6001600160d01b0385166020830152611a79565b6000919056fea26469706673582212206a4b36c977e8e8277d206a715bc6f7c356740e7a6d617d6527c5c1cb60e2791864736f6c634300081b0033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000b4772756d7320556e69746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054752554d530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000