[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "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": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "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": [], "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": "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": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": [], "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": "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" } ]
610160604052348015610010575f5ffd5b506040518060400160405280601a81526020017f4f6620436f757273652049205374696c6c204c6f766520596f75000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280601a81526020017f4f6620436f757273652049205374696c6c204c6f766520596f750000000000008152506040518060400160405280600681526020017f4f4349534c59000000000000000000000000000000000000000000000000000081525081600390816100f99190610b2c565b5080600490816101099190610b2c565b5050506101206006836101d860201b90919060201c565b610120818152505061013c6007826101d860201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061017961022560201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050506101d3336b033b2e3c9fd0803ce800000061027f60201b60201c565b610f30565b5f6020835110156101f9576101f28361032360201b60201c565b905061021f565b826102098361038860201b60201c565b5f0190816102179190610b2c565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610264959493929190610c61565b60405160208183030381529060405280519060200120905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102ef575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102e69190610cb2565b60405180910390fd5b71428298eaeb1d31f79ce64063a4549c08ec4560110260026001020260055561031f5f838361039160201b60201c565b5050565b5f5f829050601f8151111561036f57826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016103669190610d31565b60405180910390fd5b80518161037b90610d7e565b5f1c175f1b915050919050565b5f819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103e1578060025f8282546103d59190610e11565b925050819055506104af565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561046a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161046193929190610e44565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104f6578060025f8282540392505081905550610550565b6105078184846105c960201b60201c565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b61055f8261075460201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105bc9190610e79565b60405180910390a3505050565b5f3073ffffffffffffffffffffffffffffffffffffffff1660015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461071f9190610e11565b106107495763ebacad0b62cacf0b856107389190610e92565b6107429190610f00565b905061074d565b8390505b9392505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036108ec573073ffffffffffffffffffffffffffffffffffffffff16600261084e9190610e92565b60015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b50565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061096a57607f821691505b60208210810361097d5761097c610926565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109a4565b6109e986836109a4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a2d610a28610a2384610a01565b610a0a565b610a01565b9050919050565b5f819050919050565b610a4683610a13565b610a5a610a5282610a34565b8484546109b0565b825550505050565b5f5f905090565b610a71610a62565b610a7c818484610a3d565b505050565b5b81811015610a9f57610a945f82610a69565b600181019050610a82565b5050565b601f821115610ae457610ab581610983565b610abe84610995565b81016020851015610acd578190505b610ae1610ad985610995565b830182610a81565b50505b505050565b5f82821c905092915050565b5f610b045f1984600802610ae9565b1980831691505092915050565b5f610b1c8383610af5565b9150826002028217905092915050565b610b35826108ef565b67ffffffffffffffff811115610b4e57610b4d6108f9565b5b610b588254610953565b610b63828285610aa3565b5f60209050601f831160018114610b94575f8415610b82578287015190505b610b8c8582610b11565b865550610bf3565b601f198416610ba286610983565b5f5b82811015610bc957848901518255600182019150602085019450602081019050610ba4565b86831015610be65784890151610be2601f891682610af5565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b610c0d81610bfb565b82525050565b610c1c81610a01565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c4b82610c22565b9050919050565b610c5b81610c41565b82525050565b5f60a082019050610c745f830188610c04565b610c816020830187610c04565b610c8e6040830186610c04565b610c9b6060830185610c13565b610ca86080830184610c52565b9695505050505050565b5f602082019050610cc55f830184610c52565b92915050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d03826108ef565b610d0d8185610ccb565b9350610d1d818560208601610cdb565b610d2681610ce9565b840191505092915050565b5f6020820190508181035f830152610d498184610cf9565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610d758251610bfb565b80915050919050565b5f610d8882610d51565b82610d9284610d5b565b9050610d9d81610d6a565b92506020821015610ddd57610dd87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026109a4565b831692505b5050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e1b82610a01565b9150610e2683610a01565b9250828201905080821115610e3e57610e3d610de4565b5b92915050565b5f606082019050610e575f830186610c52565b610e646020830185610c13565b610e716040830184610c13565b949350505050565b5f602082019050610e8c5f830184610c13565b92915050565b5f610e9c82610a01565b9150610ea783610a01565b9250828202610eb581610a01565b91508282048414831517610ecc57610ecb610de4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610f0a82610a01565b9150610f1583610a01565b925082610f2557610f24610ed3565b5b828204905092915050565b60805160a05160c05160e051610100516101205161014051611f2b610f815f395f610a1501525f6109da01525f610f2101525f610f0001525f6108d801525f61092e01525f6109570152611f2b5ff3fe608060405234801561000f575f5ffd5b50600436106100cd575f3560e01c806370a082311161008a57806395d89b411161006457806395d89b411461022d578063a9059cbb1461024b578063d505accf1461027b578063dd62ed3e14610297576100cd565b806370a08231146101a95780637ecebe00146101d957806384b0196e14610209576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d5780633644e5151461018b575b5f5ffd5b6100d96102c7565b6040516100e691906116fd565b60405180910390f35b610109600480360381019061010491906117ae565b610357565b6040516101169190611806565b60405180910390f35b610127610379565b604051610134919061182e565b60405180910390f35b61015760048036038101906101529190611847565b610382565b6040516101649190611806565b60405180910390f35b6101756103b0565b60405161018291906118b2565b60405180910390f35b6101936103b8565b6040516101a091906118e3565b60405180910390f35b6101c360048036038101906101be91906118fc565b6103c6565b6040516101d0919061182e565b60405180910390f35b6101f360048036038101906101ee91906118fc565b61040b565b604051610200919061182e565b60405180910390f35b61021161041c565b6040516102249796959493929190611a27565b60405180910390f35b6102356104c1565b60405161024291906116fd565b60405180910390f35b610265600480360381019061026091906117ae565b610551565b6040516102729190611806565b60405180910390f35b61029560048036038101906102909190611afd565b610573565b005b6102b160048036038101906102ac9190611b9a565b6106b8565b6040516102be919061182e565b60405180910390f35b6060600380546102d690611c05565b80601f016020809104026020016040519081016040528092919081815260200182805461030290611c05565b801561034d5780601f106103245761010080835404028352916020019161034d565b820191905f5260205f20905b81548152906001019060200180831161033057829003601f168201915b5050505050905090565b5f5f61036161073a565b905061036e818585610741565b600191505092915050565b5f600254905090565b5f5f61038c61073a565b9050610399858285610753565b6103a48585856107e5565b60019150509392505050565b5f6012905090565b5f6103c16108d5565b905090565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6104158261098b565b9050919050565b5f6060805f5f5f606061042d6109d1565b610435610a0c565b46305f5f1b5f67ffffffffffffffff81111561045457610453611c35565b5b6040519080825280602002602001820160405280156104825781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6060600480546104d090611c05565b80601f01602080910402602001604051908101604052809291908181526020018280546104fc90611c05565b80156105475780601f1061051e57610100808354040283529160200191610547565b820191905f5260205f20905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b5f5f61055b61073a565b90506105688185856107e5565b600191505092915050565b834211156105b857836040517f627913020000000000000000000000000000000000000000000000000000000081526004016105af919061182e565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105e68c610a47565b896040516020016105fc96959493929190611c62565b6040516020818303038152906040528051906020012090505f61061e82610a9a565b90505f61062d82878787610ab3565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a157808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610698929190611cc1565b60405180910390fd5b6106ac8a8a8a610741565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61074e8383836001610ae1565b505050565b5f61075e84846106b8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107df57818110156107d0578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016107c793929190611ce8565b60405180910390fd5b6107de84848484035f610ae1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610855575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161084c9190611d1d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108c5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108bc9190611d1d565b60405180910390fd5b6108d0838383610cb0565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561095057507f000000000000000000000000000000000000000000000000000000000000000046145b1561097d577f00000000000000000000000000000000000000000000000000000000000000009050610988565b610985610edc565b90505b90565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610a0760067f0000000000000000000000000000000000000000000000000000000000000000610f7190919063ffffffff16565b905090565b6060610a4260077f0000000000000000000000000000000000000000000000000000000000000000610f7190919063ffffffff16565b905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610aac610aa66108d5565b8361101e565b9050919050565b5f5f5f5f610ac38888888861105e565b925092509250610ad38282611145565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b51575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b489190611d1d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc1575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610bb89190611d1d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610caa578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ca1919061182e565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d00578060025f828254610cf49190611d63565b92505081905550610dce565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610d89578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d8093929190611ce8565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e15578060025f8282540392505081905550610e69565b610e208184846112a7565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b610e7282611432565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ecf919061182e565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001610f56959493929190611d96565b60405160208183030381529060405280519060200120905090565b606060ff5f1b8314610f8d57610f86836115cd565b9050611018565b818054610f9990611c05565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc590611c05565b80156110105780601f10610fe757610100808354040283529160200191611010565b820191905f5260205f20905b815481529060010190602001808311610ff357829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c111561109a575f60038592509250925061113b565b5f6001888888886040515f81526020016040526040516110bd9493929190611de7565b6020604051602081039080840390855afa1580156110dd573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361112e575f60015f5f1b9350935093505061113b565b805f5f5f1b935093509350505b9450945094915050565b5f600381111561115857611157611e2a565b5b82600381111561116b5761116a611e2a565b5b03156112a3576001600381111561118557611184611e2a565b5b82600381111561119857611197611e2a565b5b036111cf576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156111e3576111e2611e2a565b5b8260038111156111f6576111f5611e2a565b5b0361123a57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611231919061182e565b60405180910390fd5b60038081111561124d5761124c611e2a565b5b8260038111156112605761125f611e2a565b5b036112a257806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161129991906118e3565b60405180910390fd5b5b5050565b5f3073ffffffffffffffffffffffffffffffffffffffff1660015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113fd9190611d63565b106114275763ebacad0b62cacf0b856114169190611e57565b6114209190611ec5565b905061142b565b8390505b9392505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036115ca573073ffffffffffffffffffffffffffffffffffffffff16600261152c9190611e57565b60015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b50565b60605f6115d98361163f565b90505f602067ffffffffffffffff8111156115f7576115f6611c35565b5b6040519080825280601f01601f1916602001820160405280156116295781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f5f60ff835f1c169050601f811115611684576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6116cf8261168d565b6116d98185611697565b93506116e98185602086016116a7565b6116f2816116b5565b840191505092915050565b5f6020820190508181035f83015261171581846116c5565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61174a82611721565b9050919050565b61175a81611740565b8114611764575f5ffd5b50565b5f8135905061177581611751565b92915050565b5f819050919050565b61178d8161177b565b8114611797575f5ffd5b50565b5f813590506117a881611784565b92915050565b5f5f604083850312156117c4576117c361171d565b5b5f6117d185828601611767565b92505060206117e28582860161179a565b9150509250929050565b5f8115159050919050565b611800816117ec565b82525050565b5f6020820190506118195f8301846117f7565b92915050565b6118288161177b565b82525050565b5f6020820190506118415f83018461181f565b92915050565b5f5f5f6060848603121561185e5761185d61171d565b5b5f61186b86828701611767565b935050602061187c86828701611767565b925050604061188d8682870161179a565b9150509250925092565b5f60ff82169050919050565b6118ac81611897565b82525050565b5f6020820190506118c55f8301846118a3565b92915050565b5f819050919050565b6118dd816118cb565b82525050565b5f6020820190506118f65f8301846118d4565b92915050565b5f602082840312156119115761191061171d565b5b5f61191e84828501611767565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61195b81611927565b82525050565b61196a81611740565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6119a28161177b565b82525050565b5f6119b38383611999565b60208301905092915050565b5f602082019050919050565b5f6119d582611970565b6119df818561197a565b93506119ea8361198a565b805f5b83811015611a1a578151611a0188826119a8565b9750611a0c836119bf565b9250506001810190506119ed565b5085935050505092915050565b5f60e082019050611a3a5f83018a611952565b8181036020830152611a4c81896116c5565b90508181036040830152611a6081886116c5565b9050611a6f606083018761181f565b611a7c6080830186611961565b611a8960a08301856118d4565b81810360c0830152611a9b81846119cb565b905098975050505050505050565b611ab281611897565b8114611abc575f5ffd5b50565b5f81359050611acd81611aa9565b92915050565b611adc816118cb565b8114611ae6575f5ffd5b50565b5f81359050611af781611ad3565b92915050565b5f5f5f5f5f5f5f60e0888a031215611b1857611b1761171d565b5b5f611b258a828b01611767565b9750506020611b368a828b01611767565b9650506040611b478a828b0161179a565b9550506060611b588a828b0161179a565b9450506080611b698a828b01611abf565b93505060a0611b7a8a828b01611ae9565b92505060c0611b8b8a828b01611ae9565b91505092959891949750929550565b5f5f60408385031215611bb057611baf61171d565b5b5f611bbd85828601611767565b9250506020611bce85828601611767565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c1c57607f821691505b602082108103611c2f57611c2e611bd8565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611c755f8301896118d4565b611c826020830188611961565b611c8f6040830187611961565b611c9c606083018661181f565b611ca9608083018561181f565b611cb660a083018461181f565b979650505050505050565b5f604082019050611cd45f830185611961565b611ce16020830184611961565b9392505050565b5f606082019050611cfb5f830186611961565b611d08602083018561181f565b611d15604083018461181f565b949350505050565b5f602082019050611d305f830184611961565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d6d8261177b565b9150611d788361177b565b9250828201905080821115611d9057611d8f611d36565b5b92915050565b5f60a082019050611da95f8301886118d4565b611db660208301876118d4565b611dc360408301866118d4565b611dd0606083018561181f565b611ddd6080830184611961565b9695505050505050565b5f608082019050611dfa5f8301876118d4565b611e0760208301866118a3565b611e1460408301856118d4565b611e2160608301846118d4565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f611e618261177b565b9150611e6c8361177b565b9250828202611e7a8161177b565b91508282048414831517611e9157611e90611d36565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611ecf8261177b565b9150611eda8361177b565b925082611eea57611ee9611e98565b5b82820490509291505056fea2646970667358221220e453e81f0afc595be782d7bfb5389affee29573e0661067828f577b6e42c1adb64736f6c634300081c0033