[ { "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": "user", "type": "address" } ], "name": "ERC20Blocked", "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": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "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": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "UserBlocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "UserUnblocked", "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": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "blockUser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "blocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "blocked2", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "unblockUser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
610160604052348015610010575f80fd5b506040518060400160405280600381526020017f5055410000000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250336040518060400160405280600381526020017f50554100000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f505541000000000000000000000000000000000000000000000000000000000081525081600390816100fa9190610ae8565b50806004908161010a9190610ae8565b5050505f60055f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610196575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161018d9190610bf6565b60405180910390fd5b6101a58161028e60201b60201c565b506101ba60078361035360201b90919060201c565b61012081815250506101d660088261035360201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506102136103a060201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050505050610289336102636103fa60201b60201c565b600a61026f9190610d77565b6305f5e10061027e9190610dc1565b61040260201b60201c565b611014565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6020835110156103745761036d8361048760201b60201c565b905061039a565b82610384836104ec60201b60201c565b5f0190816103929190610ae8565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016103df959493929190610e29565b60405160208183030381529060405280519060200120905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610472575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016104699190610bf6565b60405180910390fd5b6104835f83836104f560201b60201c565b5050565b5f80829050601f815111156104d357826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016104ca9190610ee0565b60405180910390fd5b8051816104df90610f2d565b5f1c175f1b915050919050565b5f819050919050565b61050683838361050b60201b60201c565b505050565b61051a836105c360201b60201c565b1561055c57826040517fbfe393720000000000000000000000000000000000000000000000000000000081526004016105539190610bf6565b60405180910390fd5b61056b826105c360201b60201c565b156105ad57816040517fbfe393720000000000000000000000000000000000000000000000000000000081526004016105a49190610bf6565b60405180910390fd5b6105be83838361061560201b60201c565b505050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61062361063960201b60201c565b61063483838361068060201b60201c565b505050565b61064761089960201b60201c565b1561067e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106d0578060025f8282546106c49190610f93565b9250508190555061079e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610759578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161075093929190610fc6565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107e5578060025f828254039250508190555061082f565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161088c9190610ffb565b60405180910390a3505050565b5f60055f9054906101000a900460ff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061092957607f821691505b60208210810361093c5761093b6108e5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261099e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610963565b6109a88683610963565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6109ec6109e76109e2846109c0565b6109c9565b6109c0565b9050919050565b5f819050919050565b610a05836109d2565b610a19610a11826109f3565b84845461096f565b825550505050565b5f90565b610a2d610a21565b610a388184846109fc565b505050565b5b81811015610a5b57610a505f82610a25565b600181019050610a3e565b5050565b601f821115610aa057610a7181610942565b610a7a84610954565b81016020851015610a89578190505b610a9d610a9585610954565b830182610a3d565b50505b505050565b5f82821c905092915050565b5f610ac05f1984600802610aa5565b1980831691505092915050565b5f610ad88383610ab1565b9150826002028217905092915050565b610af1826108ae565b67ffffffffffffffff811115610b0a57610b096108b8565b5b610b148254610912565b610b1f828285610a5f565b5f60209050601f831160018114610b50575f8415610b3e578287015190505b610b488582610acd565b865550610baf565b601f198416610b5e86610942565b5f5b82811015610b8557848901518255600182019150602085019450602081019050610b60565b86831015610ba25784890151610b9e601f891682610ab1565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610be082610bb7565b9050919050565b610bf081610bd6565b82525050565b5f602082019050610c095f830184610be7565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610c9157808604811115610c6d57610c6c610c0f565b5b6001851615610c7c5780820291505b8081029050610c8a85610c3c565b9450610c51565b94509492505050565b5f82610ca95760019050610d64565b81610cb6575f9050610d64565b8160018114610ccc5760028114610cd657610d05565b6001915050610d64565b60ff841115610ce857610ce7610c0f565b5b8360020a915084821115610cff57610cfe610c0f565b5b50610d64565b5060208310610133831016604e8410600b8410161715610d3a5782820a905083811115610d3557610d34610c0f565b5b610d64565b610d478484846001610c48565b92509050818404811115610d5e57610d5d610c0f565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610d81826109c0565b9150610d8c83610d6b565b9250610db97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610c9a565b905092915050565b5f610dcb826109c0565b9150610dd6836109c0565b9250828202610de4816109c0565b91508282048414831517610dfb57610dfa610c0f565b5b5092915050565b5f819050919050565b610e1481610e02565b82525050565b610e23816109c0565b82525050565b5f60a082019050610e3c5f830188610e0b565b610e496020830187610e0b565b610e566040830186610e0b565b610e636060830185610e1a565b610e706080830184610be7565b9695505050505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610eb2826108ae565b610ebc8185610e7a565b9350610ecc818560208601610e8a565b610ed581610e98565b840191505092915050565b5f6020820190508181035f830152610ef88184610ea8565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610f248251610e02565b80915050919050565b5f610f3782610f00565b82610f4184610f0a565b9050610f4c81610f19565b92506020821015610f8c57610f877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610963565b831692505b5050919050565b5f610f9d826109c0565b9150610fa8836109c0565b9250828201905080821115610fc057610fbf610c0f565b5b92915050565b5f606082019050610fd95f830186610be7565b610fe66020830185610e1a565b610ff36040830184610e1a565b949350505050565b5f60208201905061100e5f830184610e1a565b92915050565b60805160a05160c05160e0516101005161012051610140516125e46110655f395f6112bc01525f61128101525f6113ef01525f6113ce01525f610d0a01525f610d6001525f610d8901526125e45ff3fe608060405234801561000f575f80fd5b506004361061018c575f3560e01c806370ede721116100dc5780638da5cb5b11610095578063d505accf1161006f578063d505accf14610450578063dd62ed3e1461046c578063e59621951461049c578063f2fde38b146104cc5761018c565b80638da5cb5b146103e457806395d89b4114610402578063a9059cbb146104205761018c565b806370ede72114610330578063715018a61461036057806379cc67901461036a5780637ecebe00146103865780638456cb59146103b657806384b0196e146103c05761018c565b806339d319e51161014957806340c10f191161012357806340c10f19146102aa57806342966c68146102c65780635c975abb146102e257806370a08231146103005761018c565b806339d319e5146102685780633da01325146102845780633f4ba83a146102a05761018c565b806306fdde0314610190578063095ea7b3146101ae57806318160ddd146101de57806323b872dd146101fc578063313ce5671461022c5780633644e5151461024a575b5f80fd5b6101986104e8565b6040516101a59190611e29565b60405180910390f35b6101c860048036038101906101c39190611eda565b610578565b6040516101d59190611f32565b60405180910390f35b6101e661059a565b6040516101f39190611f5a565b60405180910390f35b61021660048036038101906102119190611f73565b6105a3565b6040516102239190611f32565b60405180910390f35b6102346105d1565b6040516102419190611fde565b60405180910390f35b6102526105d9565b60405161025f919061200f565b60405180910390f35b610282600480360381019061027d9190612028565b6105e7565b005b61029e60048036038101906102999190612028565b6105fc565b005b6102a8610611565b005b6102c460048036038101906102bf9190611eda565b610623565b005b6102e060048036038101906102db9190612053565b610639565b005b6102ea61064d565b6040516102f79190611f32565b60405180910390f35b61031a60048036038101906103159190612028565b610662565b6040516103279190611f5a565b60405180910390f35b61034a60048036038101906103459190612028565b6106a7565b6040516103579190611f32565b60405180910390f35b6103686106f9565b005b610384600480360381019061037f9190611eda565b61070c565b005b6103a0600480360381019061039b9190612028565b61072c565b6040516103ad9190611f5a565b60405180910390f35b6103be61073d565b005b6103c861074f565b6040516103db979695949392919061217e565b60405180910390f35b6103ec6107f4565b6040516103f99190612200565b60405180910390f35b61040a61081d565b6040516104179190611e29565b60405180910390f35b61043a60048036038101906104359190611eda565b6108ad565b6040516104479190611f32565b60405180910390f35b61046a6004803603810190610465919061226d565b6108cf565b005b6104866004803603810190610481919061230a565b610a14565b6040516104939190611f5a565b60405180910390f35b6104b660048036038101906104b19190612028565b610a96565b6040516104c39190611f32565b60405180910390f35b6104e660048036038101906104e19190612028565b610ae8565b005b6060600380546104f790612375565b80601f016020809104026020016040519081016040528092919081815260200182805461052390612375565b801561056e5780601f106105455761010080835404028352916020019161056e565b820191905f5260205f20905b81548152906001019060200180831161055157829003601f168201915b5050505050905090565b5f80610582610b6c565b905061058f818585610b73565b600191505092915050565b5f600254905090565b5f806105ad610b6c565b90506105ba858285610b85565b6105c5858585610c17565b60019150509392505050565b5f6012905090565b5f6105e2610d07565b905090565b6105ef610dbd565b6105f881610e44565b5050565b610604610dbd565b61060d81610ef8565b5050565b610619610dbd565b610621610fac565b565b61062b610dbd565b610635828261100d565b5050565b61064a610644610b6c565b8261108c565b50565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610701610dbd565b61070a5f61110b565b565b61071e82610718610b6c565b83610b85565b610728828261108c565b5050565b5f610736826111d0565b9050919050565b610745610dbd565b61074d611216565b565b5f6060805f805f6060610760611278565b6107686112b3565b46305f801b5f67ffffffffffffffff811115610787576107866123a5565b5b6040519080825280602002602001820160405280156107b55781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461082c90612375565b80601f016020809104026020016040519081016040528092919081815260200182805461085890612375565b80156108a35780601f1061087a576101008083540402835291602001916108a3565b820191905f5260205f20905b81548152906001019060200180831161088657829003601f168201915b5050505050905090565b5f806108b7610b6c565b90506108c4818585610c17565b600191505092915050565b8342111561091457836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161090b9190611f5a565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109428c6112ee565b89604051602001610958969594939291906123d2565b6040516020818303038152906040528051906020012090505f61097a82611341565b90505f6109898287878761135a565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109fd57808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016109f4929190612431565b60405180910390fd5b610a088a8a8a610b73565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610af0610dbd565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b60575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b579190612200565b60405180910390fd5b610b698161110b565b50565b5f33905090565b610b808383836001611388565b505050565b5f610b908484610a14565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c115781811015610c02578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610bf993929190612458565b60405180910390fd5b610c1084848484035f611388565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c87575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610c7e9190612200565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf7575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610cee9190612200565b60405180910390fd5b610d0283838361139a565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610d8257507f000000000000000000000000000000000000000000000000000000000000000046145b15610daf577f00000000000000000000000000000000000000000000000000000000000000009050610dba565b610db76113aa565b90505b90565b610dc5610b6c565b73ffffffffffffffffffffffffffffffffffffffff16610de36107f4565b73ffffffffffffffffffffffffffffffffffffffff1614610e4257610e06610b6c565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e399190612200565b60405180910390fd5b565b5f80610e4f83610a96565b90508015610eef575f60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167f798117ec059ab8d319461ef2502b1f9d8a47cd966bfd1f3e23b6f26c30bebb7760405160405180910390a25b80915050919050565b5f80610f0383610a96565b905080610fa357600160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167fca86d8c91ca6d00afd863578cc633a0901fad724592f89649629fe65f61410d260405160405180910390a25b80915050919050565b610fb461143f565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610ff6610b6c565b6040516110039190612200565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016110749190612200565b60405180910390fd5b6110885f838361139a565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110fc575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016110f39190612200565b60405180910390fd5b611107825f8361139a565b5050565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61121e61147f565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611261610b6c565b60405161126e9190612200565b60405180910390a1565b60606112ae60077f00000000000000000000000000000000000000000000000000000000000000006114c090919063ffffffff16565b905090565b60606112e960087f00000000000000000000000000000000000000000000000000000000000000006114c090919063ffffffff16565b905090565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f61135361134d610d07565b8361156d565b9050919050565b5f805f8061136a888888886115ad565b92509250925061137a8282611694565b829350505050949350505050565b611394848484846117f6565b50505050565b6113a5838383611853565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161142495949392919061248d565b60405160208183030381529060405280519060200120905090565b61144761064d565b61147d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61148761064d565b156114be576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b606060ff5f1b83146114dc576114d5836118f9565b9050611567565b8180546114e890612375565b80601f016020809104026020016040519081016040528092919081815260200182805461151490612375565b801561155f5780601f106115365761010080835404028352916020019161155f565b820191905f5260205f20905b81548152906001019060200180831161154257829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156115e9575f60038592509250925061168a565b5f6001888888886040515f815260200160405260405161160c94939291906124de565b6020604051602081039080840390855afa15801561162c573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361167d575f60015f801b9350935093505061168a565b805f805f1b935093509350505b9450945094915050565b5f60038111156116a7576116a6612521565b5b8260038111156116ba576116b9612521565b5b03156117f257600160038111156116d4576116d3612521565b5b8260038111156116e7576116e6612521565b5b0361171e576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561173257611731612521565b5b82600381111561174557611744612521565b5b0361178957805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016117809190611f5a565b60405180910390fd5b60038081111561179c5761179b612521565b5b8260038111156117af576117ae612521565b5b036117f157806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016117e8919061200f565b60405180910390fd5b5b5050565b6117ff84610a96565b1561184157836040517fbfe393720000000000000000000000000000000000000000000000000000000081526004016118389190612200565b60405180910390fd5b61184d8484848461196b565b50505050565b61185c83610a96565b1561189e57826040517fbfe393720000000000000000000000000000000000000000000000000000000081526004016118959190612200565b60405180910390fd5b6118a782610a96565b156118e957816040517fbfe393720000000000000000000000000000000000000000000000000000000081526004016118e09190612200565b60405180910390fd5b6118f4838383611b3a565b505050565b60605f61190583611b52565b90505f602067ffffffffffffffff811115611923576119226123a5565b5b6040519080825280601f01601f1916602001820160405280156119555781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119db575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016119d29190612200565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a4b575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a429190612200565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b34578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b2b9190611f5a565b60405180910390a35b50505050565b611b4261147f565b611b4d838383611ba0565b505050565b5f8060ff835f1c169050601f811115611b97576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bf0578060025f828254611be4919061257b565b92505081905550611cbe565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611c79578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611c7093929190612458565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d05578060025f8282540392505081905550611d4f565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611dac9190611f5a565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611dfb82611db9565b611e058185611dc3565b9350611e15818560208601611dd3565b611e1e81611de1565b840191505092915050565b5f6020820190508181035f830152611e418184611df1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611e7682611e4d565b9050919050565b611e8681611e6c565b8114611e90575f80fd5b50565b5f81359050611ea181611e7d565b92915050565b5f819050919050565b611eb981611ea7565b8114611ec3575f80fd5b50565b5f81359050611ed481611eb0565b92915050565b5f8060408385031215611ef057611eef611e49565b5b5f611efd85828601611e93565b9250506020611f0e85828601611ec6565b9150509250929050565b5f8115159050919050565b611f2c81611f18565b82525050565b5f602082019050611f455f830184611f23565b92915050565b611f5481611ea7565b82525050565b5f602082019050611f6d5f830184611f4b565b92915050565b5f805f60608486031215611f8a57611f89611e49565b5b5f611f9786828701611e93565b9350506020611fa886828701611e93565b9250506040611fb986828701611ec6565b9150509250925092565b5f60ff82169050919050565b611fd881611fc3565b82525050565b5f602082019050611ff15f830184611fcf565b92915050565b5f819050919050565b61200981611ff7565b82525050565b5f6020820190506120225f830184612000565b92915050565b5f6020828403121561203d5761203c611e49565b5b5f61204a84828501611e93565b91505092915050565b5f6020828403121561206857612067611e49565b5b5f61207584828501611ec6565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6120b28161207e565b82525050565b6120c181611e6c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6120f981611ea7565b82525050565b5f61210a83836120f0565b60208301905092915050565b5f602082019050919050565b5f61212c826120c7565b61213681856120d1565b9350612141836120e1565b805f5b8381101561217157815161215888826120ff565b975061216383612116565b925050600181019050612144565b5085935050505092915050565b5f60e0820190506121915f83018a6120a9565b81810360208301526121a38189611df1565b905081810360408301526121b78188611df1565b90506121c66060830187611f4b565b6121d360808301866120b8565b6121e060a0830185612000565b81810360c08301526121f28184612122565b905098975050505050505050565b5f6020820190506122135f8301846120b8565b92915050565b61222281611fc3565b811461222c575f80fd5b50565b5f8135905061223d81612219565b92915050565b61224c81611ff7565b8114612256575f80fd5b50565b5f8135905061226781612243565b92915050565b5f805f805f805f60e0888a03121561228857612287611e49565b5b5f6122958a828b01611e93565b97505060206122a68a828b01611e93565b96505060406122b78a828b01611ec6565b95505060606122c88a828b01611ec6565b94505060806122d98a828b0161222f565b93505060a06122ea8a828b01612259565b92505060c06122fb8a828b01612259565b91505092959891949750929550565b5f80604083850312156123205761231f611e49565b5b5f61232d85828601611e93565b925050602061233e85828601611e93565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061238c57607f821691505b60208210810361239f5761239e612348565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c0820190506123e55f830189612000565b6123f260208301886120b8565b6123ff60408301876120b8565b61240c6060830186611f4b565b6124196080830185611f4b565b61242660a0830184611f4b565b979650505050505050565b5f6040820190506124445f8301856120b8565b61245160208301846120b8565b9392505050565b5f60608201905061246b5f8301866120b8565b6124786020830185611f4b565b6124856040830184611f4b565b949350505050565b5f60a0820190506124a05f830188612000565b6124ad6020830187612000565b6124ba6040830186612000565b6124c76060830185611f4b565b6124d460808301846120b8565b9695505050505050565b5f6080820190506124f15f830187612000565b6124fe6020830186611fcf565b61250b6040830185612000565b6125186060830184612000565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61258582611ea7565b915061259083611ea7565b92508282019050808211156125a8576125a761254e565b5b9291505056fea26469706673582212206218bb4e530740229e04b8facd7e9a22fb4a4d1423896aee0546a4159cae11fd64736f6c634300081a0033