erc20-vend

Create ERC20 tokens the can be minted by existing ERC20 token balance
Log | Files | Refs

commit 65ff81bc485b2185826dffa061e464e1dda69601
parent 7eeda4e1a02aada756611d74fdba2d257278ac4b
Author: lash <dev@holbrook.no>
Date:   Wed,  2 Aug 2023 13:51:15 +0100

Refactor to match new tokenswap cic interface

Diffstat:
Mpython/erc20_vend/data/Vend.bin | 4++--
Mpython/erc20_vend/data/Vend.json | 2+-
Mpython/erc20_vend/data/Vend.metadata.json | 2+-
Mpython/erc20_vend/vend.py | 7++++---
Msolidity/Vend.sol | 61++++++++++++++++++++++++++++++++++++++++++++-----------------
5 files changed, 52 insertions(+), 24 deletions(-)

diff --git a/python/erc20_vend/data/Vend.bin b/python/erc20_vend/data/Vend.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b50604051620051d3380380620051d3833981810160405281019062000037919062000547565b6000606084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160156101000a81548160ff021916908360ff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f313ce567000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200016291906200061c565b6000604051808303816000865af19150503d8060008114620001a1576040519150601f19603f3d011682016040523d82523d6000602084013e620001a6565b606091505b50809250819350505081620001f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e99062000696565b60405180910390fd5b80806020019051810190620002089190620006b8565b600160146101000a81548160ff021916908360ff160217905550600160159054906101000a900460ff1660ff16600160149054906101000a900460ff1660ff1610156200025457600080fd5b82620003d257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200032591906200061c565b6000604051808303816000865af19150503d806000811462000364576040519150601f19603f3d011682016040523d82523d6000602084013e62000369565b606091505b50809250819350505081620003b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ac9062000696565b60405180910390fd5b80806020019051810190620003cb919062000725565b6002819055505b83600160149054906101000a900460ff16620003ef919062000786565b600a620003fd919062000916565b600381905550600060035403620004175760016003819055505b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505062000967565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004948262000467565b9050919050565b620004a68162000487565b8114620004b257600080fd5b50565b600081519050620004c6816200049b565b92915050565b600060ff82169050919050565b620004e481620004cc565b8114620004f057600080fd5b50565b6000815190506200050481620004d9565b92915050565b60008115159050919050565b62000521816200050a565b81146200052d57600080fd5b50565b600081519050620005418162000516565b92915050565b60008060006060848603121562000563576200056262000462565b5b60006200057386828701620004b5565b93505060206200058686828701620004f3565b9250506040620005998682870162000530565b9150509250925092565b600081519050919050565b600081905092915050565b60005b83811015620005d9578082015181840152602081019050620005bc565b60008484015250505050565b6000620005f282620005a3565b620005fe8185620005ae565b935062000610818560208601620005b9565b80840191505092915050565b60006200062a8284620005e5565b915081905092915050565b600082825260208201905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b60006200067e60098362000635565b91506200068b8262000646565b602082019050919050565b60006020820190508181036000830152620006b1816200066f565b9050919050565b600060208284031215620006d157620006d062000462565b5b6000620006e184828501620004f3565b91505092915050565b6000819050919050565b620006ff81620006ea565b81146200070b57600080fd5b50565b6000815190506200071f81620006f4565b92915050565b6000602082840312156200073e576200073d62000462565b5b60006200074e848285016200070e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200079382620004cc565b9150620007a083620004cc565b9250828203905060ff811115620007bc57620007bb62000757565b5b92915050565b6000600282049050919050565b6000808291508390505b60018511156200082157808604811115620007f957620007f862000757565b5b6001851615620008095780820291505b80810290506200081985620007c2565b9450620007d9565b94509492505050565b6000826200083c57600190506200090f565b816200084c57600090506200090f565b81600181146200086557600281146200087057620008a6565b60019150506200090f565b60ff84111562000885576200088462000757565b5b8360020a9150848211156200089f576200089e62000757565b5b506200090f565b5060208310610133831016604e8410600b8410161715620008e05782820a905083811115620008da57620008d962000757565b5b6200090f565b620008ef8484846001620007cf565b9250905081840481111562000909576200090862000757565b5b81810290505b9392505050565b60006200092382620006ea565b91506200093083620004cc565b92506200095f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200082a565b905092915050565b61485c80620009776000396000f3fe60806040523480156200001157600080fd5b5060043610620000b1576000357c0100000000000000000000000000000000000000000000000000000000900480635ae06f7e11620000805780635ae06f7e146200018e578063644b7a4314620001c4578063da2824a814620001fa578063f340fa01146200023057620000b1565b806301ffc9a714620000b6578063198e2b8a14620000ec5780632b29ba23146200012257806351cff8d91462000158575b600080fd5b620000d46004803603810190620000ce919062001853565b62000266565b604051620000e39190620018a2565b60405180910390f35b6200010a60048036038101906200010491906200192d565b6200031a565b60405162000119919062001a00565b60405180910390f35b6200014060048036038101906200013a919062001a4e565b620004dd565b6040516200014f9190620018a2565b60405180910390f35b62000176600480360381019062000170919062001a4e565b6200058a565b60405162000185919062001a9b565b60405180910390f35b620001ac6004803603810190620001a6919062001a4e565b62000bbd565b604051620001bb9190620018a2565b60405180910390f35b620001e26004803603810190620001dc919062001ae9565b62000cb1565b604051620001f1919062001a00565b60405180910390f35b62000218600480360381019062000212919062001a4e565b62000cfc565b604051620002279190620018a2565b60405180910390f35b6200024e600480360381019062000248919062001a4e565b62000db9565b6040516200025d919062001a9b565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603620002bc576001905062000315565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160362000310576001905062000315565b600090505b919050565b60008060008087878787600160159054906101000a900460ff1660006040516200034490620017de565b620003559695949392919062001bea565b604051809103906000f08015801562000372573d6000803e3d6000fd5b50925082915060058054905090506005839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600254111562000492578273ffffffffffffffffffffffffffffffffffffffff1663449a52f8306002546040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200044a92919062001c49565b6020604051808303816000875af11580156200046a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000490919062001ca7565b505b600254817f0f91f79b60765ed60c8537a0c2f417bfc1ab0a46df716a76bc7ba5130529898f84604051620004c7919062001a00565b60405180910390a3819350505050949350505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062000583575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000806060600080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600082036200062857600094505050505062000bb8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541062000709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007009062001d29565b60405180910390fd5b62000715863362001598565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103620007ee57600094505050505062000bb8565b8573ffffffffffffffffffffffffffffffffffffffff163330836040516024016200081c9392919062001dac565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620008a8919062001e62565b6000604051808303816000865af19150503d8060008114620008e7576040519150601f19603f3d011682016040523d82523d6000602084013e620008ec565b606091505b5080945081955050508362000938576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092f9062001ecb565b60405180910390fd5b828060200190518101906200094e919062001ca7565b93508362000993576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098a9062001f3d565b60405180910390fd5b80600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009e4919062001f8e565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16338360405160240162000a3992919062001c49565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000ac5919062001e62565b6000604051808303816000865af19150503d806000811462000b04576040519150601f19603f3d011682016040523d82523d6000602084013e62000b09565b606091505b5080945081955050508362000b55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4c9062001ecb565b60405180910390fd5b8280602001905181019062000b6b919062001ca7565b93508362000bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba79062001f3d565b60405180910390fd5b819450505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148062000c4657508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b62000c5057600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60006005828154811062000cca5762000cc962001fc9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000d5857600080fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600060606000808694506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541462000e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e7f9062002048565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163360405160240162000ed4919062001a00565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000f60919062001e62565b6000604051808303816000865af19150503d806000811462000f9f576040519150601f19603f3d011682016040523d82523d6000602084013e62000fa4565b606091505b5080945081955050508362000ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fe79062001ecb565b60405180910390fd5b8280602001905181019062001006919062002081565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81106200106d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010649062002103565b60405180910390fd5b60008103620010855760009550505050505062001593565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16333083604051602401620010d59392919062001dac565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162001161919062001e62565b6000604051808303816000865af19150503d8060008114620011a0576040519150601f19603f3d011682016040523d82523d6000602084013e620011a5565b606091505b50809450819550505083620011f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011e89062001ecb565b60405180910390fd5b8280602001905181019062001207919062001ca7565b9350836200124c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012439062001f3d565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060035403620012e157809150620012f4565b60035481620012f1919062002154565b91505b600060025403620013e6578473ffffffffffffffffffffffffffffffffffffffff1663449a52f833846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200135892919062001c49565b6020604051808303816000875af115801562001378573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139e919062001ca7565b620013e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013d790620021dc565b60405180910390fd5b6200158a565b8673ffffffffffffffffffffffffffffffffffffffff1633836040516024016200141292919062001c49565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200149e919062001e62565b6000604051808303816000865af19150503d8060008114620014dd576040519150601f19603f3d011682016040523d82523d6000602084013e620014e2565b606091505b508094508195505050836200152e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015259062001ecb565b60405180910390fd5b8280602001905181019062001544919062001ca7565b93508362001589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001580906200224e565b60405180910390fd5b5b81955050505050505b919050565b60008060606000808673ffffffffffffffffffffffffffffffffffffffff1686604051602401620015ca919062001a00565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162001656919062001e62565b6000604051808303816000865af19150503d806000811462001695576040519150601f19603f3d011682016040523d82523d6000602084013e6200169a565b606091505b50809450819550505083620016e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016dd9062001ecb565b60405180910390fd5b82806020019051810190620016fc919062002081565b9150600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600354836200178e919062002270565b14620017d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017c8906200230b565b60405180910390fd5b8194505050505092915050565b6124f9806200232e83390190565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200182d81620017f6565b81146200183957600080fd5b50565b6000813590506200184d8162001822565b92915050565b6000602082840312156200186c576200186b620017ec565b5b60006200187c848285016200183c565b91505092915050565b60008115159050919050565b6200189c8162001885565b82525050565b6000602082019050620018b9600083018462001891565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112620018e757620018e6620018bf565b5b8235905067ffffffffffffffff811115620019075762001906620018c4565b5b602083019150836001820283011115620019265762001925620018c9565b5b9250929050565b600080600080604085870312156200194a5762001949620017ec565b5b600085013567ffffffffffffffff8111156200196b576200196a620017f1565b5b6200197987828801620018ce565b9450945050602085013567ffffffffffffffff8111156200199f576200199e620017f1565b5b620019ad87828801620018ce565b925092505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019e882620019bb565b9050919050565b620019fa81620019db565b82525050565b600060208201905062001a176000830184620019ef565b92915050565b62001a2881620019db565b811462001a3457600080fd5b50565b60008135905062001a488162001a1d565b92915050565b60006020828403121562001a675762001a66620017ec565b5b600062001a778482850162001a37565b91505092915050565b6000819050919050565b62001a958162001a80565b82525050565b600060208201905062001ab2600083018462001a8a565b92915050565b62001ac38162001a80565b811462001acf57600080fd5b50565b60008135905062001ae38162001ab8565b92915050565b60006020828403121562001b025762001b01620017ec565b5b600062001b128482850162001ad2565b91505092915050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600062001b5a838562001b1b565b935062001b6983858462001b2c565b62001b748362001b3b565b840190509392505050565b600060ff82169050919050565b62001b978162001b7f565b82525050565b6000819050919050565b6000819050919050565b600062001bd262001bcc62001bc68462001b9d565b62001ba7565b62001a80565b9050919050565b62001be48162001bb1565b82525050565b6000608082019050818103600083015262001c0781888a62001b4c565b9050818103602083015262001c1e81868862001b4c565b905062001c2f604083018562001b8c565b62001c3e606083018462001bd9565b979650505050505050565b600060408201905062001c606000830185620019ef565b62001c6f602083018462001a8a565b9392505050565b62001c818162001885565b811462001c8d57600080fd5b50565b60008151905062001ca18162001c76565b92915050565b60006020828403121562001cc05762001cbf620017ec565b5b600062001cd08482850162001c90565b91505092915050565b7f4552525f414c52454144595f57495448445241574e0000000000000000000000600082015250565b600062001d1160158362001b1b565b915062001d1e8262001cd9565b602082019050919050565b6000602082019050818103600083015262001d448162001d02565b9050919050565b600062001d6c62001d6662001d6084620019bb565b62001ba7565b620019bb565b9050919050565b600062001d808262001d4b565b9050919050565b600062001d948262001d73565b9050919050565b62001da68162001d87565b82525050565b600060608201905062001dc36000830186620019ef565b62001dd2602083018562001d9b565b62001de1604083018462001a8a565b949350505050565b600081519050919050565b600081905092915050565b60005b8381101562001e1f57808201518184015260208101905062001e02565b60008484015250505050565b600062001e388262001de9565b62001e44818562001df4565b935062001e5681856020860162001dff565b80840191505092915050565b600062001e70828462001e2b565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b600062001eb360098362001b1b565b915062001ec08262001e7b565b602082019050919050565b6000602082019050818103600083015262001ee68162001ea4565b9050919050565b7f4552525f544f4b454e5f5452414e534645520000000000000000000000000000600082015250565b600062001f2560128362001b1b565b915062001f328262001eed565b602082019050919050565b6000602082019050818103600083015262001f588162001f16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001f9b8262001a80565b915062001fa88362001a80565b925082820190508082111562001fc35762001fc262001f5f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f55534544000000000000000000000000000000000000000000000000600082015250565b60006200203060088362001b1b565b91506200203d8262001ff8565b602082019050919050565b60006020820190508181036000830152620020638162002021565b9050919050565b6000815190506200207b8162001ab8565b92915050565b6000602082840312156200209a5762002099620017ec565b5b6000620020aa848285016200206a565b91505092915050565b7f4552525f56414c55455f544f4f5f484947480000000000000000000000000000600082015250565b6000620020eb60128362001b1b565b9150620020f882620020b3565b602082019050919050565b600060208201905081810360008301526200211e81620020dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620021618262001a80565b91506200216e8362001a80565b92508262002181576200218062002125565b5b828204905092915050565b7f4552525f4d494e54000000000000000000000000000000000000000000000000600082015250565b6000620021c460088362001b1b565b9150620021d1826200218c565b602082019050919050565b60006020820190508181036000830152620021f781620021b5565b9050919050565b7f4552525f56454e445f544f4b454e5f5452414e53464552000000000000000000600082015250565b60006200223660178362001b1b565b91506200224382620021fe565b602082019050919050565b60006020820190508181036000830152620022698162002227565b9050919050565b60006200227d8262001a80565b91506200228a8362001a80565b92508282026200229a8162001a80565b91508282048414831517620022b457620022b362001f5f565b5b5092915050565b7f4552525f4c4f434b454400000000000000000000000000000000000000000000600082015250565b6000620022f3600a8362001b1b565b91506200230082620022bb565b602082019050919050565b600060208201905081810360008301526200232681620022e4565b905091905056fe60806040523480156200001157600080fd5b50604051620024f9380380620024f98339818101604052810190620000379190620002d3565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360029081620000889190620005ca565b5082600390816200009a9190620005ca565b5081600460006101000a81548160ff021916908360ff1602179055508060098190555050505050620006b1565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200013082620000e5565b810181811067ffffffffffffffff82111715620001525762000151620000f6565b5b80604052505050565b600062000167620000c7565b905062000175828262000125565b919050565b600067ffffffffffffffff821115620001985762000197620000f6565b5b620001a382620000e5565b9050602081019050919050565b60005b83811015620001d0578082015181840152602081019050620001b3565b60008484015250505050565b6000620001f3620001ed846200017a565b6200015b565b905082815260208101848484011115620002125762000211620000e0565b5b6200021f848285620001b0565b509392505050565b600082601f8301126200023f576200023e620000db565b5b815162000251848260208601620001dc565b91505092915050565b600060ff82169050919050565b62000272816200025a565b81146200027e57600080fd5b50565b600081519050620002928162000267565b92915050565b6000819050919050565b620002ad8162000298565b8114620002b957600080fd5b50565b600081519050620002cd81620002a2565b92915050565b60008060008060808587031215620002f057620002ef620000d1565b5b600085015167ffffffffffffffff811115620003115762000310620000d6565b5b6200031f8782880162000227565b945050602085015167ffffffffffffffff811115620003435762000342620000d6565b5b620003518782880162000227565b9350506040620003648782880162000281565b92505060606200037787828801620002bc565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d657607f821691505b602082108103620003ec57620003eb6200038e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620004597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000417565b62000465868362000417565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620004a8620004a26200049c8462000298565b6200047d565b62000298565b9050919050565b6000819050919050565b620004c48362000487565b620004dc620004d382620004af565b84845462000427565b825550505050565b600090565b620004f3620004e4565b62000500818484620004b9565b505050565b5b8181101562000528576200051c600082620004e9565b60018101905062000506565b5050565b601f82111562000577576200054181620003f2565b6200054c8462000407565b810160208510156200055c578190505b620005746200056b8562000407565b83018262000505565b50505b505050565b60008160020a8304905092915050565b60006200059f600019846008026200057c565b1980831691505092915050565b6000620005ba83836200058c565b9150826002028217905092915050565b620005d58262000383565b67ffffffffffffffff811115620005f157620005f0620000f6565b5b620005fd8254620003bd565b6200060a8282856200052c565b600060209050601f8311600181146200064257600084156200062d578287015190505b620006398582620005ac565b865550620006a9565b601f1984166200065286620003f2565b60005b828110156200067c5784890151825560018201915060208501945060208101905062000655565b868310156200069c578489015162000698601f8916826200058c565b8355505b6001600288020188555050505b505050505050565b611e3880620006c16000396000f3fe608060405234801561001057600080fd5b5060043610610175576000357c0100000000000000000000000000000000000000000000000000000000900480635f408c04116100e0578063a9059cbb11610099578063a9059cbb14610422578063b1cb0db314610452578063d89135cd14610470578063da2824a81461048e578063dd62ed3e146104be578063f2fde38b146104ee57610175565b80635f408c041461035e57806370a082311461037c5780638da5cb5b146103ac57806394d008ef146103ca57806395d89b41146103e6578063a2309ff81461040457610175565b8063313ce56711610132578063313ce5671461027657806342966c6814610294578063449a52f8146102c457806344d17187146102f457806344df8e70146103105780635ae06f7e1461032e57610175565b806301ffc9a71461017a57806306fdde03146101aa578063095ea7b3146101c857806318160ddd146101f857806323b872dd146102165780632b29ba2314610246575b600080fd5b610194600480360381019061018f919061178d565b61051e565b6040516101a191906117d5565b60405180910390f35b6101b2610768565b6040516101bf9190611880565b60405180910390f35b6101e260048036038101906101dd9190611936565b6107f6565b6040516101ef91906117d5565b60405180910390f35b610200610991565b60405161020d9190611985565b60405180910390f35b610230600480360381019061022b91906119a0565b6109a8565b60405161023d91906117d5565b60405180910390f35b610260600480360381019061025b91906119f3565b610cd0565b60405161026d91906117d5565b60405180910390f35b61027e610d7c565b60405161028b9190611a3c565b60405180910390f35b6102ae60048036038101906102a99190611a57565b610d8f565b6040516102bb91906117d5565b60405180910390f35b6102de60048036038101906102d99190611936565b610f51565b6040516102eb91906117d5565b60405180910390f35b61030e60048036038101906103099190611ae9565b6110dd565b005b61031861115b565b60405161032591906117d5565b60405180910390f35b610348600480360381019061034391906119f3565b6111aa565b60405161035591906117d5565b60405180910390f35b61036661129c565b6040516103739190611a3c565b60405180910390f35b610396600480360381019061039191906119f3565b61133a565b6040516103a39190611985565b60405180910390f35b6103b4611352565b6040516103c19190611b6c565b60405180910390f35b6103e460048036038101906103df9190611ae9565b611376565b005b6103ee611387565b6040516103fb9190611880565b60405180910390f35b61040c611415565b6040516104199190611985565b60405180910390f35b61043c60048036038101906104379190611936565b61141b565b60405161044991906117d5565b60405180910390f35b61045a61159a565b6040516104679190611985565b60405180910390f35b6104786115a0565b6040516104859190611985565b60405180910390f35b6104a860048036038101906104a391906119f3565b6115a6565b6040516104b591906117d5565b60405180910390f35b6104d860048036038101906104d39190611b87565b611662565b6040516104e59190611985565b60405180910390f35b610508600480360381019061050391906119f3565b611687565b60405161051591906117d5565b60405180910390f35b600063b61bc9417c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036105725760019050610763565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036105c45760019050610763565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106165760019050610763565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106685760019050610763565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106ba5760019050610763565b63b1110c1b7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361070c5760019050610763565b63841a0e947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361075e5760019050610763565b600090505b919050565b6002805461077590611bf6565b80601f01602080910402602001604051908101604052809291908181526020018280546107a190611bf6565b80156107ee5780601f106107c3576101008083540402835291602001916107ee565b820191906000526020600020905b8154815290600101906020018083116107d157829003601f168201915b505050505081565b60008061080161129c565b60ff161461080e57600080fd5b60008211156108a1576000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146108a057600080fd5b5b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097f9190611985565b60405180910390a36001905092915050565b60006008546007546109a39190611c56565b905090565b6000806109b361129c565b60ff16146109c057600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a4957600080fd5b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a9557600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d9190611c56565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bec9190611c56565b9250508190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c429190611c8a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f93985604051610cbd9190611985565b60405180910390a4600190509392505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610d75575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600460009054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790611d0a565b60405180910390fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990611d76565b60405180910390fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ef19190611c56565b925050819055508160086000828254610f0a9190611c8a565b925050819055507fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb82604051610f409190611985565b60405180910390a160019050919050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610ff6575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fff57600080fd5b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461104e9190611c8a565b9250508190555081600760008282546110679190611c8a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516110cb9190611985565b60405180910390a36001905092915050565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290611de2565b60405180910390fd5b61115483610d8f565b5050505050565b60006111a5600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d8f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061123257508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61123b57600080fd5b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600954036112b05760009050611337565b600a60009054906101000a900460ff16156112ce5760019050611337565b6009544210611332576001600a60006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe9426040516113219190611985565b60405180910390a160029050611337565b600090505b90565b60056020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113808484610f51565b5050505050565b6003805461139490611bf6565b80601f01602080910402602001604051908101604052809291908181526020018280546113c090611bf6565b801561140d5780601f106113e25761010080835404028352916020019161140d565b820191906000526020600020905b8154815290600101906020018083116113f057829003601f168201915b505050505081565b60075481565b60008061142661129c565b60ff161461143357600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561147f57600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ce9190611c56565b9250508190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115249190611c8a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115889190611985565b60405180910390a36001905092915050565b60095481565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461160157600080fd5b6001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6006602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e257600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61176a81611735565b811461177557600080fd5b50565b60008135905061178781611761565b92915050565b6000602082840312156117a3576117a261172b565b5b60006117b184828501611778565b91505092915050565b60008115159050919050565b6117cf816117ba565b82525050565b60006020820190506117ea60008301846117c6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561182a57808201518184015260208101905061180f565b60008484015250505050565b6000601f19601f8301169050919050565b6000611852826117f0565b61185c81856117fb565b935061186c81856020860161180c565b61187581611836565b840191505092915050565b6000602082019050818103600083015261189a8184611847565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118cd826118a2565b9050919050565b6118dd816118c2565b81146118e857600080fd5b50565b6000813590506118fa816118d4565b92915050565b6000819050919050565b61191381611900565b811461191e57600080fd5b50565b6000813590506119308161190a565b92915050565b6000806040838503121561194d5761194c61172b565b5b600061195b858286016118eb565b925050602061196c85828601611921565b9150509250929050565b61197f81611900565b82525050565b600060208201905061199a6000830184611976565b92915050565b6000806000606084860312156119b9576119b861172b565b5b60006119c7868287016118eb565b93505060206119d8868287016118eb565b92505060406119e986828701611921565b9150509250925092565b600060208284031215611a0957611a0861172b565b5b6000611a17848285016118eb565b91505092915050565b600060ff82169050919050565b611a3681611a20565b82525050565b6000602082019050611a516000830184611a2d565b92915050565b600060208284031215611a6d57611a6c61172b565b5b6000611a7b84828501611921565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611aa957611aa8611a84565b5b8235905067ffffffffffffffff811115611ac657611ac5611a89565b5b602083019150836001820283011115611ae257611ae1611a8e565b5b9250929050565b60008060008060608587031215611b0357611b0261172b565b5b6000611b11878288016118eb565b9450506020611b2287828801611921565b935050604085013567ffffffffffffffff811115611b4357611b42611730565b5b611b4f87828801611a93565b925092505092959194509250565b611b66816118c2565b82525050565b6000602082019050611b816000830184611b5d565b92915050565b60008060408385031215611b9e57611b9d61172b565b5b6000611bac858286016118eb565b9250506020611bbd858286016118eb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c0e57607f821691505b602082108103611c2157611c20611bc7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c6182611900565b9150611c6c83611900565b9250828203905081811115611c8457611c83611c27565b5b92915050565b6000611c9582611900565b9150611ca083611900565b9250828201905080821115611cb857611cb7611c27565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000611cf4600a836117fb565b9150611cff82611cbe565b602082019050919050565b60006020820190508181036000830152611d2381611ce7565b9050919050565b7f4552525f46554e44530000000000000000000000000000000000000000000000600082015250565b6000611d606009836117fb565b9150611d6b82611d2a565b602082019050919050565b60006020820190508181036000830152611d8f81611d53565b9050919050565b7f4552525f4e4f545f53454c460000000000000000000000000000000000000000600082015250565b6000611dcc600c836117fb565b9150611dd782611d96565b602082019050919050565b60006020820190508181036000830152611dfb81611dbf565b905091905056fea26469706673582212207c618c5e739ffaab5926ea597eb54f0122f3f64b626f5a26fb110c7779f25e7564736f6c63430008130033a26469706673582212206226f4f783ef26447e397977b5adbf34009a6806ad92e41af81961d09812b19664736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b50604051620055eb380380620055eb833981810160405281019062000037919062000547565b6000606084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160156101000a81548160ff021916908360ff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f313ce567000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200016291906200061c565b6000604051808303816000865af19150503d8060008114620001a1576040519150601f19603f3d011682016040523d82523d6000602084013e620001a6565b606091505b50809250819350505081620001f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e99062000696565b60405180910390fd5b80806020019051810190620002089190620006b8565b600160146101000a81548160ff021916908360ff160217905550600160159054906101000a900460ff1660ff16600160149054906101000a900460ff1660ff1610156200025457600080fd5b82620003d257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200032591906200061c565b6000604051808303816000865af19150503d806000811462000364576040519150601f19603f3d011682016040523d82523d6000602084013e62000369565b606091505b50809250819350505081620003b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ac9062000696565b60405180910390fd5b80806020019051810190620003cb919062000725565b6002819055505b83600160149054906101000a900460ff16620003ef919062000786565b600a620003fd919062000916565b600381905550600060035403620004175760016003819055505b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505062000967565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004948262000467565b9050919050565b620004a68162000487565b8114620004b257600080fd5b50565b600081519050620004c6816200049b565b92915050565b600060ff82169050919050565b620004e481620004cc565b8114620004f057600080fd5b50565b6000815190506200050481620004d9565b92915050565b60008115159050919050565b62000521816200050a565b81146200052d57600080fd5b50565b600081519050620005418162000516565b92915050565b60008060006060848603121562000563576200056262000462565b5b60006200057386828701620004b5565b93505060206200058686828701620004f3565b9250506040620005998682870162000530565b9150509250925092565b600081519050919050565b600081905092915050565b60005b83811015620005d9578082015181840152602081019050620005bc565b60008484015250505050565b6000620005f282620005a3565b620005fe8185620005ae565b935062000610818560208601620005b9565b80840191505092915050565b60006200062a8284620005e5565b915081905092915050565b600082825260208201905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b60006200067e60098362000635565b91506200068b8262000646565b602082019050919050565b60006020820190508181036000830152620006b1816200066f565b9050919050565b600060208284031215620006d157620006d062000462565b5b6000620006e184828501620004f3565b91505092915050565b6000819050919050565b620006ff81620006ea565b81146200070b57600080fd5b50565b6000815190506200071f81620006f4565b92915050565b6000602082840312156200073e576200073d62000462565b5b60006200074e848285016200070e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200079382620004cc565b9150620007a083620004cc565b9250828203905060ff811115620007bc57620007bb62000757565b5b92915050565b6000600282049050919050565b6000808291508390505b60018511156200082157808604811115620007f957620007f862000757565b5b6001851615620008095780820291505b80810290506200081985620007c2565b9450620007d9565b94509492505050565b6000826200083c57600190506200090f565b816200084c57600090506200090f565b81600181146200086557600281146200087057620008a6565b60019150506200090f565b60ff84111562000885576200088462000757565b5b8360020a9150848211156200089f576200089e62000757565b5b506200090f565b5060208310610133831016604e8410600b8410161715620008e05782820a905083811115620008da57620008d962000757565b5b6200090f565b620008ef8484846001620007cf565b9250905081840481111562000909576200090862000757565b5b81810290505b9392505050565b60006200092382620006ea565b91506200093083620004cc565b92506200095f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200082a565b905092915050565b614c7480620009776000396000f3fe60806040523480156200001157600080fd5b5060043610620000c9576000357c010000000000000000000000000000000000000000000000000000000090048063644b7a43116200008c578063644b7a4314620001dc57806374c13fda1462000212578063d9caed121462000234578063da2824a8146200026a578063f3fef3a314620002a057620000c9565b806301ffc9a714620000ce578063198e2b8a14620001045780632b29ba23146200013a57806347e7ef2414620001705780635ae06f7e14620001a6575b600080fd5b620000ec6004803603810190620000e6919062001ae4565b620002d6565b604051620000fb919062001b33565b60405180910390f35b6200012260048036038101906200011c919062001bbe565b620003de565b60405162000131919062001c91565b60405180910390f35b62000158600480360381019062000152919062001cdf565b62000621565b60405162000167919062001b33565b60405180910390f35b6200018e600480360381019062000188919062001d4c565b620006ce565b6040516200019d919062001da4565b60405180910390f35b620001c46004803603810190620001be919062001cdf565b62000ec2565b604051620001d3919062001b33565b60405180910390f35b620001fa6004803603810190620001f4919062001dc1565b62000fb6565b60405162000209919062001c91565b60405180910390f35b6200021c62001001565b6040516200022b919062001c91565b60405180910390f35b6200025260048036038101906200024c919062001df3565b62001027565b60405162000261919062001da4565b60405180910390f35b62000288600480360381019062000282919062001cdf565b6200107a565b60405162000297919062001b33565b60405180910390f35b620002be6004803603810190620002b8919062001d4c565b62001137565b604051620002cd919062001da4565b60405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036200032c5760019050620003d9565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603620003805760019050620003d9565b639e2d02367c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603620003d45760019050620003d9565b600090505b919050565b60008060008087878787600160159054906101000a900460ff166000604051620004089062001a6f565b620004199695949392919062001f1e565b604051809103906000f08015801562000436573d6000803e3d6000fd5b50925082915060058054905090506005839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600254111562000556578273ffffffffffffffffffffffffffffffffffffffff1663449a52f8306002546040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200050e92919062001f7d565b6020604051808303816000875af11580156200052e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000554919062001fdb565b505b600254817f0f91f79b60765ed60c8537a0c2f417bfc1ab0a46df716a76bc7ba5130529898f846040516200058b919062001c91565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b460f6f5497bb72eeec65f6df538e6388b2e74b8fc03e7d318653a663e737826002546040516200060b919062001da4565b60405180910390a4819350505050949350505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680620006c7575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600080600060606000808794506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146200079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000794906200205d565b60405180910390fd5b6000871115620007b057869050620009ae565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1633604051602401620007fc919062001c91565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620008889190620020f8565b6000604051808303816000865af19150503d8060008114620008c7576040519150601f19603f3d011682016040523d82523d6000602084013e620008cc565b606091505b5080945081955050508362000918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090f9062002161565b60405180910390fd5b828060200190518101906200092e91906200219a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811062000995576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098c906200221c565b60405180910390fd5b60008103620009ad5760009550505050505062000ebc565b5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16333083604051602401620009fe939291906200229f565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000a8a9190620020f8565b6000604051808303816000865af19150503d806000811462000ac9576040519150601f19603f3d011682016040523d82523d6000602084013e62000ace565b606091505b5080945081955050508362000b1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b119062002161565b60405180910390fd5b8280602001905181019062000b30919062001fdb565b93508362000b75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6c906200232c565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006003540362000c0a5780915062000c1d565b6003548162000c1a9190620023ac565b91505b60006002540362000d0f578473ffffffffffffffffffffffffffffffffffffffff1663449a52f833846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040162000c8192919062001f7d565b6020604051808303816000875af115801562000ca1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc7919062001fdb565b62000d09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d009062002434565b60405180910390fd5b62000eb3565b8773ffffffffffffffffffffffffffffffffffffffff16338360405160240162000d3b92919062001f7d565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000dc79190620020f8565b6000604051808303816000865af19150503d806000811462000e06576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0b565b606091505b5080945081955050508362000e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e4e9062002161565b60405180910390fd5b8280602001905181019062000e6d919062001fdb565b93508362000eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ea990620024a6565b60405180910390fd5b5b81955050505050505b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148062000f4b57508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b62000f5557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60006005828154811062000fcf5762000fce620024c8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806001146200106f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010669062002547565b60405180910390fd5b600090509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620010d657600080fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806060600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603620011ad57620011a18787620006ce565b94505050505062001823565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600082036200124357600094505050505062001823565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541062001324576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200131b90620025b9565b60405180910390fd5b62001330873362001829565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81036200140957600094505050505062001823565b6000861115620014595785811462001458576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200144f906200262b565b60405180910390fd5b5b8673ffffffffffffffffffffffffffffffffffffffff1633308360405160240162001487939291906200229f565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620015139190620020f8565b6000604051808303816000865af19150503d806000811462001552576040519150601f19603f3d011682016040523d82523d6000602084013e62001557565b606091505b50809450819550505083620015a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200159a9062002161565b60405180910390fd5b82806020019051810190620015b9919062001fdb565b935083620015fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015f5906200232c565b60405180910390fd5b80600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200164f91906200264d565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163383604051602401620016a492919062001f7d565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620017309190620020f8565b6000604051808303816000865af19150503d80600081146200176f576040519150601f19603f3d011682016040523d82523d6000602084013e62001774565b606091505b50809450819550505083620017c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017b79062002161565b60405180910390fd5b82806020019051810190620017d6919062001fdb565b9350836200181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001812906200232c565b60405180910390fd5b819450505050505b92915050565b60008060606000808673ffffffffffffffffffffffffffffffffffffffff16866040516024016200185b919062001c91565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620018e79190620020f8565b6000604051808303816000865af19150503d806000811462001926576040519150601f19603f3d011682016040523d82523d6000602084013e6200192b565b606091505b5080945081955050508362001977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200196e9062002161565b60405180910390fd5b828060200190518101906200198d91906200219a565b9150600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050806003548362001a1f919062002688565b1462001a62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a599062002723565b60405180910390fd5b8194505050505092915050565b6124f9806200274683390190565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001abe8162001a87565b811462001aca57600080fd5b50565b60008135905062001ade8162001ab3565b92915050565b60006020828403121562001afd5762001afc62001a7d565b5b600062001b0d8482850162001acd565b91505092915050565b60008115159050919050565b62001b2d8162001b16565b82525050565b600060208201905062001b4a600083018462001b22565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011262001b785762001b7762001b50565b5b8235905067ffffffffffffffff81111562001b985762001b9762001b55565b5b60208301915083600182028301111562001bb75762001bb662001b5a565b5b9250929050565b6000806000806040858703121562001bdb5762001bda62001a7d565b5b600085013567ffffffffffffffff81111562001bfc5762001bfb62001a82565b5b62001c0a8782880162001b5f565b9450945050602085013567ffffffffffffffff81111562001c305762001c2f62001a82565b5b62001c3e8782880162001b5f565b925092505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001c798262001c4c565b9050919050565b62001c8b8162001c6c565b82525050565b600060208201905062001ca8600083018462001c80565b92915050565b62001cb98162001c6c565b811462001cc557600080fd5b50565b60008135905062001cd98162001cae565b92915050565b60006020828403121562001cf85762001cf762001a7d565b5b600062001d088482850162001cc8565b91505092915050565b6000819050919050565b62001d268162001d11565b811462001d3257600080fd5b50565b60008135905062001d468162001d1b565b92915050565b6000806040838503121562001d665762001d6562001a7d565b5b600062001d768582860162001cc8565b925050602062001d898582860162001d35565b9150509250929050565b62001d9e8162001d11565b82525050565b600060208201905062001dbb600083018462001d93565b92915050565b60006020828403121562001dda5762001dd962001a7d565b5b600062001dea8482850162001d35565b91505092915050565b60008060006060848603121562001e0f5762001e0e62001a7d565b5b600062001e1f8682870162001cc8565b935050602062001e328682870162001cc8565b925050604062001e458682870162001d35565b9150509250925092565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600062001e8e838562001e4f565b935062001e9d83858462001e60565b62001ea88362001e6f565b840190509392505050565b600060ff82169050919050565b62001ecb8162001eb3565b82525050565b6000819050919050565b6000819050919050565b600062001f0662001f0062001efa8462001ed1565b62001edb565b62001d11565b9050919050565b62001f188162001ee5565b82525050565b6000608082019050818103600083015262001f3b81888a62001e80565b9050818103602083015262001f5281868862001e80565b905062001f63604083018562001ec0565b62001f72606083018462001f0d565b979650505050505050565b600060408201905062001f94600083018562001c80565b62001fa3602083018462001d93565b9392505050565b62001fb58162001b16565b811462001fc157600080fd5b50565b60008151905062001fd58162001faa565b92915050565b60006020828403121562001ff45762001ff362001a7d565b5b6000620020048482850162001fc4565b91505092915050565b7f4552525f55534544000000000000000000000000000000000000000000000000600082015250565b60006200204560088362001e4f565b915062002052826200200d565b602082019050919050565b60006020820190508181036000830152620020788162002036565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015620020b557808201518184015260208101905062002098565b60008484015250505050565b6000620020ce826200207f565b620020da81856200208a565b9350620020ec81856020860162002095565b80840191505092915050565b6000620021068284620020c1565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b60006200214960098362001e4f565b9150620021568262002111565b602082019050919050565b600060208201905081810360008301526200217c816200213a565b9050919050565b600081519050620021948162001d1b565b92915050565b600060208284031215620021b357620021b262001a7d565b5b6000620021c38482850162002183565b91505092915050565b7f4552525f56414c55455f544f4f5f484947480000000000000000000000000000600082015250565b60006200220460128362001e4f565b91506200221182620021cc565b602082019050919050565b600060208201905081810360008301526200223781620021f5565b9050919050565b60006200225f62002259620022538462001c4c565b62001edb565b62001c4c565b9050919050565b600062002273826200223e565b9050919050565b6000620022878262002266565b9050919050565b62002299816200227a565b82525050565b6000606082019050620022b6600083018662001c80565b620022c560208301856200228e565b620022d4604083018462001d93565b949350505050565b7f4552525f544f4b454e5f5452414e534645520000000000000000000000000000600082015250565b60006200231460128362001e4f565b91506200232182620022dc565b602082019050919050565b60006020820190508181036000830152620023478162002305565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620023b98262001d11565b9150620023c68362001d11565b925082620023d957620023d86200234e565b5b828204905092915050565b7f4552525f4d494e54000000000000000000000000000000000000000000000000600082015250565b60006200241c60088362001e4f565b91506200242982620023e4565b602082019050919050565b600060208201905081810360008301526200244f816200240d565b9050919050565b7f4552525f56454e445f544f4b454e5f5452414e53464552000000000000000000600082015250565b60006200248e60178362001e4f565b91506200249b8262002456565b602082019050919050565b60006020820190508181036000830152620024c1816200247f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4e4f5f53594e435f5357415000000000000000000000000000000000600082015250565b60006200252f60108362001e4f565b91506200253c82620024f7565b602082019050919050565b60006020820190508181036000830152620025628162002520565b9050919050565b7f4552525f414c52454144595f57495448445241574e0000000000000000000000600082015250565b6000620025a160158362001e4f565b9150620025ae8262002569565b602082019050919050565b60006020820190508181036000830152620025d48162002592565b9050919050565b7f4552525f56414c55455f4d49534d415443480000000000000000000000000000600082015250565b60006200261360128362001e4f565b91506200262082620025db565b602082019050919050565b60006020820190508181036000830152620026468162002604565b9050919050565b60006200265a8262001d11565b9150620026678362001d11565b92508282019050808211156200268257620026816200237d565b5b92915050565b6000620026958262001d11565b9150620026a28362001d11565b9250828202620026b28162001d11565b91508282048414831517620026cc57620026cb6200237d565b5b5092915050565b7f4552525f4c4f434b454400000000000000000000000000000000000000000000600082015250565b60006200270b600a8362001e4f565b91506200271882620026d3565b602082019050919050565b600060208201905081810360008301526200273e81620026fc565b905091905056fe60806040523480156200001157600080fd5b50604051620024f9380380620024f98339818101604052810190620000379190620002d3565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360029081620000889190620005ca565b5082600390816200009a9190620005ca565b5081600460006101000a81548160ff021916908360ff1602179055508060098190555050505050620006b1565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200013082620000e5565b810181811067ffffffffffffffff82111715620001525762000151620000f6565b5b80604052505050565b600062000167620000c7565b905062000175828262000125565b919050565b600067ffffffffffffffff821115620001985762000197620000f6565b5b620001a382620000e5565b9050602081019050919050565b60005b83811015620001d0578082015181840152602081019050620001b3565b60008484015250505050565b6000620001f3620001ed846200017a565b6200015b565b905082815260208101848484011115620002125762000211620000e0565b5b6200021f848285620001b0565b509392505050565b600082601f8301126200023f576200023e620000db565b5b815162000251848260208601620001dc565b91505092915050565b600060ff82169050919050565b62000272816200025a565b81146200027e57600080fd5b50565b600081519050620002928162000267565b92915050565b6000819050919050565b620002ad8162000298565b8114620002b957600080fd5b50565b600081519050620002cd81620002a2565b92915050565b60008060008060808587031215620002f057620002ef620000d1565b5b600085015167ffffffffffffffff811115620003115762000310620000d6565b5b6200031f8782880162000227565b945050602085015167ffffffffffffffff811115620003435762000342620000d6565b5b620003518782880162000227565b9350506040620003648782880162000281565b92505060606200037787828801620002bc565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d657607f821691505b602082108103620003ec57620003eb6200038e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620004597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000417565b62000465868362000417565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620004a8620004a26200049c8462000298565b6200047d565b62000298565b9050919050565b6000819050919050565b620004c48362000487565b620004dc620004d382620004af565b84845462000427565b825550505050565b600090565b620004f3620004e4565b62000500818484620004b9565b505050565b5b8181101562000528576200051c600082620004e9565b60018101905062000506565b5050565b601f82111562000577576200054181620003f2565b6200054c8462000407565b810160208510156200055c578190505b620005746200056b8562000407565b83018262000505565b50505b505050565b60008160020a8304905092915050565b60006200059f600019846008026200057c565b1980831691505092915050565b6000620005ba83836200058c565b9150826002028217905092915050565b620005d58262000383565b67ffffffffffffffff811115620005f157620005f0620000f6565b5b620005fd8254620003bd565b6200060a8282856200052c565b600060209050601f8311600181146200064257600084156200062d578287015190505b620006398582620005ac565b865550620006a9565b601f1984166200065286620003f2565b60005b828110156200067c5784890151825560018201915060208501945060208101905062000655565b868310156200069c578489015162000698601f8916826200058c565b8355505b6001600288020188555050505b505050505050565b611e3880620006c16000396000f3fe608060405234801561001057600080fd5b5060043610610175576000357c0100000000000000000000000000000000000000000000000000000000900480635f408c04116100e0578063a9059cbb11610099578063a9059cbb14610422578063b1cb0db314610452578063d89135cd14610470578063da2824a81461048e578063dd62ed3e146104be578063f2fde38b146104ee57610175565b80635f408c041461035e57806370a082311461037c5780638da5cb5b146103ac57806394d008ef146103ca57806395d89b41146103e6578063a2309ff81461040457610175565b8063313ce56711610132578063313ce5671461027657806342966c6814610294578063449a52f8146102c457806344d17187146102f457806344df8e70146103105780635ae06f7e1461032e57610175565b806301ffc9a71461017a57806306fdde03146101aa578063095ea7b3146101c857806318160ddd146101f857806323b872dd146102165780632b29ba2314610246575b600080fd5b610194600480360381019061018f919061178d565b61051e565b6040516101a191906117d5565b60405180910390f35b6101b2610768565b6040516101bf9190611880565b60405180910390f35b6101e260048036038101906101dd9190611936565b6107f6565b6040516101ef91906117d5565b60405180910390f35b610200610991565b60405161020d9190611985565b60405180910390f35b610230600480360381019061022b91906119a0565b6109a8565b60405161023d91906117d5565b60405180910390f35b610260600480360381019061025b91906119f3565b610cd0565b60405161026d91906117d5565b60405180910390f35b61027e610d7c565b60405161028b9190611a3c565b60405180910390f35b6102ae60048036038101906102a99190611a57565b610d8f565b6040516102bb91906117d5565b60405180910390f35b6102de60048036038101906102d99190611936565b610f51565b6040516102eb91906117d5565b60405180910390f35b61030e60048036038101906103099190611ae9565b6110dd565b005b61031861115b565b60405161032591906117d5565b60405180910390f35b610348600480360381019061034391906119f3565b6111aa565b60405161035591906117d5565b60405180910390f35b61036661129c565b6040516103739190611a3c565b60405180910390f35b610396600480360381019061039191906119f3565b61133a565b6040516103a39190611985565b60405180910390f35b6103b4611352565b6040516103c19190611b6c565b60405180910390f35b6103e460048036038101906103df9190611ae9565b611376565b005b6103ee611387565b6040516103fb9190611880565b60405180910390f35b61040c611415565b6040516104199190611985565b60405180910390f35b61043c60048036038101906104379190611936565b61141b565b60405161044991906117d5565b60405180910390f35b61045a61159a565b6040516104679190611985565b60405180910390f35b6104786115a0565b6040516104859190611985565b60405180910390f35b6104a860048036038101906104a391906119f3565b6115a6565b6040516104b591906117d5565b60405180910390f35b6104d860048036038101906104d39190611b87565b611662565b6040516104e59190611985565b60405180910390f35b610508600480360381019061050391906119f3565b611687565b60405161051591906117d5565b60405180910390f35b600063b61bc9417c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036105725760019050610763565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036105c45760019050610763565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106165760019050610763565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106685760019050610763565b63abe1f1f57c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106ba5760019050610763565b63b1110c1b7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361070c5760019050610763565b63841a0e947c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361075e5760019050610763565b600090505b919050565b6002805461077590611bf6565b80601f01602080910402602001604051908101604052809291908181526020018280546107a190611bf6565b80156107ee5780601f106107c3576101008083540402835291602001916107ee565b820191906000526020600020905b8154815290600101906020018083116107d157829003601f168201915b505050505081565b60008061080161129c565b60ff161461080e57600080fd5b60008211156108a1576000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146108a057600080fd5b5b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097f9190611985565b60405180910390a36001905092915050565b60006008546007546109a39190611c56565b905090565b6000806109b361129c565b60ff16146109c057600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a4957600080fd5b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a9557600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d9190611c56565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bec9190611c56565b9250508190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c429190611c8a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f93985604051610cbd9190611985565b60405180910390a4600190509392505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610d75575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600460009054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790611d0a565b60405180910390fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990611d76565b60405180910390fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ef19190611c56565b925050819055508160086000828254610f0a9190611c8a565b925050819055507fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb82604051610f409190611985565b60405180910390a160019050919050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610ff6575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fff57600080fd5b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461104e9190611c8a565b9250508190555081600760008282546110679190611c8a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516110cb9190611985565b60405180910390a36001905092915050565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290611de2565b60405180910390fd5b61115483610d8f565b5050505050565b60006111a5600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d8f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061123257508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61123b57600080fd5b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600954036112b05760009050611337565b600a60009054906101000a900460ff16156112ce5760019050611337565b6009544210611332576001600a60006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe9426040516113219190611985565b60405180910390a160029050611337565b600090505b90565b60056020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113808484610f51565b5050505050565b6003805461139490611bf6565b80601f01602080910402602001604051908101604052809291908181526020018280546113c090611bf6565b801561140d5780601f106113e25761010080835404028352916020019161140d565b820191906000526020600020905b8154815290600101906020018083116113f057829003601f168201915b505050505081565b60075481565b60008061142661129c565b60ff161461143357600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561147f57600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ce9190611c56565b9250508190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115249190611c8a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115889190611985565b60405180910390a36001905092915050565b60095481565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461160157600080fd5b6001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6006602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e257600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61176a81611735565b811461177557600080fd5b50565b60008135905061178781611761565b92915050565b6000602082840312156117a3576117a261172b565b5b60006117b184828501611778565b91505092915050565b60008115159050919050565b6117cf816117ba565b82525050565b60006020820190506117ea60008301846117c6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561182a57808201518184015260208101905061180f565b60008484015250505050565b6000601f19601f8301169050919050565b6000611852826117f0565b61185c81856117fb565b935061186c81856020860161180c565b61187581611836565b840191505092915050565b6000602082019050818103600083015261189a8184611847565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118cd826118a2565b9050919050565b6118dd816118c2565b81146118e857600080fd5b50565b6000813590506118fa816118d4565b92915050565b6000819050919050565b61191381611900565b811461191e57600080fd5b50565b6000813590506119308161190a565b92915050565b6000806040838503121561194d5761194c61172b565b5b600061195b858286016118eb565b925050602061196c85828601611921565b9150509250929050565b61197f81611900565b82525050565b600060208201905061199a6000830184611976565b92915050565b6000806000606084860312156119b9576119b861172b565b5b60006119c7868287016118eb565b93505060206119d8868287016118eb565b92505060406119e986828701611921565b9150509250925092565b600060208284031215611a0957611a0861172b565b5b6000611a17848285016118eb565b91505092915050565b600060ff82169050919050565b611a3681611a20565b82525050565b6000602082019050611a516000830184611a2d565b92915050565b600060208284031215611a6d57611a6c61172b565b5b6000611a7b84828501611921565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611aa957611aa8611a84565b5b8235905067ffffffffffffffff811115611ac657611ac5611a89565b5b602083019150836001820283011115611ae257611ae1611a8e565b5b9250929050565b60008060008060608587031215611b0357611b0261172b565b5b6000611b11878288016118eb565b9450506020611b2287828801611921565b935050604085013567ffffffffffffffff811115611b4357611b42611730565b5b611b4f87828801611a93565b925092505092959194509250565b611b66816118c2565b82525050565b6000602082019050611b816000830184611b5d565b92915050565b60008060408385031215611b9e57611b9d61172b565b5b6000611bac858286016118eb565b9250506020611bbd858286016118eb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c0e57607f821691505b602082108103611c2157611c20611bc7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c6182611900565b9150611c6c83611900565b9250828203905081811115611c8457611c83611c27565b5b92915050565b6000611c9582611900565b9150611ca083611900565b9250828201905080821115611cb857611cb7611c27565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000611cf4600a836117fb565b9150611cff82611cbe565b602082019050919050565b60006020820190508181036000830152611d2381611ce7565b9050919050565b7f4552525f46554e44530000000000000000000000000000000000000000000000600082015250565b6000611d606009836117fb565b9150611d6b82611d2a565b602082019050919050565b60006020820190508181036000830152611d8f81611d53565b9050919050565b7f4552525f4e4f545f53454c460000000000000000000000000000000000000000600082015250565b6000611dcc600c836117fb565b9150611dd782611d96565b602082019050919050565b60006020820190508181036000830152611dfb81611dbf565b905091905056fea26469706673582212207c618c5e739ffaab5926ea597eb54f0122f3f64b626f5a26fb110c7779f25e7564736f6c63430008130033a2646970667358221220d687af5c4c60155eb0842d76fd71af6edcda9a532ae6d1e788037a5d4c913cd064736f6c63430008130033 +\ No newline at end of file diff --git a/python/erc20_vend/data/Vend.json b/python/erc20_vend/data/Vend.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"address","name":"_controlToken","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"bool","name":"_mint","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_idx","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_supply","type":"uint256"},{"indexed":false,"internalType":"address","name":"_token","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"create","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"getTokenByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] +[{"inputs":[{"internalType":"address","name":"_defaultToken","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"bool","name":"_mint","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_idx","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_supply","type":"uint256"},{"indexed":false,"internalType":"address","name":"_token","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"create","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"getTokenByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_outToken","type":"address"},{"internalType":"address","name":"_inToken","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] diff --git a/python/erc20_vend/data/Vend.metadata.json b/python/erc20_vend/data/Vend.metadata.json @@ -1 +1 @@ -{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_controlToken","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"bool","name":"_mint","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_idx","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_supply","type":"uint256"},{"indexed":false,"internalType":"address","name":"_token","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"create","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"getTokenByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"Vend.sol":"ERC20Vend"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"GiftableToken.sol":{"keccak256":"0xaa3263856dd73d7bb1ec06b4ca38dd86ddd0771e8cb2ca47b7c1e3c69be9c14a","license":"AGPL-3.0-or-later","urls":["bzz-raw://ddeb57c7ea151da4b52a95c6c12a225b54b80713c323821ea52f8c8ca295479c","dweb:/ipfs/QmZKwsNxRQFdQRjPsHP7RepfLtXDXhDEb3Qy2koPJdFoWG"]},"Vend.sol":{"keccak256":"0xbba9760f80ab12fe9a26dad15c309fc46ad47195307edd1c0dd218e756188d6d","license":"AGPL-3.0-or-later","urls":["bzz-raw://81c740e10df40203f96d85c0d3d734cb5f7edea4de4c7d4a3183d4e7ab977fe3","dweb:/ipfs/QmdcDTF5FcUhqtvr2MaXEQfqHJTPFBBwz5Jik9u1tZkkLw"]}},"version":1} +{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_defaultToken","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"bool","name":"_mint","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_idx","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_supply","type":"uint256"},{"indexed":false,"internalType":"address","name":"_token","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"create","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"getTokenByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_outToken","type":"address"},{"internalType":"address","name":"_inToken","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"Vend.sol":"ERC20Vend"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"GiftableToken.sol":{"keccak256":"0xaa3263856dd73d7bb1ec06b4ca38dd86ddd0771e8cb2ca47b7c1e3c69be9c14a","license":"AGPL-3.0-or-later","urls":["bzz-raw://ddeb57c7ea151da4b52a95c6c12a225b54b80713c323821ea52f8c8ca295479c","dweb:/ipfs/QmZKwsNxRQFdQRjPsHP7RepfLtXDXhDEb3Qy2koPJdFoWG"]},"Vend.sol":{"keccak256":"0xbe1bd510aff70db60ddad03c6d8d862d8b796866e9fdfd3e4d52031db37c809c","license":"AGPL-3.0-or-later","urls":["bzz-raw://8a74b5f00e093bf9fed5be70bb41c32249341dc9b67091f848fa43b7bb0055da","dweb:/ipfs/QmYSMdYqcpQFh2zXeWkKf5w2ar4aZXa8bJxikKtAm3VA6x"]}},"version":1} diff --git a/python/erc20_vend/vend.py b/python/erc20_vend/vend.py @@ -95,12 +95,13 @@ class Vend(TxFactory): return tx - #def get_for(self, contract_address, sender_address, token_address, tx_format=TxFormat.JSONRPC, id_generator=None): def deposit(self, contract_address, sender_address, token_address, tx_format=TxFormat.JSONRPC, id_generator=None): enc = ABIContractEncoder() enc.method('deposit') enc.typ(ABIContractType.ADDRESS) + enc.typ(ABIContractType.UINT256) enc.address(token_address) + enc.uint256(0) data = add_0x(enc.get()) tx = self.template(sender_address, contract_address, use_nonce=True) tx = self.set_code(tx, data) @@ -108,13 +109,13 @@ class Vend(TxFactory): return tx - #def withdraw_for(self, contract_address, sender_address, token_address, tx_format=TxFormat.JSONRPC, id_generator=None): def withdraw(self, contract_address, sender_address, token_address, tx_format=TxFormat.JSONRPC, id_generator=None): enc = ABIContractEncoder() - #enc.method('withdrawFor') enc.method('withdraw') enc.typ(ABIContractType.ADDRESS) + enc.typ(ABIContractType.UINT256) enc.address(token_address) + enc.uint256(0) data = add_0x(enc.get()) tx = self.template(sender_address, contract_address, use_nonce=True) tx = self.set_code(tx, data) diff --git a/solidity/Vend.sol b/solidity/Vend.sol @@ -10,7 +10,10 @@ import "GiftableToken.sol"; contract ERC20Vend { address owner; uint256 constant UINT256_MAX = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; - address controlToken; + + // Implements TokenSwap + address public defaultToken; + uint8 controlDecimals; uint8 decimals; uint256 supply; @@ -24,20 +27,20 @@ contract ERC20Vend { event TokenCreated(uint256 indexed _idx, uint256 indexed _supply, address _token); event Mint(address indexed _minter, address indexed _beneficiary, address indexed _token, uint256 value); - constructor(address _controlToken, uint8 _decimals, bool _mint) { + constructor(address _defaultToken, uint8 _decimals, bool _mint) { bool r; bytes memory v; - controlToken = _controlToken; + defaultToken = _defaultToken; decimals = _decimals; - (r, v) = controlToken.call(abi.encodeWithSignature("decimals()")); + (r, v) = defaultToken.call(abi.encodeWithSignature("decimals()")); require(r, "ERR_TOKEN"); controlDecimals = abi.decode(v, (uint8)); require(controlDecimals >= decimals); if (!_mint) { - (r, v) = controlToken.call(abi.encodeWithSignature("totalSupply()")); + (r, v) = defaultToken.call(abi.encodeWithSignature("totalSupply()")); require(r, "ERR_TOKEN"); supply = abi.decode(v, (uint256)); } @@ -93,8 +96,7 @@ contract ERC20Vend { } // Receive the vended token for the currently held balance. - //function getFor(address _token) public returns (uint256) { - function deposit(address _token) public returns (uint256) { + function deposit(address _token, uint256 _value) public returns (uint256) { GiftableToken l_token; bool r; bytes memory v; @@ -105,16 +107,20 @@ contract ERC20Vend { require(used[msg.sender][address(_token)] == 0, "ERR_USED"); - (r, v) = controlToken.call(abi.encodeWithSignature("balanceOf(address)", msg.sender)); - require(r, "ERR_TOKEN"); - l_controlBalance = abi.decode(v, (uint256)); + if (_value > 0) { + l_controlBalance = _value; + } else { + (r, v) = defaultToken.call(abi.encodeWithSignature("balanceOf(address)", msg.sender)); + require(r, "ERR_TOKEN"); + l_controlBalance = abi.decode(v, (uint256)); - require(l_controlBalance < UINT256_MAX, "ERR_VALUE_TOO_HIGH"); - if (l_controlBalance == 0) { - return 0; + require(l_controlBalance < UINT256_MAX, "ERR_VALUE_TOO_HIGH"); + if (l_controlBalance == 0) { + return 0; + } } - (r, v) = controlToken.call(abi.encodeWithSignature("transferFrom(address,address,uint256)", msg.sender, this, l_controlBalance)); + (r, v) = defaultToken.call(abi.encodeWithSignature("transferFrom(address,address,uint256)", msg.sender, this, l_controlBalance)); require(r, "ERR_TOKEN"); r = abi.decode(v, (bool)); require(r, "ERR_TOKEN_TRANSFER"); @@ -142,13 +148,16 @@ contract ERC20Vend { // If contract locks exchanged tokens, this can be called to retrieve the locked tokens. // The vended token balance MUST match the original balance emitted on the exchange. // The caller must have given allowance for the full amount. - //function withdrawFor(address _token) public returns (uint256) { - function withdraw(address _token) public returns (uint256) { + function withdraw(address _token, uint256 _value) public returns (uint256) { bool r; bytes memory v; uint256 l_balance; uint256 l_vendBalance; + if (_token == defaultToken) { + return deposit(_token, _value); + } + l_balance = used[msg.sender][_token]; if (l_balance == 0) { return 0; @@ -161,13 +170,17 @@ contract ERC20Vend { return 0; } + if (_value > 0) { + require(l_vendBalance == _value, "ERR_VALUE_MISMATCH"); + } + (r, v) = _token.call(abi.encodeWithSignature("transferFrom(address,address,uint256)", msg.sender, this, l_vendBalance)); require(r, "ERR_TOKEN"); r = abi.decode(v, (bool)); require(r, "ERR_TOKEN_TRANSFER"); returned[_token] += l_vendBalance; - (r, v) = controlToken.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, l_balance)); + (r, v) = defaultToken.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, l_balance)); require(r, "ERR_TOKEN"); r = abi.decode(v, (bool)); require(r, "ERR_TOKEN_TRANSFER"); @@ -175,6 +188,17 @@ contract ERC20Vend { return l_balance; } + // Implements TokenSwap + // Will always revert, as sync swap is not valid in this implementation. + function withdraw(address _outToken, address _inToken, uint256 _value) public pure returns (uint256) { + _outToken; + _inToken; + _value; + require(1 == 0, "ERR_NO_SYNC_SWAP"); + return 0; + } + + // // burn used vend tokens. // // should self-destruct contract if possible when supply reaches 0. // function burnFor(address _token) public returns(uint256) { @@ -215,6 +239,9 @@ contract ERC20Vend { if (_sum == 0xabe1f1f5) { // Writer return true; } + if (_sum == 0x4146b765) { // TokenSwap + return true; + } return false; } }