UNPKG

openzeppelin-contracts

Version:

Secure Smart Contract library for Solidity

592 lines 64.9 kB
{ "contractName": "ERC777PresetFixedSupply", "abi": [ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address[]", "name": "defaultOperators", "type": "address[]" }, { "internalType": "uint256", "name": "initialSupply", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "AuthorizedOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Burned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "RevokedOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "Sent", "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": [ { "internalType": "address", "name": "holder", "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": "operator", "type": "address" } ], "name": "authorizeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "defaultOperators", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "granularity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "tokenHolder", "type": "address" } ], "name": "isOperatorFor", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "operatorData", "type": "bytes" } ], "name": "operatorSend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "revokeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "send", "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": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b5060405162003b8538038062003b858339818101604052810190620000379190620009fa565b8484848260029080519060200190620000529291906200074d565b5081600390805190602001906200006b9291906200074d565b50806004908051906020019062000084929190620007de565b5060005b600480549050811015620001695760016005600060048481548110620000d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620001609062000f70565b91505062000088565b50731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054306040518463ffffffff1660e01b8152600401620001dd9392919062000cb3565b600060405180830381600087803b158015620001f857600080fd5b505af11580156200020d573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a306040518463ffffffff1660e01b8152600401620002849392919062000cb3565b600060405180830381600087803b1580156200029f57600080fd5b505af1158015620002b4573d6000803e3d6000fd5b50505050505050620002ed81836040518060200160405280600081525060405180602001604052806000815250620002f860201b60201c565b505050505062001090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200036b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003629062000cf0565b60405180910390fd5b60006200037d6200052b60201b60201c565b90506200039481600087876200053360201b60201c565b83600154620003a4919062000e5f565b600181905550836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003f6919062000e5f565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620004518160008787878760016200053960201b60201c565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d868686604051620004b49392919062000d51565b60405180910390a38473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516200051c919062000d34565b60405180910390a35050505050565b600033905090565b50505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b6040518363ffffffff1660e01b8152600401620005af92919062000c86565b60206040518083038186803b158015620005c857600080fd5b505afa158015620005dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006039190620009ce565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620006b8578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b81526004016200067e9695949392919062000c0b565b600060405180830381600087803b1580156200069957600080fd5b505af1158015620006ae573d6000803e3d6000fd5b5050505062000730565b81156200072f57620006eb8673ffffffffffffffffffffffffffffffffffffffff166200073a60201b620011011760201c565b156200072e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007259062000d12565b60405180910390fd5b5b5b5050505050505050565b600080823b905060008111915050919050565b8280546200075b9062000f3a565b90600052602060002090601f0160209004810192826200077f5760008555620007cb565b82601f106200079a57805160ff1916838001178555620007cb565b82800160010185558215620007cb579182015b82811115620007ca578251825591602001919060010190620007ad565b5b509050620007da91906200086d565b5090565b8280548282559060005260206000209081019282156200085a579160200282015b82811115620008595782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620007ff565b5b5090506200086991906200086d565b5090565b5b80821115620008885760008160009055506001016200086e565b5090565b6000620008a36200089d8462000dd0565b62000d9c565b90508083825260208201905082856020860282011115620008c357600080fd5b60005b85811015620008f75781620008dc888262000946565b845260208401935060208301925050600181019050620008c6565b5050509392505050565b600062000918620009128462000dff565b62000d9c565b9050828152602081018484840111156200093157600080fd5b6200093e84828562000f04565b509392505050565b60008151905062000957816200105c565b92915050565b600082601f8301126200096f57600080fd5b8151620009818482602086016200088c565b91505092915050565b600082601f8301126200099c57600080fd5b8151620009ae84826020860162000901565b91505092915050565b600081519050620009c88162001076565b92915050565b600060208284031215620009e157600080fd5b6000620009f18482850162000946565b91505092915050565b600080600080600060a0868803121562000a1357600080fd5b600086015167ffffffffffffffff81111562000a2e57600080fd5b62000a3c888289016200098a565b955050602086015167ffffffffffffffff81111562000a5a57600080fd5b62000a68888289016200098a565b945050604086015167ffffffffffffffff81111562000a8657600080fd5b62000a94888289016200095d565b935050606062000aa788828901620009b7565b925050608062000aba8882890162000946565b9150509295509295909350565b62000ad28162000ebc565b82525050565b62000ae38162000ed0565b82525050565b600062000af68262000e32565b62000b02818562000e3d565b935062000b1481856020860162000f04565b62000b1f816200104b565b840191505092915050565b600062000b3960208362000e4e565b91507f4552433737373a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600062000b7b604d8362000e4e565b91507f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460008301527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208301527f6b656e73526563697069656e74000000000000000000000000000000000000006040830152606082019050919050565b62000c058162000efa565b82525050565b600060c08201905062000c22600083018962000ac7565b62000c31602083018862000ac7565b62000c40604083018762000ac7565b62000c4f606083018662000bfa565b818103608083015262000c63818562000ae9565b905081810360a083015262000c79818462000ae9565b9050979650505050505050565b600060408201905062000c9d600083018562000ac7565b62000cac602083018462000ad8565b9392505050565b600060608201905062000cca600083018662000ac7565b62000cd9602083018562000ad8565b62000ce8604083018462000ac7565b949350505050565b6000602082019050818103600083015262000d0b8162000b2a565b9050919050565b6000602082019050818103600083015262000d2d8162000b6c565b9050919050565b600060208201905062000d4b600083018462000bfa565b92915050565b600060608201905062000d68600083018662000bfa565b818103602083015262000d7c818562000ae9565b9050818103604083015262000d92818462000ae9565b9050949350505050565b6000604051905081810181811067ffffffffffffffff8211171562000dc65762000dc56200101c565b5b8060405250919050565b600067ffffffffffffffff82111562000dee5762000ded6200101c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000e1d5762000e1c6200101c565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000e6c8262000efa565b915062000e798362000efa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eb15762000eb062000fbe565b5b828201905092915050565b600062000ec98262000eda565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000f2457808201518184015260208101905062000f07565b8381111562000f34576000848401525b50505050565b6000600282049050600182168062000f5357607f821691505b6020821081141562000f6a5762000f6962000fed565b5b50919050565b600062000f7d8262000efa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000fb35762000fb262000fbe565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620010678162000ebc565b81146200107357600080fd5b50565b620010818162000efa565b81146200108d57600080fd5b50565b612ae580620010a06000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b6371146102e3578063dd62ed3e14610313578063fad8b32a14610343578063fc673c4f1461035f578063fe9d93031461037b57610116565b8063959b8c3f1461025d57806395d89b41146102795780639bd9bbc614610297578063a9059cbb146102b357610116565b806323b872dd116100e957806323b872dd146101a5578063313ce567146101d5578063556f0dc7146101f357806362ad1b831461021157806370a082311461022d57610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461015757806318160ddd14610187575b600080fd5b610123610397565b604051610130919061257a565b60405180910390f35b610141610425565b60405161014e91906125b7565b60405180910390f35b610171600480360381019061016c9190611db4565b6104b7565b60405161017e919061259c565b60405180910390f35b61018f6104da565b60405161019c9190612739565b60405180910390f35b6101bf60048036038101906101ba9190611cbe565b6104e4565b6040516101cc919061259c565b60405180910390f35b6101dd6106f5565b6040516101ea9190612799565b60405180910390f35b6101fb6106fe565b6040516102089190612739565b60405180910390f35b61022b60048036038101906102269190611d0d565b610707565b005b61024760048036038101906102429190611c30565b61076d565b6040516102549190612739565b60405180910390f35b61027760048036038101906102729190611c30565b6107b5565b005b610281610a16565b60405161028e91906125b7565b60405180910390f35b6102b160048036038101906102ac9190611df0565b610aa8565b005b6102cd60048036038101906102c89190611db4565b610ad2565b6040516102da919061259c565b60405180910390f35b6102fd60048036038101906102f89190611c82565b610be0565b60405161030a919061259c565b60405180910390f35b61032d60048036038101906103289190611c82565b610d91565b60405161033a9190612739565b60405180910390f35b61035d60048036038101906103589190611c30565b610e18565b005b61037960048036038101906103749190611e57565b611079565b005b61039560048036038101906103909190611eea565b6110db565b005b6060600480548060200260200160405190810160405280929190818152602001828054801561041b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103d1575b5050505050905090565b606060028054610434906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610460906129b1565b80156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b5050505050905090565b6000806104c2611114565b90506104cf81858561111c565b600191505092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c90612699565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156105c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bc906126d9565b60405180910390fd5b60006105cf611114565b90506105fd8186868660405180602001604052806000815250604051806020016040528060008152506112e7565b610629818686866040518060200160405280600081525060405180602001604052806000815250611460565b6106bb858285600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b691906128dc565b61111c565b6106e98186868660405180602001604052806000815250604051806020016040528060008152506000611671565b60019150509392505050565b60006012905090565b60006001905090565b610718610712611114565b86610be0565b610757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074e906126b9565b60405180910390fd5b61076685858585856001611855565b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8073ffffffffffffffffffffffffffffffffffffffff166107d4611114565b73ffffffffffffffffffffffffffffffffffffffff16141561082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082290612639565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109155760076000610889611114565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556109b2565b600160066000610923611114565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6109ba611114565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b606060038054610a25906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a51906129b1565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b610acd610ab3611114565b848484604051806020016040528060008152506001611855565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90612699565b60405180910390fd5b6000610b4d611114565b9050610b7b8182868660405180602001604052806000815250604051806020016040528060008152506112e7565b610ba7818286866040518060200160405280600081525060405180602001604052806000815250611460565b610bd58182868660405180602001604052806000815250604051806020016040528060008152506000611671565b600191505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cf85750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610cf75750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610d895750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e20611114565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590612659565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8157600160076000610eee611114565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611015565b60066000610f8d611114565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b61101d611114565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b61108a611084611114565b85610be0565b6110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c0906126b9565b60405180910390fd5b6110d584848484611975565b50505050565b6110fd6110e6611114565b838360405180602001604052806000815250611975565b5050565b600080823b905060008111915050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561118c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611183906125d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390612719565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112da9190612739565b60405180910390a3505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560001b6040518363ffffffff1660e01b815260040161135b929190612551565b60206040518083038186803b15801561137357600080fd5b505afa158015611387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ab9190611c59565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611457578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b8152600401611424969594939291906124e2565b600060405180830381600087803b15801561143e57600080fd5b505af1158015611452573d6000803e3d6000fd5b505050505b50505050505050565b61146c86868686611b83565b826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114b691906128dc565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115429190612886565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc826146779878686866040516115fc93929190612754565b60405180910390a48373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516116619190612739565b60405180910390a3505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b6040518363ffffffff1660e01b81526004016116e5929190612551565b60206040518083038186803b1580156116fd57600080fd5b505afa158015611711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117359190611c59565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117e4578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b81526004016117ad969594939291906124e2565b600060405180830381600087803b1580156117c757600080fd5b505af11580156117db573d6000803e3d6000fd5b5050505061184b565b811561184a576118098673ffffffffffffffffffffffffffffffffffffffff16611101565b15611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090612679565b60405180910390fd5b5b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc906125f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c906126f9565b60405180910390fd5b600061193f611114565b905061194f8188888888886112e7565b61195d818888888888611460565b61196c81888888888888611671565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc90612619565b60405180910390fd5b60006119ef611114565b90506119fe8186600087611b83565b611a0d818660008787876112e7565b836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a5791906128dc565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600154611aa791906128dc565b6001819055508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098868686604051611b0e93929190612754565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611b749190612739565b60405180910390a35050505050565b50505050565b6000611b9c611b97846127e5565b6127b4565b905082815260208101848484011115611bb457600080fd5b611bbf84828561296f565b509392505050565b600081359050611bd681612a81565b92915050565b600081519050611beb81612a81565b92915050565b600082601f830112611c0257600080fd5b8135611c12848260208601611b89565b91505092915050565b600081359050611c2a81612a98565b92915050565b600060208284031215611c4257600080fd5b6000611c5084828501611bc7565b91505092915050565b600060208284031215611c6b57600080fd5b6000611c7984828501611bdc565b91505092915050565b60008060408385031215611c9557600080fd5b6000611ca385828601611bc7565b9250506020611cb485828601611bc7565b9150509250929050565b600080600060608486031215611cd357600080fd5b6000611ce186828701611bc7565b9350506020611cf286828701611bc7565b9250506040611d0386828701611c1b565b9150509250925092565b600080600080600060a08688031215611d2557600080fd5b6000611d3388828901611bc7565b9550506020611d4488828901611bc7565b9450506040611d5588828901611c1b565b935050606086013567ffffffffffffffff811115611d7257600080fd5b611d7e88828901611bf1565b925050608086013567ffffffffffffffff811115611d9b57600080fd5b611da788828901611bf1565b9150509295509295909350565b60008060408385031215611dc757600080fd5b6000611dd585828601611bc7565b9250506020611de685828601611c1b565b9150509250929050565b600080600060608486031215611e0557600080fd5b6000611e1386828701611bc7565b9350506020611e2486828701611c1b565b925050604084013567ffffffffffffffff811115611e4157600080fd5b611e4d86828701611bf1565b9150509250925092565b60008060008060808587031215611e6d57600080fd5b6000611e7b87828801611bc7565b9450506020611e8c87828801611c1b565b935050604085013567ffffffffffffffff811115611ea957600080fd5b611eb587828801611bf1565b925050606085013567ffffffffffffffff811115611ed257600080fd5b611ede87828801611bf1565b91505092959194509250565b60008060408385031215611efd57600080fd5b6000611f0b85828601611c1b565b925050602083013567ffffffffffffffff811115611f2857600080fd5b611f3485828601611bf1565b9150509250929050565b6000611f4a8383611f56565b60208301905092915050565b611f5f81612910565b82525050565b611f6e81612910565b82525050565b6000611f7f82612825565b611f898185612853565b9350611f9483612815565b8060005b83811015611fc5578151611fac8882611f3e565b9750611fb783612846565b925050600181019050611f98565b5085935050505092915050565b611fdb81612922565b82525050565b611fea8161292e565b82525050565b6000611ffb82612830565b6120058185612864565b935061201581856020860161297e565b61201e81612a70565b840191505092915050565b60006120348261283b565b61203e8185612875565b935061204e81856020860161297e565b61205781612a70565b840191505092915050565b600061206f602583612875565b91507f4552433737373a20617070726f76652066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120d5602283612875565b91507f4552433737373a2073656e642066726f6d20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061213b602283612875565b91507f4552433737373a206275726e2066726f6d20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006121a1602483612875565b91507f4552433737373a20617574686f72697a696e672073656c66206173206f70657260008301527f61746f72000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612207602183612875565b91507f4552433737373a207265766f6b696e672073656c66206173206f70657261746f60008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061226d604d83612875565b91507f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460008301527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208301527f6b656e73526563697069656e74000000000000000000000000000000000000006040830152606082019050919050565b60006122f9602483612875565b91507f4552433737373a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061235f602c83612875565b91507f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60008301527f7220666f7220686f6c64657200000000000000000000000000000000000000006020830152604082019050919050565b60006123c5602683612875565b91507f4552433737373a207472616e736665722066726f6d20746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061242b602083612875565b91507f4552433737373a2073656e6420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061246b602383612875565b91507f4552433737373a20617070726f766520746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6124cd81612958565b82525050565b6124dc81612962565b82525050565b600060c0820190506124f76000830189611f65565b6125046020830188611f65565b6125116040830187611f65565b61251e60608301866124c4565b81810360808301526125308185611ff0565b905081810360a08301526125448184611ff0565b9050979650505050505050565b60006040820190506125666000830185611f65565b6125736020830184611fe1565b9392505050565b600060208201905081810360008301526125948184611f74565b905092915050565b60006020820190506125b16000830184611fd2565b92915050565b600060208201905081810360008301526125d18184612029565b905092915050565b600060208201905081810360008301526125f281612062565b9050919050565b60006020820190508181036000830152612612816120c8565b9050919050565b600060208201905081810360008301526126328161212e565b9050919050565b6000602082019050818103600083015261265281612194565b9050919050565b60006020820190508181036000830152612672816121fa565b9050919050565b6000602082019050818103600083015261269281612260565b9050919050565b600060208201905081810360008301526126b2816122ec565b9050919050565b600060208201905081810360008301526126d281612352565b9050919050565b600060208201905081810360008301526126f2816123b8565b9050919050565b600060208201905081810360008301526127128161241e565b9050919050565b600060208201905081810360008301526127328161245e565b9050919050565b600060208201905061274e60008301846124c4565b92915050565b600060608201905061276960008301866124c4565b818103602083015261277b8185611ff0565b9050818103604083015261278f8184611ff0565b9050949350505050565b60006020820190506127ae60008301846124d3565b92915050565b6000604051905081810181811067ffffffffffffffff821117156127db576127da612a41565b5b8060405250919050565b600067ffffffffffffffff821115612800576127ff612a41565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061289182612958565b915061289c83612958565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128d1576128d06129e3565b5b828201905092915050565b60006128e782612958565b91506128f283612958565b925082821015612905576129046129e3565b5b828203905092915050565b600061291b82612938565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561299c578082015181840152602081019050612981565b838111156129ab576000848401525b50505050565b600060028204905060018216806129c957607f821691505b602082108114156129dd576129dc612a12565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612a8a81612910565b8114612a9557600080fd5b50565b612aa181612958565b8114612aac57600080fd5b5056fea26469706673582212203dfe9e22baab1f6d024288184c3adb9e211c4e0c44856686e2c4c5f5919cf2ca64736f6c63430008000033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b6371146102e3578063dd62ed3e14610313578063fad8b32a14610343578063fc673c4f1461035f578063fe9d93031461037b57610116565b8063959b8c3f1461025d57806395d89b41146102795780639bd9bbc614610297578063a9059cbb146102b357610116565b806323b872dd116100e957806323b872dd146101a5578063313ce567146101d5578063556f0dc7146101f357806362ad1b831461021157806370a082311461022d57610116565b806306e485381461011b57806306fdde0314610139578063095ea7b31461015757806318160ddd14610187575b600080fd5b610123610397565b604051610130919061257a565b60405180910390f35b610141610425565b60405161014e91906125b7565b60405180910390f35b610171600480360381019061016c9190611db4565b6104b7565b60405161017e919061259c565b60405180910390f35b61018f6104da565b60405161019c9190612739565b60405180910390f35b6101bf60048036038101906101ba9190611cbe565b6104e4565b6040516101cc919061259c565b60405180910390f35b6101dd6106f5565b6040516101ea9190612799565b60405180910390f35b6101fb6106fe565b6040516102089190612739565b60405180910390f35b61022b60048036038101906102269190611d0d565b610707565b005b61024760048036038101906102429190611c30565b61076d565b6040516102549190612739565b60405180910390f35b61027760048036038101906102729190611c30565b6107b5565b005b610281610a16565b60405161028e91906125b7565b60405180910390f35b6102b160048036038101906102ac9190611df0565b610aa8565b005b6102cd60048036038101906102c89190611db4565b610ad2565b6040516102da919061259c565b60405180910390f35b6102fd60048036038101906102f89190611c82565b610be0565b60405161030a919061259c565b60405180910390f35b61032d60048036038101906103289190611c82565b610d91565b60405161033a9190612739565b60405180910390f35b61035d60048036038101906103589190611c30565b610e18565b005b61037960048036038101906103749190611e57565b611079565b005b61039560048036038101906103909190611eea565b6110db565b005b6060600480548060200260200160405190810160405280929190818152602001828054801561041b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103d1575b5050505050905090565b606060028054610434906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610460906129b1565b80156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b5050505050905090565b6000806104c2611114565b90506104cf81858561111c565b600191505092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c90612699565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156105c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bc906126d9565b60405180910390fd5b60006105cf611114565b90506105fd8186868660405180602001604052806000815250604051806020016040528060008152506112e7565b610629818686866040518060200160405280600081525060405180602001604052806000815250611460565b6106bb858285600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b691906128dc565b61111c565b6106e98186868660405180602001604052806000815250604051806020016040528060008152506000611671565b60019150509392505050565b60006012905090565b60006001905090565b610718610712611114565b86610be0565b610757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074e906126b9565b60405180910390fd5b61076685858585856001611855565b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8073ffffffffffffffffffffffffffffffffffffffff166107d4611114565b73ffffffffffffffffffffffffffffffffffffffff16141561082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082290612639565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109155760076000610889611114565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556109b2565b600160066000610923611114565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6109ba611114565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b606060038054610a25906129b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a51906129b1565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b610acd610ab3611114565b848484604051806020016040528060008152506001611855565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90612699565b60405180910390fd5b6000610b4d611114565b9050610b7b8182868660405180602001604052806000815250604051806020016040528060008152506112e7565b610ba7818286866040518060200160405280600081525060405180602001604052806000815250611460565b610bd58182868660405180602001604052806000815250604051806020016040528060008152506000611671565b600191505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cf85750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610cf75750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610d895750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206