UNPKG

@zoralabs/openzeppelin-contracts-upgradeable

Version:
694 lines 71 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ERC20PresetMinterPauserUpgradeable", "sourceName": "contracts/token/ERC20/presets/ERC20PresetMinterPauserUpgradeable.sol", "abi": [ { "inputs": [], "name": "INITIALIZABLE_CONTRACT_ALREADY_INITIALIZED", "type": "error" }, { "inputs": [], "name": "INITIALIZABLE_CONTRACT_IS_NOT_INITIALIZING", "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": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b50613742806100206000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635c975abb11610104578063a217fddf116100a2578063d539139311610071578063d539139314610554578063d547741f14610572578063dd62ed3e1461058e578063e63ab1e9146105be576101cf565b8063a217fddf146104a6578063a457c2d7146104c4578063a9059cbb146104f4578063ca15c87314610524576101cf565b80638456cb59116100de5780638456cb591461041e5780639010d07c1461042857806391d148541461045857806395d89b4114610488576101cf565b80635c975abb146103b457806370a08231146103d257806379cc679014610402576101cf565b8063313ce567116101715780633f4ba83a1161014b5780633f4ba83a1461035657806340c10f191461036057806342966c681461037c5780634cd88b7614610398576101cf565b8063313ce567146102ec57806336568abe1461030a5780633950935114610326576101cf565b806318160ddd116101ad57806318160ddd1461025257806323b872dd14610270578063248a9ca3146102a05780632f2ff15d146102d0576101cf565b806301ffc9a7146101d457806306fdde0314610204578063095ea7b314610222575b600080fd5b6101ee60048036038101906101e991906123fa565b6105dc565b6040516101fb9190612442565b60405180910390f35b61020c610656565b60405161021991906124f6565b60405180910390f35b61023c600480360381019061023791906125ac565b6106e8565b6040516102499190612442565b60405180910390f35b61025a61070b565b60405161026791906125fb565b60405180910390f35b61028a60048036038101906102859190612616565b610715565b6040516102979190612442565b60405180910390f35b6102ba60048036038101906102b5919061269f565b610744565b6040516102c791906126db565b60405180910390f35b6102ea60048036038101906102e591906126f6565b610764565b005b6102f4610785565b6040516103019190612752565b60405180910390f35b610324600480360381019061031f91906126f6565b61078e565b005b610340600480360381019061033b91906125ac565b610811565b60405161034d9190612442565b60405180910390f35b61035e610848565b005b61037a600480360381019061037591906125ac565b6108c2565b005b6103966004803603810190610391919061276d565b610940565b005b6103b260048036038101906103ad91906128cf565b610954565b005b6103bc610a90565b6040516103c99190612442565b60405180910390f35b6103ec60048036038101906103e79190612947565b610aa8565b6040516103f991906125fb565b60405180910390f35b61041c600480360381019061041791906125ac565b610af1565b005b610426610b11565b005b610442600480360381019061043d9190612974565b610b8b565b60405161044f91906129c3565b60405180910390f35b610472600480360381019061046d91906126f6565b610bba565b60405161047f9190612442565b60405180910390f35b610490610c25565b60405161049d91906124f6565b60405180910390f35b6104ae610cb7565b6040516104bb91906126db565b60405180910390f35b6104de60048036038101906104d991906125ac565b610cbe565b6040516104eb9190612442565b60405180910390f35b61050e600480360381019061050991906125ac565b610d35565b60405161051b9190612442565b60405180910390f35b61053e6004803603810190610539919061269f565b610d58565b60405161054b91906125fb565b60405180910390f35b61055c610d7c565b60405161056991906126db565b60405180910390f35b61058c600480360381019061058791906126f6565b610da0565b005b6105a860048036038101906105a391906129de565b610dc1565b6040516105b591906125fb565b60405180910390f35b6105c6610e48565b6040516105d391906126db565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82610e6c565b5b9050919050565b606060cc805461066590612a4d565b80601f016020809104026020016040519081016040528092919081815260200182805461069190612a4d565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b6000806106f3610ee6565b9050610700818585610eee565b600191505092915050565b600060cb54905090565b600080610720610ee6565b905061072d8582856110b7565b610738858585611143565b60019150509392505050565b600060656000838152602001908152602001600020600101549050919050565b61076d82610744565b610776816113bc565b61078083836113d0565b505050565b60006012905090565b610796610ee6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fa90612af0565b60405180910390fd5b61080d8282611404565b5050565b60008061081c610ee6565b905061083d81858561082e8589610dc1565b6108389190612b3f565b610eee565b600191505092915050565b6108797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610874610ee6565b610bba565b6108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90612c07565b60405180910390fd5b6108c0611438565b565b6108f37f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108ee610ee6565b610bba565b610932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092990612c99565b60405180910390fd5b61093c828261149c565b5050565b61095161094b610ee6565b826115f3565b50565b60008060019054906101000a900460ff16159050801580610987575060008060009054906101000a900460ff1660ff1614155b80156109b45750610997306117c2565b806109b35750600160008054906101000a900460ff1660ff1614155b5b156109eb576040517f7ab8448200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610a28576001600060016101000a81548160ff0219169083151502179055505b610a3283836117e5565b8015610a8b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a829190612cfe565b60405180910390a15b505050565b600061012d60009054906101000a900460ff16905090565b600060c960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b0382610afd610ee6565b836110b7565b610b0d82826115f3565b5050565b610b427f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b3d610ee6565b610bba565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890612d8b565b60405180910390fd5b610b8961184b565b565b6000610bb282609760008681526020019081526020016000206118af90919063ffffffff16565b905092915050565b60006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060cd8054610c3490612a4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6090612a4d565b8015610cad5780601f10610c8257610100808354040283529160200191610cad565b820191906000526020600020905b815481529060010190602001808311610c9057829003601f168201915b5050505050905090565b6000801b81565b600080610cc9610ee6565b90506000610cd78286610dc1565b905083811015610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390612e1d565b60405180910390fd5b610d298286868403610eee565b60019250505092915050565b600080610d40610ee6565b9050610d4d818585611143565b600191505092915050565b6000610d75609760008481526020019081526020016000206118c9565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610da982610744565b610db2816113bc565b610dbc8383611404565b505050565b600060ca60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610edf5750610ede826118de565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490612eaf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390612f41565b60405180910390fd5b8060ca60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110aa91906125fb565b60405180910390a3505050565b60006110c38484610dc1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461113d578181101561112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690612fad565b60405180910390fd5b61113c8484848403610eee565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a99061303f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611218906130d1565b60405180910390fd5b61122c838383611948565b600060c960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613163565b60405180910390fd5b81810360c960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160c960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a391906125fb565b60405180910390a36113b6848484611958565b50505050565b6113cd816113c8610ee6565b61195d565b50565b6113da82826119e2565b6113ff8160976000858152602001908152602001600020611ac390919063ffffffff16565b505050565b61140e8282611af3565b6114338160976000858152602001908152602001600020611bd590919063ffffffff16565b505050565b611440611c05565b600061012d60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611485610ee6565b60405161149291906129c3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361150b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611502906131cf565b60405180910390fd5b61151760008383611948565b8060cb60008282546115299190612b3f565b925050819055508060c960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115db91906125fb565b60405180910390a36115ef60008383611958565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613261565b60405180910390fd5b61166e82600083611948565b600060c960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec906132f3565b60405180910390fd5b81810360c960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160cb60008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117a991906125fb565b60405180910390a36117bd83600084611958565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661182b576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118358282611c4e565b61183d611cc6565b6118478282611d2a565b5050565b611853611dea565b600161012d60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611898610ee6565b6040516118a591906129c3565b60405180910390a1565b60006118be8360000183611e34565b60001c905092915050565b60006118d782600001611e5f565b9050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611953838383611e70565b505050565b505050565b6119678282610bba565b6119de5761197481611ec8565b6119828360001c6020611ef5565b6040516020016119939291906133e7565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d591906124f6565b60405180910390fd5b5050565b6119ec8282610bba565b611abf5760016065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611a64610ee6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611aeb836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612131565b905092915050565b611afd8282610bba565b15611bd15760006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b76610ee6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611bfd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6121a1565b905092915050565b611c0d610a90565b611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c439061346d565b60405180910390fd5b565b600060019054906101000a900460ff16611c94576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160cc9080519060200190611caa9291906122eb565b508060cd9080519060200190611cc19291906122eb565b505050565b600060019054906101000a900460ff16611d0c576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061012d60006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff16611d70576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d846000801b611d7f610ee6565b6122b5565b611db57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6611db0610ee6565b6122b5565b611de67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611de1610ee6565b6122b5565b5050565b611df2610a90565b15611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e29906134d9565b60405180910390fd5b565b6000826000018281548110611e4c57611e4b6134f9565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b611e7b8383836122c3565b611e83610a90565b15611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba9061359a565b60405180910390fd5b505050565b6060611eee8273ffffffffffffffffffffffffffffffffffffffff16601460ff16611ef5565b9050919050565b606060006002836002611f0891906135ba565b611f129190612b3f565b67ffffffffffffffff811115611f2b57611f2a6127a4565b5b6040519080825280601f01601f191660200182016040528015611f5d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611f9557611f946134f9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611ff957611ff86134f9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261203991906135ba565b6120439190612b3f565b90505b60018111156120e3577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612085576120846134f9565b5b1a60f81b82828151811061209c5761209b6134f9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806120dc90613614565b9050612046565b5060008414612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90613689565b60405180910390fd5b8091505092915050565b600061213d83836122c8565b61219657826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061219b565b600090505b92915050565b600080836001016000848152602001908152602001600020549050600081146122a95760006001826121d391906136a9565b90506000600186600001805490506121eb91906136a9565b905081811461225a57600086600001828154811061220c5761220b6134f9565b5b90600052602060002001549050808760000184815481106122305761222f6134f9565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061226e5761226d6136dd565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506122af565b60009150505b92915050565b6122bf82826113d0565b5050565b505050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546122f790612a4d565b90600052602060002090601f0160209004810192826123195760008555612360565b82601f1061233257805160ff1916838001178555612360565b82800160010185558215612360579182015b8281111561235f578251825591602001919060010190612344565b5b50905061236d9190612371565b5090565b5b8082111561238a576000816000905550600101612372565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123d7816123a2565b81146123e257600080fd5b50565b6000813590506123f4816123ce565b92915050565b6000602082840312156124105761240f612398565b5b600061241e848285016123e5565b91505092915050565b60008115159050919050565b61243c81612427565b82525050565b60006020820190506124576000830184612433565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561249757808201518184015260208101905061247c565b838111156124a6576000848401525b50505050565b6000601f19601f8301169050919050565b60006124c88261245d565b6124d28185612468565b93506124e2818560208601612479565b6124eb816124ac565b840191505092915050565b6000602082019050818103600083015261251081846124bd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061254382612518565b9050919050565b61255381612538565b811461255e57600080fd5b50565b6000813590506125708161254a565b92915050565b6000819050919050565b61258981612576565b811461259457600080fd5b50565b6000813590506125a681612580565b92915050565b600080604083850312156125c3576125c2612398565b5b60006125d185828601612561565b92505060206125e285828601612597565b9150509250929050565b6125f581612576565b82525050565b600060208201905061261060008301846125ec565b92915050565b60008060006060848603121561262f5761262e612398565b5b600061263d86828701612561565b935050602061264e86828701612561565b925050604061265f86828701612597565b9150509250925092565b6000819050919050565b61267c81612669565b811461268757600080fd5b50565b60008135905061269981612673565b92915050565b6000602082840312156126b5576126b4612398565b5b60006126c38482850161268a565b91505092915050565b6126d581612669565b82525050565b60006020820190506126f060008301846126cc565b92915050565b6000806040838503121561270d5761270c612398565b5b600061271b8582860161268a565b925050602061272c85828601612561565b9150509250929050565b600060ff82169050919050565b61274c81612736565b82525050565b60006020820190506127676000830184612743565b92915050565b60006020828403121561278357612782612398565b5b600061279184828501612597565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127dc826124ac565b810181811067ffffffffffffffff821117156127fb576127fa6127a4565b5b80604052505050565b600061280e61238e565b905061281a82826127d3565b919050565b600067ffffffffffffffff82111561283a576128396127a4565b5b612843826124ac565b9050602081019050919050565b82818337600083830152505050565b600061287261286d8461281f565b612804565b90508281526020810184848401111561288e5761288d61279f565b5b612899848285612850565b509392505050565b600082601f8301126128b6576128b561279a565b5b81356128c684826020860161285f565b91505092915050565b600080604083850312156128e6576128e5612398565b5b600083013567ffffffffffffffff8111156129045761290361239d565b5b612910858286016128a1565b925050602083013567ffffffffffffffff8111156129315761293061239d565b5b61293d858286016128a1565b9150509250929050565b60006020828403121561295d5761295c612398565b5b600061296b84828501612561565b91505092915050565b6000806040838503121561298b5761298a612398565b5b60006129998582860161268a565b92505060206129aa85828601612597565b9150509250929050565b6129bd81612538565b82525050565b60006020820190506129d860008301846129b4565b92915050565b600080604083850312156129f5576129f4612398565b5b6000612a0385828601612561565b9250506020612a1485828601612561565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a6557607f821691505b602082108103612a7857612a77612a1e565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612ada602f83612468565b9150612ae582612a7e565b604082019050919050565b60006020820190508181036000830152612b0981612acd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b4a82612576565b9150612b5583612576565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b8a57612b89612b10565b5b828201905092915050565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f20756e706175736500000000000000602082015250565b6000612bf1603983612468565b9150612bfc82612b95565b604082019050919050565b60006020820190508181036000830152612c2081612be4565b9050919050565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f7665206d696e74657220726f6c6520746f206d696e7400000000000000000000602082015250565b6000612c83603683612468565b9150612c8e82612c27565b604082019050919050565b60006020820190508181036000830152612cb281612c76565b9050919050565b6000819050919050565b6000819050919050565b6000612ce8612ce3612cde84612cb9565b612cc3565b612736565b9050919050565b612cf881612ccd565b82525050565b6000602082019050612d136000830184612cef565b92915050565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f207061757365000000000000000000602082015250565b6000612d75603783612468565b9150612d8082612d19565b604082019050919050565b60006020820190508181036000830152612da481612d68565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e07602583612468565b9150612e1282612dab565b604082019050919050565b60006020820190508181036000830152612e3681612dfa565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612e99602483612468565b9150612ea482612e3d565b604082019050919050565b60006020820190508181036000830152612ec881612e8c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f2b602283612468565b9150612f3682612ecf565b604082019050919050565b60006020820190508181036000830152612f5a81612f1e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612f97601d83612468565b9150612fa282612f61565b602082019050919050565b60006020820190508181036000830152612fc681612f8a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613029602583612468565b915061303482612fcd565b604082019050919050565b600060208201905081810360008301526130588161301c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006130bb602383612468565b91506130c68261305f565b604082019050919050565b600060208201905081810360008301526130ea816130ae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061314d602683612468565b9150613158826130f1565b604082019050919050565b6000602082019050818103600083015261317c81613140565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006131b9601f83612468565b91506131c482613183565b602082019050919050565b600060208201905081810360008301526131e8816131ac565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061324b602183612468565b9150613256826131ef565b604082019050919050565b6000602082019050818103600083015261327a8161323e565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006132dd602283612468565b91506132e882613281565b604082019050919050565b6000602082019050818103600083015261330c816132d0565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000613354601783613313565b915061335f8261331e565b601782019050919050565b60006133758261245d565b61337f8185613313565b935061338f818560208601612479565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006133d1601183613313565b91506133dc8261339b565b601182019050919050565b60006133f282613347565b91506133fe828561336a565b9150613409826133c4565b9150613415828461336a565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613457601483612468565b915061346282613421565b602082019050919050565b600060208201905081810360008301526134868161344a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006134c3601083612468565b91506134ce8261348d565b602082019050919050565b600060208201905081810360008301526134f2816134b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b6000613584602a83612468565b915061358f82613528565b604082019050919050565b600060208201905081810360008301526135b381613577565b9050919050565b60006135c582612576565b91506135d083612576565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561360957613608612b10565b5b828202905092915050565b600061361f82612576565b91506000820361363257613631612b10565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613673602083612468565b915061367e8261363d565b602082019050919050565b600060208201905081810360008301526136a281613666565b9050919050565b60006136b482612576565b91506136bf83612576565b9250828210156136d2576136d1612b10565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212205d97f11f08b899ce1a7f8d3538e23aeab4808074a4101a16966dda1dbab8e10164736f6c634300080d0033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635c975abb11610104578063a217fddf116100a2578063d539139311610071578063d539139314610554578063d547741f14610572578063dd62ed3e1461058e578063e63ab1e9146105be576101cf565b8063a217fddf146104a6578063a457c2d7146104c4578063a9059cbb146104f4578063ca15c87314610524576101cf565b80638456cb59116100de5780638456cb591461041e5780639010d07c1461042857806391d148541461045857806395d89b4114610488576101cf565b80635c975abb146103b457806370a08231146103d257806379cc679014610402576101cf565b8063313ce567116101715780633f4ba83a1161014b5780633f4ba83a1461035657806340c10f191461036057806342966c681461037c5780634cd88b7614610398576101cf565b8063313ce567146102ec57806336568abe1461030a5780633950935114610326576101cf565b806318160ddd116101ad57806318160ddd1461025257806323b872dd14610270578063248a9ca3146102a05780632f2ff15d146102d0576101cf565b806301ffc9a7146101d457806306fdde0314610204578063095ea7b314610222575b600080fd5b6101ee60048036038101906101e991906123fa565b6105dc565b6040516101fb9190612442565b60405180910390f35b61020c610656565b60405161021991906124f6565b60405180910390f35b61023c600480360381019061023791906125ac565b6106e8565b6040516102499190612442565b60405180910390f35b61025a61070b565b60405161026791906125fb565b60405180910390f35b61028a60048036038101906102859190612616565b610715565b6040516102979190612442565b60405180910390f35b6102ba60048036038101906102b5919061269f565b610744565b6040516102c791906126db565b60405180910390f35b6102ea60048036038101906102e591906126f6565b610764565b005b6102f4610785565b6040516103019190612752565b60405180910390f35b610324600480360381019061031f91906126f6565b61078e565b005b610340600480360381019061033b91906125ac565b610811565b60405161034d9190612442565b60405180910390f35b61035e610848565b005b61037a600480360381019061037591906125ac565b6108c2565b005b6103966004803603810190610391919061276d565b610940565b005b6103b260048036038101906103ad91906128cf565b610954565b005b6103bc610a90565b6040516103c99190612442565b60405180910390f35b6103ec60048036038101906103e79190612947565b610aa8565b6040516103f991906125fb565b60405180910390f35b61041c600480360381019061041791906125ac565b610af1565b005b610426610b11565b005b610442600480360381019061043d9190612974565b610b8b565b60405161044f91906129c3565b60405180910390f35b610472600480360381019061046d91906126f6565b610bba565b60405161047f9190612442565b60405180910390f35b610490610c25565b60405161049d91906124f6565b60405180910390f35b6104ae610cb7565b6040516104bb91906126db565b60405180910390f35b6104de60048036038101906104d991906125ac565b610cbe565b6040516104eb9190612442565b60405180910390f35b61050e600480360381019061050991906125ac565b610d35565b60405161051b9190612442565b60405180910390f35b61053e6004803603810190610539919061269f565b610d58565b60405161054b91906125fb565b60405180910390f35b61055c610d7c565b60405161056991906126db565b60405180910390f35b61058c600480360381019061058791906126f6565b610da0565b005b6105a860048036038101906105a391906129de565b610dc1565b6040516105b591906125fb565b60405180910390f35b6105c6610e48565b6040516105d391906126db565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82610e6c565b5b9050919050565b606060cc805461066590612a4d565b80601f016020809104026020016040519081016040528092919081815260200182805461069190612a4d565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b6000806106f3610ee6565b9050610700818585610eee565b600191505092915050565b600060cb54905090565b600080610720610ee6565b905061072d8582856110b7565b610738858585611143565b60019150509392505050565b600060656000838152602001908152602001600020600101549050919050565b61076d82610744565b610776816113bc565b61078083836113d0565b505050565b60006012905090565b610796610ee6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fa90612af0565b60405180910390fd5b61080d8282611404565b5050565b60008061081c610ee6565b905061083d81858561082e8589610dc1565b6108389190612b3f565b610eee565b600191505092915050565b6108797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610874610ee6565b610bba565b6108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90612c07565b60405180910390fd5b6108c0611438565b565b6108f37f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108ee610ee6565b610bba565b610932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092990612c99565b60405180910390fd5b61093c828261149c565b5050565b61095161094b610ee6565b826115f3565b50565b60008060019054906101000a900460ff16159050801580610987575060008060009054906101000a900460ff1660ff1614155b80156109b45750610997306117c2565b806109b35750600160008054906101000a900460ff1660ff1614155b5b156109eb576040517f7ab8448200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610a28576001600060016101000a81548160ff0219169083151502179055505b610a3283836117e5565b8015610a8b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a829190612cfe565b60405180910390a15b505050565b600061012d60009054906101000a900460ff16905090565b600060c960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b0382610afd610ee6565b836110b7565b610b0d82826115f3565b5050565b610b427f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b3d610ee6565b610bba565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890612d8b565b60405180910390fd5b610b8961184b565b565b6000610bb282609760008681526020019081526020016000206118af90919063ffffffff16565b905092915050565b60006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060cd8054610c3490612a4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6090612a4d565b8015610cad5780601f10610c8257610100808354040283529160200191610cad565b820191906000526020600020905b815481529060010190602001808311610c9057829003601f168201915b5050505050905090565b6000801b81565b600080610cc9610ee6565b90506000610cd78286610dc1565b905083811015610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390612e1d565b60405180910390fd5b610d298286868403610eee565b60019250505092915050565b600080610d40610ee6565b9050610d4d818585611143565b600191505092915050565b6000610d75609760008481526020019081526020016000206118c9565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610da982610744565b610db2816113bc565b610dbc8383611404565b505050565b600060ca60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f