From 3c2ea1e580a75b3e4256f5f240fb77b99dcc401e Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Mon, 24 Apr 2023 23:06:10 +0200 Subject: [PATCH] fix contract semver (#410) --- .solhint.json | 1 + common/config.go | 2 +- ethereum/check_swap_creator_contract.go | 2 +- ethereum/contracts/AggregatorV3Interface.sol | 2 +- ethereum/contracts/Context.sol | 2 +- ethereum/contracts/ERC20.sol | 2 +- ethereum/contracts/ERC2771Context.sol | 2 +- ethereum/contracts/IERC20.sol | 2 +- ethereum/contracts/IERC20Metadata.sol | 2 +- ethereum/contracts/Secp256k1.sol | 2 +- ethereum/contracts/SwapCreator.sol | 12 ++++++------ ethereum/contracts/TestERC20.sol | 2 +- ethereum/erc20_mock.go | 2 +- ethereum/swap_creator.go | 2 +- 14 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.solhint.json b/.solhint.json index 712ccd99..96a2ec52 100644 --- a/.solhint.json +++ b/.solhint.json @@ -1,6 +1,7 @@ { "extends": "solhint:recommended", "rules": { + "compiler-version": ["error","^0.8.0"], "func-visibility": ["warn",{"ignoreConstructors":true}], "reason-string": ["warn",{"maxLength":64}], "no-inline-assembly": "off", diff --git a/common/config.go b/common/config.go index d1c06614..3a1f2fdb 100644 --- a/common/config.go +++ b/common/config.go @@ -100,7 +100,7 @@ func StagenetConfig() *Config { Port: 38081, }, }, - SwapCreatorAddr: ethcommon.HexToAddress("0x55D20fF84815795CED5efF61168f5258274A3f87"), + SwapCreatorAddr: ethcommon.HexToAddress("0xAFEAB9DBD7977c101A71E57dFA36450F2f1A5E9F"), ForwarderAddr: ethcommon.HexToAddress("0xa030E074b8398005a454CB7c51E9b7CDb966744a"), Bootnodes: []string{ "/ip4/134.122.115.208/tcp/9900/p2p/12D3KooWDqCzbjexHEa8Rut7bzxHFpRMZyDRW1L6TGkL1KY24JH5", diff --git a/ethereum/check_swap_creator_contract.go b/ethereum/check_swap_creator_contract.go index 8d1ce820..903e2302 100644 --- a/ethereum/check_swap_creator_contract.go +++ b/ethereum/check_swap_creator_contract.go @@ -20,7 +20,7 @@ import ( // with the trustedForwarder address set to all zeros and reading back the bytecode. See // the unit test TestExpectedSwapCreatorBytecodeHex if you need to update this value. const ( - expectedSwapCreatorBytecodeHex = "6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063b32d1b4f1461016e578063c41e46cf146101ab578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad9190611610565b610241565b005b3480156100c057600080fd5b506100c96105c4565b6040516100d69190611661565b60405180910390f35b3480156100eb57600080fd5b506101066004803603810190610101919061167c565b6105e8565b60405161011391906116c4565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e9190611610565b610640565b005b34801561015157600080fd5b5061016c600480360381019061016791906116df565b610766565b005b34801561017a57600080fd5b5061019560048036038101906101909190611735565b6109ac565b6040516101a291906116c4565b60405180910390f35b6101c560048036038101906101c09190611775565b610ab1565b6040516101d2919061183a565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd9190611855565b610ec4565b60405161020f91906118f9565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a9190611914565b610ee4565b005b6000826040516020016102549190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff169050600060038111156102a4576102a3611882565b5b8160038111156102b7576102b6611882565b5b036102ee576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561030157610300611882565b5b81600381111561031457610313611882565b5b0361034b576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff16146103b4576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a00151421080156103f9575083608001514211806103f85750600260038111156103e3576103e2611882565b5b8160038111156103f6576103f5611882565b5b145b5b15610430576040517f65430c1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61043e838560600151611061565b82827e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156104a1576104a0611882565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361053257836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f1935050505015801561052c573d6000803e3d6000fd5b506105be565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610579929190611abf565b6020604051808303816000875af1158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190611b14565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b61064a82826110ab565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d657816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106d0573d6000803e3d6000fd5b50610762565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b815260040161071d929190611abf565b6020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611b14565b505b5050565b61076f336105e8565b6107a5576040517ffc5d4daa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107af83836110ab565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361088d57826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108159190611b70565b9081150290604051600060405180830381858888f19350505050158015610840573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610887573d6000803e3d6000fd5b506109a7565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c29190611b70565b6040518363ffffffff1660e01b81526004016108df929190611abf565b6020604051808303816000875af11580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190611b14565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610962929190611ba4565b6020604051808303816000875af1158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a59190611b14565b505b505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610a0857610a07611bcd565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610a4b9493929190611c8c565b6020604051602081039080840390855afa158015610a6d573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b6000808303610aec576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b5e57348314610b59576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610be0565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610b9b93929190611cd1565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611b14565b505b6000801b891480610bf357506000801b88145b15610c2a576040517f378c37da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f044bc28000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000861480610c9f5750600085145b15610cd6576040517f7fee1bc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018842610d349190611d08565b8152602001878942610d469190611d08565b610d509190611d08565b81526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152509050600081604051602001610d909190611a35565b60405160208183030381529060405280519060200120905060006003811115610dbc57610dbb611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610dee57610ded611882565b5b14610e25576040517f734530ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818c8c85608001518660a001518760c001518860e00151604051610e709796959493929190611d3c565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610eae57610ead611882565b5b0217905550809250505098975050505050505050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610ef79190611a35565b60405160208183030381529060405280519060200120905060016003811115610f2357610f22611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610f5557610f54611882565b5b14610f8c576040517f1fc1f6a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff0219169083600381111561102b5761102a611882565b5b0217905550807f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f60405160405180910390a25050565b6110718260001c8260001c6109ac565b6110a7576040517fabab6bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6000826040516020016110be9190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506000600381111561110e5761110d611882565b5b81600381111561112157611120611882565b5b03611158576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561116b5761116a611882565b5b81600381111561117e5761117d611882565b5b036111b5576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff166111d861134e565b73ffffffffffffffffffffffffffffffffffffffff1614611225576040517f68e2c81200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83608001514210801561125d57506002600381111561124757611246611882565b5b81600381111561125a57611259611882565b5b14155b15611294576040517fd71d60b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a0015142106112d1576040517f497df9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112df838560400151611061565b82827f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561134357611342611882565b5b021790555050505050565b6000611359336105e8565b1561136d57601436033560601c905061137c565b611375611380565b905061137d565b5b90565b600033905090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113e58261139c565b810181811067ffffffffffffffff82111715611404576114036113ad565b5b80604052505050565b6000611417611388565b905061142382826113dc565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061145382611428565b9050919050565b61146381611448565b811461146e57600080fd5b50565b6000813590506114808161145a565b92915050565b6000819050919050565b61149981611486565b81146114a457600080fd5b50565b6000813590506114b681611490565b92915050565b6000819050919050565b6114cf816114bc565b81146114da57600080fd5b50565b6000813590506114ec816114c6565b92915050565b60006114fd82611428565b9050919050565b61150d816114f2565b811461151857600080fd5b50565b60008135905061152a81611504565b92915050565b6000610120828403121561154757611546611397565b5b61155261012061140d565b9050600061156284828501611471565b600083015250602061157684828501611471565b602083015250604061158a848285016114a7565b604083015250606061159e848285016114a7565b60608301525060806115b2848285016114dd565b60808301525060a06115c6848285016114dd565b60a08301525060c06115da8482850161151b565b60c08301525060e06115ee848285016114dd565b60e083015250610100611603848285016114dd565b6101008301525092915050565b600080610140838503121561162857611627611392565b5b600061163685828601611530565b925050610120611648858286016114a7565b9150509250929050565b61165b816114f2565b82525050565b60006020820190506116766000830184611652565b92915050565b60006020828403121561169257611691611392565b5b60006116a08482850161151b565b91505092915050565b60008115159050919050565b6116be816116a9565b82525050565b60006020820190506116d960008301846116b5565b92915050565b600080600061016084860312156116f9576116f8611392565b5b600061170786828701611530565b935050610120611719868287016114a7565b92505061014061172b868287016114dd565b9150509250925092565b6000806040838503121561174c5761174b611392565b5b600061175a858286016114dd565b925050602061176b858286016114dd565b9150509250929050565b600080600080600080600080610100898b03121561179657611795611392565b5b60006117a48b828c016114a7565b98505060206117b58b828c016114a7565b97505060406117c68b828c01611471565b96505060606117d78b828c016114dd565b95505060806117e88b828c016114dd565b94505060a06117f98b828c0161151b565b93505060c061180a8b828c016114dd565b92505060e061181b8b828c016114dd565b9150509295985092959890939650565b61183481611486565b82525050565b600060208201905061184f600083018461182b565b92915050565b60006020828403121561186b5761186a611392565b5b6000611879848285016114a7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118c2576118c1611882565b5b50565b60008190506118d3826118b1565b919050565b60006118e3826118c5565b9050919050565b6118f3816118d8565b82525050565b600060208201905061190e60008301846118ea565b92915050565b6000610120828403121561192b5761192a611392565b5b600061193984828501611530565b91505092915050565b61194b81611448565b82525050565b61195a81611486565b82525050565b611969816114bc565b82525050565b611978816114f2565b82525050565b610120820160008201516119956000850182611942565b5060208201516119a86020850182611942565b5060408201516119bb6040850182611951565b5060608201516119ce6060850182611951565b5060808201516119e16080850182611960565b5060a08201516119f460a0850182611960565b5060c0820151611a0760c085018261196f565b5060e0820151611a1a60e0850182611960565b50610100820151611a2f610100850182611960565b50505050565b600061012082019050611a4b600083018461197e565b92915050565b6000819050919050565b6000611a76611a71611a6c84611428565b611a51565b611428565b9050919050565b6000611a8882611a5b565b9050919050565b6000611a9a82611a7d565b9050919050565b611aaa81611a8f565b82525050565b611ab9816114bc565b82525050565b6000604082019050611ad46000830185611aa1565b611ae16020830184611ab0565b9392505050565b611af1816116a9565b8114611afc57600080fd5b50565b600081519050611b0e81611ae8565b92915050565b600060208284031215611b2a57611b29611392565b5b6000611b3884828501611aff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b7b826114bc565b9150611b86836114bc565b9250828203905081811115611b9e57611b9d611b41565b5b92915050565b6000604082019050611bb96000830185611652565b611bc66020830184611ab0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b6000611c2e611c29611c2484611bfc565b611c06565b611486565b9050919050565b611c3e81611c13565b82525050565b6000819050919050565b600060ff82169050919050565b6000611c76611c71611c6c84611c44565b611a51565b611c4e565b9050919050565b611c8681611c5b565b82525050565b6000608082019050611ca16000830187611c35565b611cae6020830186611c7d565b611cbb604083018561182b565b611cc8606083018461182b565b95945050505050565b6000606082019050611ce66000830186611652565b611cf36020830185611652565b611d006040830184611ab0565b949350505050565b6000611d13826114bc565b9150611d1e836114bc565b9250828201905080821115611d3657611d35611b41565b5b92915050565b600060e082019050611d51600083018a61182b565b611d5e602083018961182b565b611d6b604083018861182b565b611d786060830187611ab0565b611d856080830186611ab0565b611d9260a0830185611652565b611d9f60c0830184611ab0565b9897505050505050505056fea26469706673582212208c63ee431b82b16cef4dde0eec375946c81052a6ac25b2e685ef84203b9a746264736f6c63430008130033" //nolint:lll + expectedSwapCreatorBytecodeHex = "6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063b32d1b4f1461016e578063c41e46cf146101ab578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad9190611610565b610241565b005b3480156100c057600080fd5b506100c96105c4565b6040516100d69190611661565b60405180910390f35b3480156100eb57600080fd5b506101066004803603810190610101919061167c565b6105e8565b60405161011391906116c4565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e9190611610565b610640565b005b34801561015157600080fd5b5061016c600480360381019061016791906116df565b610766565b005b34801561017a57600080fd5b5061019560048036038101906101909190611735565b6109ac565b6040516101a291906116c4565b60405180910390f35b6101c560048036038101906101c09190611775565b610ab1565b6040516101d2919061183a565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd9190611855565b610ec4565b60405161020f91906118f9565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a9190611914565b610ee4565b005b6000826040516020016102549190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff169050600060038111156102a4576102a3611882565b5b8160038111156102b7576102b6611882565b5b036102ee576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561030157610300611882565b5b81600381111561031457610313611882565b5b0361034b576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff16146103b4576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a00151421080156103f9575083608001514211806103f85750600260038111156103e3576103e2611882565b5b8160038111156103f6576103f5611882565b5b145b5b15610430576040517f65430c1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61043e838560600151611061565b82827e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156104a1576104a0611882565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361053257836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f1935050505015801561052c573d6000803e3d6000fd5b506105be565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610579929190611abf565b6020604051808303816000875af1158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190611b14565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b61064a82826110ab565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d657816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106d0573d6000803e3d6000fd5b50610762565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b815260040161071d929190611abf565b6020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611b14565b505b5050565b61076f336105e8565b6107a5576040517ffc5d4daa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107af83836110ab565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361088d57826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108159190611b70565b9081150290604051600060405180830381858888f19350505050158015610840573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610887573d6000803e3d6000fd5b506109a7565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c29190611b70565b6040518363ffffffff1660e01b81526004016108df929190611abf565b6020604051808303816000875af11580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190611b14565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610962929190611ba4565b6020604051808303816000875af1158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a59190611b14565b505b505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610a0857610a07611bcd565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610a4b9493929190611c8c565b6020604051602081039080840390855afa158015610a6d573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b6000808303610aec576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b5e57348314610b59576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610be0565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610b9b93929190611cd1565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611b14565b505b6000801b891480610bf357506000801b88145b15610c2a576040517f378c37da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f044bc28000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000861480610c9f5750600085145b15610cd6576040517f7fee1bc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018842610d349190611d08565b8152602001878942610d469190611d08565b610d509190611d08565b81526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152509050600081604051602001610d909190611a35565b60405160208183030381529060405280519060200120905060006003811115610dbc57610dbb611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610dee57610ded611882565b5b14610e25576040517f734530ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818c8c85608001518660a001518760c001518860e00151604051610e709796959493929190611d3c565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610eae57610ead611882565b5b0217905550809250505098975050505050505050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610ef79190611a35565b60405160208183030381529060405280519060200120905060016003811115610f2357610f22611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610f5557610f54611882565b5b14610f8c576040517f1fc1f6a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff0219169083600381111561102b5761102a611882565b5b0217905550807f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f60405160405180910390a25050565b6110718260001c8260001c6109ac565b6110a7576040517fabab6bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6000826040516020016110be9190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506000600381111561110e5761110d611882565b5b81600381111561112157611120611882565b5b03611158576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561116b5761116a611882565b5b81600381111561117e5761117d611882565b5b036111b5576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff166111d861134e565b73ffffffffffffffffffffffffffffffffffffffff1614611225576040517f68e2c81200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83608001514210801561125d57506002600381111561124757611246611882565b5b81600381111561125a57611259611882565b5b14155b15611294576040517fd71d60b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a0015142106112d1576040517f497df9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112df838560400151611061565b82827f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561134357611342611882565b5b021790555050505050565b6000611359336105e8565b1561136d57601436033560601c905061137c565b611375611380565b905061137d565b5b90565b600033905090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113e58261139c565b810181811067ffffffffffffffff82111715611404576114036113ad565b5b80604052505050565b6000611417611388565b905061142382826113dc565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061145382611428565b9050919050565b61146381611448565b811461146e57600080fd5b50565b6000813590506114808161145a565b92915050565b6000819050919050565b61149981611486565b81146114a457600080fd5b50565b6000813590506114b681611490565b92915050565b6000819050919050565b6114cf816114bc565b81146114da57600080fd5b50565b6000813590506114ec816114c6565b92915050565b60006114fd82611428565b9050919050565b61150d816114f2565b811461151857600080fd5b50565b60008135905061152a81611504565b92915050565b6000610120828403121561154757611546611397565b5b61155261012061140d565b9050600061156284828501611471565b600083015250602061157684828501611471565b602083015250604061158a848285016114a7565b604083015250606061159e848285016114a7565b60608301525060806115b2848285016114dd565b60808301525060a06115c6848285016114dd565b60a08301525060c06115da8482850161151b565b60c08301525060e06115ee848285016114dd565b60e083015250610100611603848285016114dd565b6101008301525092915050565b600080610140838503121561162857611627611392565b5b600061163685828601611530565b925050610120611648858286016114a7565b9150509250929050565b61165b816114f2565b82525050565b60006020820190506116766000830184611652565b92915050565b60006020828403121561169257611691611392565b5b60006116a08482850161151b565b91505092915050565b60008115159050919050565b6116be816116a9565b82525050565b60006020820190506116d960008301846116b5565b92915050565b600080600061016084860312156116f9576116f8611392565b5b600061170786828701611530565b935050610120611719868287016114a7565b92505061014061172b868287016114dd565b9150509250925092565b6000806040838503121561174c5761174b611392565b5b600061175a858286016114dd565b925050602061176b858286016114dd565b9150509250929050565b600080600080600080600080610100898b03121561179657611795611392565b5b60006117a48b828c016114a7565b98505060206117b58b828c016114a7565b97505060406117c68b828c01611471565b96505060606117d78b828c016114dd565b95505060806117e88b828c016114dd565b94505060a06117f98b828c0161151b565b93505060c061180a8b828c016114dd565b92505060e061181b8b828c016114dd565b9150509295985092959890939650565b61183481611486565b82525050565b600060208201905061184f600083018461182b565b92915050565b60006020828403121561186b5761186a611392565b5b6000611879848285016114a7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118c2576118c1611882565b5b50565b60008190506118d3826118b1565b919050565b60006118e3826118c5565b9050919050565b6118f3816118d8565b82525050565b600060208201905061190e60008301846118ea565b92915050565b6000610120828403121561192b5761192a611392565b5b600061193984828501611530565b91505092915050565b61194b81611448565b82525050565b61195a81611486565b82525050565b611969816114bc565b82525050565b611978816114f2565b82525050565b610120820160008201516119956000850182611942565b5060208201516119a86020850182611942565b5060408201516119bb6040850182611951565b5060608201516119ce6060850182611951565b5060808201516119e16080850182611960565b5060a08201516119f460a0850182611960565b5060c0820151611a0760c085018261196f565b5060e0820151611a1a60e0850182611960565b50610100820151611a2f610100850182611960565b50505050565b600061012082019050611a4b600083018461197e565b92915050565b6000819050919050565b6000611a76611a71611a6c84611428565b611a51565b611428565b9050919050565b6000611a8882611a5b565b9050919050565b6000611a9a82611a7d565b9050919050565b611aaa81611a8f565b82525050565b611ab9816114bc565b82525050565b6000604082019050611ad46000830185611aa1565b611ae16020830184611ab0565b9392505050565b611af1816116a9565b8114611afc57600080fd5b50565b600081519050611b0e81611ae8565b92915050565b600060208284031215611b2a57611b29611392565b5b6000611b3884828501611aff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b7b826114bc565b9150611b86836114bc565b9250828203905081811115611b9e57611b9d611b41565b5b92915050565b6000604082019050611bb96000830185611652565b611bc66020830184611ab0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b6000611c2e611c29611c2484611bfc565b611c06565b611486565b9050919050565b611c3e81611c13565b82525050565b6000819050919050565b600060ff82169050919050565b6000611c76611c71611c6c84611c44565b611a51565b611c4e565b9050919050565b611c8681611c5b565b82525050565b6000608082019050611ca16000830187611c35565b611cae6020830186611c7d565b611cbb604083018561182b565b611cc8606083018461182b565b95945050505050565b6000606082019050611ce66000830186611652565b611cf36020830185611652565b611d006040830184611ab0565b949350505050565b6000611d13826114bc565b9150611d1e836114bc565b9250828201905080821115611d3657611d35611b41565b5b92915050565b600060e082019050611d51600083018a61182b565b611d5e602083018961182b565b611d6b604083018861182b565b611d786060830187611ab0565b611d856080830186611ab0565b611d9260a0830185611652565b611d9f60c0830184611ab0565b9897505050505050505056fea264697066735822122084f522d05ed6af1060846f3e30d11805736fb4d34a12fcf1a991eced80ebd24a64736f6c63430008130033" //nolint:lll ethAddrByteLen = len(ethcommon.Address{}) // 20 bytes ) diff --git a/ethereum/contracts/AggregatorV3Interface.sol b/ethereum/contracts/AggregatorV3Interface.sol index 425b1402..ae070f07 100644 --- a/ethereum/contracts/AggregatorV3Interface.sol +++ b/ethereum/contracts/AggregatorV3Interface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19 .0; +pragma solidity ^0.8.19; // // Contract comes from here: diff --git a/ethereum/contracts/Context.sol b/ethereum/contracts/Context.sol index c2e6685b..9392968a 100644 --- a/ethereum/contracts/Context.sol +++ b/ethereum/contracts/Context.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) -pragma solidity 0.8.19 .0; +pragma solidity ^0.8.19; /** * @dev Provides information about the current execution context, including the diff --git a/ethereum/contracts/ERC20.sol b/ethereum/contracts/ERC20.sol index a51125d7..d3aa573e 100644 --- a/ethereum/contracts/ERC20.sol +++ b/ethereum/contracts/ERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) -pragma solidity ^0.8.0 .0; +pragma solidity ^0.8.0; import {IERC20} from "./IERC20.sol"; import {IERC20Metadata} from "./IERC20Metadata.sol"; diff --git a/ethereum/contracts/ERC2771Context.sol b/ethereum/contracts/ERC2771Context.sol index 6d2f0def..34b1210a 100644 --- a/ethereum/contracts/ERC2771Context.sol +++ b/ethereum/contracts/ERC2771Context.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (metatx/ERC2771Context.sol) -pragma solidity 0.8.19 .0; +pragma solidity ^0.8.19; import {Context} from "./Context.sol"; diff --git a/ethereum/contracts/IERC20.sol b/ethereum/contracts/IERC20.sol index c075dec1..66c4e4d8 100644 --- a/ethereum/contracts/IERC20.sol +++ b/ethereum/contracts/IERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) -pragma solidity ^0.8.0 .0; +pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. diff --git a/ethereum/contracts/IERC20Metadata.sol b/ethereum/contracts/IERC20Metadata.sol index 53f13323..2e434311 100644 --- a/ethereum/contracts/IERC20Metadata.sol +++ b/ethereum/contracts/IERC20Metadata.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) -pragma solidity ^0.8.0 .0; +pragma solidity ^0.8.0; import {IERC20} from "./IERC20.sol"; diff --git a/ethereum/contracts/Secp256k1.sol b/ethereum/contracts/Secp256k1.sol index ff680238..ee837408 100644 --- a/ethereum/contracts/Secp256k1.sol +++ b/ethereum/contracts/Secp256k1.sol @@ -2,7 +2,7 @@ // Implemention based on Vitalik's idea: // https://ethresear.ch/t/you-can-kinda-abuse-ecrecover-to-do-ecmul-in-secp256k1-today -pragma solidity 0.8.19 .0; +pragma solidity ^0.8.19; contract Secp256k1 { // solhint-disable-next-line diff --git a/ethereum/contracts/SwapCreator.sol b/ethereum/contracts/SwapCreator.sol index 71cf1320..09848af7 100644 --- a/ethereum/contracts/SwapCreator.sol +++ b/ethereum/contracts/SwapCreator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPLv3 -pragma solidity 0.8.19 .0; +pragma solidity ^0.8.19; import {ERC2771Context} from "./ERC2771Context.sol"; import {IERC20} from "./IERC20.sol"; @@ -31,11 +31,11 @@ contract SwapCreator is ERC2771Context, Secp256k1 { bytes32 pubKeyRefund; // timestamp before which Alice can call either `setReady` or `refund` uint256 timeout0; - // timestamp after which Bob cannot claim, only Alice can refund. + // timestamp after which Bob cannot claim, only Alice can refund uint256 timeout1; // the asset being swapped: equal to address(0) for ETH, or an ERC-20 token address address asset; - // the value of this swap. + // the value of this swap uint256 value; // choose random uint256 nonce; @@ -186,7 +186,7 @@ contract SwapCreator is ERC2771Context, Secp256k1 { // TODO: this will FAIL for fee-on-transfer or rebasing tokens if the token // transfer reverts (i.e. if this contract does not contain _swap.value tokens), // exposing Bob's secret while giving him nothing - + // // potential solution: wrap tokens into shares instead of absolute values // swap.value would then contain the share of the token IERC20(_swap.asset).transfer(_swap.claimer, _swap.value); @@ -211,7 +211,7 @@ contract SwapCreator is ERC2771Context, Secp256k1 { // TODO: this will FAIL for fee-on-transfer or rebasing tokens if the token // transfer reverts (i.e. if this contract does not contain _swap.value tokens), // exposing Bob's secret while giving him nothing - + // // potential solution: wrap tokens into shares instead of absolute values // swap.value would then contain the share of the token IERC20(_swap.asset).transfer(_swap.claimer, _swap.value - fee); @@ -250,7 +250,7 @@ contract SwapCreator is ERC2771Context, Secp256k1 { verifySecret(_s, _swap.pubKeyRefund); emit Refunded(swapID, _s); - // send asset back to owner==caller (Alice) + // send asset back to swap owner swaps[swapID] = Stage.COMPLETED; if (_swap.asset == address(0)) { _swap.owner.transfer(_swap.value); diff --git a/ethereum/contracts/TestERC20.sol b/ethereum/contracts/TestERC20.sol index 940f0f3b..87f23336 100644 --- a/ethereum/contracts/TestERC20.sol +++ b/ethereum/contracts/TestERC20.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0 .0; +pragma solidity ^0.8.0; import {ERC20} from "./ERC20.sol"; diff --git a/ethereum/erc20_mock.go b/ethereum/erc20_mock.go index f94ddc6d..a0085aef 100644 --- a/ethereum/erc20_mock.go +++ b/ethereum/erc20_mock.go @@ -32,7 +32,7 @@ var ( // TestERC20MetaData contains all meta data concerning the TestERC20 contract. var TestERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"numDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"initialAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveInternal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferInternal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040526040516200217238038062002172833981810160405281019062000029919062000471565b848481600390816200003c919062000778565b5080600490816200004e919062000778565b50505082600560006101000a81548160ff021916908360ff1602179055506200007e82826200008960201b60201c565b50505050506200097a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f290620008c0565b60405180910390fd5b6200010f60008383620001f660201b60201c565b806002600082825462000123919062000911565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d691906200095d565b60405180910390a3620001f260008383620001fb60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000269826200021e565b810181811067ffffffffffffffff821117156200028b576200028a6200022f565b5b80604052505050565b6000620002a062000200565b9050620002ae82826200025e565b919050565b600067ffffffffffffffff821115620002d157620002d06200022f565b5b620002dc826200021e565b9050602081019050919050565b60005b8381101562000309578082015181840152602081019050620002ec565b60008484015250505050565b60006200032c6200032684620002b3565b62000294565b9050828152602081018484840111156200034b576200034a62000219565b5b62000358848285620002e9565b509392505050565b600082601f83011262000378576200037762000214565b5b81516200038a84826020860162000315565b91505092915050565b600060ff82169050919050565b620003ab8162000393565b8114620003b757600080fd5b50565b600081519050620003cb81620003a0565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003fe82620003d1565b9050919050565b6200041081620003f1565b81146200041c57600080fd5b50565b600081519050620004308162000405565b92915050565b6000819050919050565b6200044b8162000436565b81146200045757600080fd5b50565b6000815190506200046b8162000440565b92915050565b600080600080600060a0868803121562000490576200048f6200020a565b5b600086015167ffffffffffffffff811115620004b157620004b06200020f565b5b620004bf8882890162000360565b955050602086015167ffffffffffffffff811115620004e357620004e26200020f565b5b620004f18882890162000360565b94505060406200050488828901620003ba565b935050606062000517888289016200041f565b92505060806200052a888289016200045a565b9150509295509295909350565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200058a57607f821691505b602082108103620005a0576200059f62000542565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200060a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005cb565b620006168683620005cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000659620006536200064d8462000436565b6200062e565b62000436565b9050919050565b6000819050919050565b620006758362000638565b6200068d620006848262000660565b848454620005d8565b825550505050565b600090565b620006a462000695565b620006b18184846200066a565b505050565b5b81811015620006d957620006cd6000826200069a565b600181019050620006b7565b5050565b601f8211156200072857620006f281620005a6565b620006fd84620005bb565b810160208510156200070d578190505b620007256200071c85620005bb565b830182620006b6565b50505b505050565b600082821c905092915050565b60006200074d600019846008026200072d565b1980831691505092915050565b60006200076883836200073a565b9150826002028217905092915050565b620007838262000537565b67ffffffffffffffff8111156200079f576200079e6200022f565b5b620007ab825462000571565b620007b8828285620006dd565b600060209050601f831160018114620007f05760008415620007db578287015190505b620007e785826200075a565b86555062000857565b601f1984166200080086620005a6565b60005b828110156200082a5784890151825560018201915060208501945060208101905062000803565b868310156200084a578489015162000846601f8916826200073a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008a8601f836200085f565b9150620008b58262000870565b602082019050919050565b60006020820190508181036000830152620008db8162000899565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200091e8262000436565b91506200092b8362000436565b9250828201905080821115620009465762000945620008e2565b5b92915050565b620009578162000436565b82525050565b60006020820190506200097460008301846200094c565b92915050565b6117e8806200098a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610286578063a457c2d7146102a2578063a9059cbb146102d2578063dd62ed3e14610302576100f5565b806340c10f191461020057806356189cb41461021c57806370a082311461023857806395d89b4114610268576100f5565b8063222f5be0116100d3578063222f5be01461016657806323b872dd14610182578063313ce567146101b257806339509351146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610332565b60405161010f9190610f35565b60405180910390f35b610132600480360381019061012d9190610ff0565b6103c4565b60405161013f919061104b565b60405180910390f35b6101506103e7565b60405161015d9190611075565b60405180910390f35b610180600480360381019061017b9190611090565b6103f1565b005b61019c60048036038101906101979190611090565b610401565b6040516101a9919061104b565b60405180910390f35b6101ba610430565b6040516101c791906110ff565b60405180910390f35b6101ea60048036038101906101e59190610ff0565b610447565b6040516101f7919061104b565b60405180910390f35b61021a60048036038101906102159190610ff0565b61047e565b005b61023660048036038101906102319190611090565b61048c565b005b610252600480360381019061024d919061111a565b61049c565b60405161025f9190611075565b60405180910390f35b6102706104e4565b60405161027d9190610f35565b60405180910390f35b6102a0600480360381019061029b9190610ff0565b610576565b005b6102bc60048036038101906102b79190610ff0565b610584565b6040516102c9919061104b565b60405180910390f35b6102ec60048036038101906102e79190610ff0565b6105fb565b6040516102f9919061104b565b60405180910390f35b61031c60048036038101906103179190611147565b61061e565b6040516103299190611075565b60405180910390f35b606060038054610341906111b6565b80601f016020809104026020016040519081016040528092919081815260200182805461036d906111b6565b80156103ba5780601f1061038f576101008083540402835291602001916103ba565b820191906000526020600020905b81548152906001019060200180831161039d57829003601f168201915b5050505050905090565b6000806103cf6106a5565b90506103dc8185856106ad565b600191505092915050565b6000600254905090565b6103fc838383610876565b505050565b60008061040c6106a5565b9050610419858285610aec565b610424858585610876565b60019150509392505050565b6000600560009054906101000a900460ff16905090565b6000806104526106a5565b9050610473818585610464858961061e565b61046e9190611216565b6106ad565b600191505092915050565b6104888282610b78565b5050565b6104978383836106ad565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546104f3906111b6565b80601f016020809104026020016040519081016040528092919081815260200182805461051f906111b6565b801561056c5780601f106105415761010080835404028352916020019161056c565b820191906000526020600020905b81548152906001019060200180831161054f57829003601f168201915b5050505050905090565b6105808282610cce565b5050565b60008061058f6106a5565b9050600061059d828661061e565b9050838110156105e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d9906112bc565b60405180910390fd5b6105ef82868684036106ad565b60019250505092915050565b6000806106066106a5565b9050610613818585610876565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361071c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107139061134e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361078b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610782906113e0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108699190611075565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611472565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90611504565b60405180910390fd5b61095f838383610e9b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90611596565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ad39190611075565b60405180910390a3610ae6848484610ea0565b50505050565b6000610af8848461061e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b725781811015610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90611602565b60405180910390fd5b610b7184848484036106ad565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde9061166e565b60405180910390fd5b610bf360008383610e9b565b8060026000828254610c059190611216565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cb69190611075565b60405180910390a3610cca60008383610ea0565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490611700565b60405180910390fd5b610d4982600083610e9b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc690611792565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e829190611075565b60405180910390a3610e9683600084610ea0565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610edf578082015181840152602081019050610ec4565b60008484015250505050565b6000601f19601f8301169050919050565b6000610f0782610ea5565b610f118185610eb0565b9350610f21818560208601610ec1565b610f2a81610eeb565b840191505092915050565b60006020820190508181036000830152610f4f8184610efc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f8782610f5c565b9050919050565b610f9781610f7c565b8114610fa257600080fd5b50565b600081359050610fb481610f8e565b92915050565b6000819050919050565b610fcd81610fba565b8114610fd857600080fd5b50565b600081359050610fea81610fc4565b92915050565b6000806040838503121561100757611006610f57565b5b600061101585828601610fa5565b925050602061102685828601610fdb565b9150509250929050565b60008115159050919050565b61104581611030565b82525050565b6000602082019050611060600083018461103c565b92915050565b61106f81610fba565b82525050565b600060208201905061108a6000830184611066565b92915050565b6000806000606084860312156110a9576110a8610f57565b5b60006110b786828701610fa5565b93505060206110c886828701610fa5565b92505060406110d986828701610fdb565b9150509250925092565b600060ff82169050919050565b6110f9816110e3565b82525050565b600060208201905061111460008301846110f0565b92915050565b6000602082840312156111305761112f610f57565b5b600061113e84828501610fa5565b91505092915050565b6000806040838503121561115e5761115d610f57565b5b600061116c85828601610fa5565b925050602061117d85828601610fa5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111ce57607f821691505b6020821081036111e1576111e0611187565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061122182610fba565b915061122c83610fba565b9250828201905080821115611244576112436111e7565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006112a6602583610eb0565b91506112b18261124a565b604082019050919050565b600060208201905081810360008301526112d581611299565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611338602483610eb0565b9150611343826112dc565b604082019050919050565b600060208201905081810360008301526113678161132b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006113ca602283610eb0565b91506113d58261136e565b604082019050919050565b600060208201905081810360008301526113f9816113bd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061145c602583610eb0565b915061146782611400565b604082019050919050565b6000602082019050818103600083015261148b8161144f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114ee602383610eb0565b91506114f982611492565b604082019050919050565b6000602082019050818103600083015261151d816114e1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611580602683610eb0565b915061158b82611524565b604082019050919050565b600060208201905081810360008301526115af81611573565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006115ec601d83610eb0565b91506115f7826115b6565b602082019050919050565b6000602082019050818103600083015261161b816115df565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611658601f83610eb0565b915061166382611622565b602082019050919050565b600060208201905081810360008301526116878161164b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006116ea602183610eb0565b91506116f58261168e565b604082019050919050565b60006020820190508181036000830152611719816116dd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061177c602283610eb0565b915061178782611720565b604082019050919050565b600060208201905081810360008301526117ab8161176f565b905091905056fea2646970667358221220d847259da745b14a2cb38e99ac01aa779409e4941ebb7e8183b70a34d55ba81464736f6c63430008130033", + Bin: "0x60806040526040516200217238038062002172833981810160405281019062000029919062000471565b848481600390816200003c919062000778565b5080600490816200004e919062000778565b50505082600560006101000a81548160ff021916908360ff1602179055506200007e82826200008960201b60201c565b50505050506200097a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f290620008c0565b60405180910390fd5b6200010f60008383620001f660201b60201c565b806002600082825462000123919062000911565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d691906200095d565b60405180910390a3620001f260008383620001fb60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000269826200021e565b810181811067ffffffffffffffff821117156200028b576200028a6200022f565b5b80604052505050565b6000620002a062000200565b9050620002ae82826200025e565b919050565b600067ffffffffffffffff821115620002d157620002d06200022f565b5b620002dc826200021e565b9050602081019050919050565b60005b8381101562000309578082015181840152602081019050620002ec565b60008484015250505050565b60006200032c6200032684620002b3565b62000294565b9050828152602081018484840111156200034b576200034a62000219565b5b62000358848285620002e9565b509392505050565b600082601f83011262000378576200037762000214565b5b81516200038a84826020860162000315565b91505092915050565b600060ff82169050919050565b620003ab8162000393565b8114620003b757600080fd5b50565b600081519050620003cb81620003a0565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003fe82620003d1565b9050919050565b6200041081620003f1565b81146200041c57600080fd5b50565b600081519050620004308162000405565b92915050565b6000819050919050565b6200044b8162000436565b81146200045757600080fd5b50565b6000815190506200046b8162000440565b92915050565b600080600080600060a0868803121562000490576200048f6200020a565b5b600086015167ffffffffffffffff811115620004b157620004b06200020f565b5b620004bf8882890162000360565b955050602086015167ffffffffffffffff811115620004e357620004e26200020f565b5b620004f18882890162000360565b94505060406200050488828901620003ba565b935050606062000517888289016200041f565b92505060806200052a888289016200045a565b9150509295509295909350565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200058a57607f821691505b602082108103620005a0576200059f62000542565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200060a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005cb565b620006168683620005cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000659620006536200064d8462000436565b6200062e565b62000436565b9050919050565b6000819050919050565b620006758362000638565b6200068d620006848262000660565b848454620005d8565b825550505050565b600090565b620006a462000695565b620006b18184846200066a565b505050565b5b81811015620006d957620006cd6000826200069a565b600181019050620006b7565b5050565b601f8211156200072857620006f281620005a6565b620006fd84620005bb565b810160208510156200070d578190505b620007256200071c85620005bb565b830182620006b6565b50505b505050565b600082821c905092915050565b60006200074d600019846008026200072d565b1980831691505092915050565b60006200076883836200073a565b9150826002028217905092915050565b620007838262000537565b67ffffffffffffffff8111156200079f576200079e6200022f565b5b620007ab825462000571565b620007b8828285620006dd565b600060209050601f831160018114620007f05760008415620007db578287015190505b620007e785826200075a565b86555062000857565b601f1984166200080086620005a6565b60005b828110156200082a5784890151825560018201915060208501945060208101905062000803565b868310156200084a578489015162000846601f8916826200073a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008a8601f836200085f565b9150620008b58262000870565b602082019050919050565b60006020820190508181036000830152620008db8162000899565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200091e8262000436565b91506200092b8362000436565b9250828201905080821115620009465762000945620008e2565b5b92915050565b620009578162000436565b82525050565b60006020820190506200097460008301846200094c565b92915050565b6117e8806200098a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610286578063a457c2d7146102a2578063a9059cbb146102d2578063dd62ed3e14610302576100f5565b806340c10f191461020057806356189cb41461021c57806370a082311461023857806395d89b4114610268576100f5565b8063222f5be0116100d3578063222f5be01461016657806323b872dd14610182578063313ce567146101b257806339509351146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610332565b60405161010f9190610f35565b60405180910390f35b610132600480360381019061012d9190610ff0565b6103c4565b60405161013f919061104b565b60405180910390f35b6101506103e7565b60405161015d9190611075565b60405180910390f35b610180600480360381019061017b9190611090565b6103f1565b005b61019c60048036038101906101979190611090565b610401565b6040516101a9919061104b565b60405180910390f35b6101ba610430565b6040516101c791906110ff565b60405180910390f35b6101ea60048036038101906101e59190610ff0565b610447565b6040516101f7919061104b565b60405180910390f35b61021a60048036038101906102159190610ff0565b61047e565b005b61023660048036038101906102319190611090565b61048c565b005b610252600480360381019061024d919061111a565b61049c565b60405161025f9190611075565b60405180910390f35b6102706104e4565b60405161027d9190610f35565b60405180910390f35b6102a0600480360381019061029b9190610ff0565b610576565b005b6102bc60048036038101906102b79190610ff0565b610584565b6040516102c9919061104b565b60405180910390f35b6102ec60048036038101906102e79190610ff0565b6105fb565b6040516102f9919061104b565b60405180910390f35b61031c60048036038101906103179190611147565b61061e565b6040516103299190611075565b60405180910390f35b606060038054610341906111b6565b80601f016020809104026020016040519081016040528092919081815260200182805461036d906111b6565b80156103ba5780601f1061038f576101008083540402835291602001916103ba565b820191906000526020600020905b81548152906001019060200180831161039d57829003601f168201915b5050505050905090565b6000806103cf6106a5565b90506103dc8185856106ad565b600191505092915050565b6000600254905090565b6103fc838383610876565b505050565b60008061040c6106a5565b9050610419858285610aec565b610424858585610876565b60019150509392505050565b6000600560009054906101000a900460ff16905090565b6000806104526106a5565b9050610473818585610464858961061e565b61046e9190611216565b6106ad565b600191505092915050565b6104888282610b78565b5050565b6104978383836106ad565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546104f3906111b6565b80601f016020809104026020016040519081016040528092919081815260200182805461051f906111b6565b801561056c5780601f106105415761010080835404028352916020019161056c565b820191906000526020600020905b81548152906001019060200180831161054f57829003601f168201915b5050505050905090565b6105808282610cce565b5050565b60008061058f6106a5565b9050600061059d828661061e565b9050838110156105e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d9906112bc565b60405180910390fd5b6105ef82868684036106ad565b60019250505092915050565b6000806106066106a5565b9050610613818585610876565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361071c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107139061134e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361078b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610782906113e0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108699190611075565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611472565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90611504565b60405180910390fd5b61095f838383610e9b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90611596565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ad39190611075565b60405180910390a3610ae6848484610ea0565b50505050565b6000610af8848461061e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b725781811015610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90611602565b60405180910390fd5b610b7184848484036106ad565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde9061166e565b60405180910390fd5b610bf360008383610e9b565b8060026000828254610c059190611216565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cb69190611075565b60405180910390a3610cca60008383610ea0565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490611700565b60405180910390fd5b610d4982600083610e9b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc690611792565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e829190611075565b60405180910390a3610e9683600084610ea0565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610edf578082015181840152602081019050610ec4565b60008484015250505050565b6000601f19601f8301169050919050565b6000610f0782610ea5565b610f118185610eb0565b9350610f21818560208601610ec1565b610f2a81610eeb565b840191505092915050565b60006020820190508181036000830152610f4f8184610efc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f8782610f5c565b9050919050565b610f9781610f7c565b8114610fa257600080fd5b50565b600081359050610fb481610f8e565b92915050565b6000819050919050565b610fcd81610fba565b8114610fd857600080fd5b50565b600081359050610fea81610fc4565b92915050565b6000806040838503121561100757611006610f57565b5b600061101585828601610fa5565b925050602061102685828601610fdb565b9150509250929050565b60008115159050919050565b61104581611030565b82525050565b6000602082019050611060600083018461103c565b92915050565b61106f81610fba565b82525050565b600060208201905061108a6000830184611066565b92915050565b6000806000606084860312156110a9576110a8610f57565b5b60006110b786828701610fa5565b93505060206110c886828701610fa5565b92505060406110d986828701610fdb565b9150509250925092565b600060ff82169050919050565b6110f9816110e3565b82525050565b600060208201905061111460008301846110f0565b92915050565b6000602082840312156111305761112f610f57565b5b600061113e84828501610fa5565b91505092915050565b6000806040838503121561115e5761115d610f57565b5b600061116c85828601610fa5565b925050602061117d85828601610fa5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111ce57607f821691505b6020821081036111e1576111e0611187565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061122182610fba565b915061122c83610fba565b9250828201905080821115611244576112436111e7565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006112a6602583610eb0565b91506112b18261124a565b604082019050919050565b600060208201905081810360008301526112d581611299565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611338602483610eb0565b9150611343826112dc565b604082019050919050565b600060208201905081810360008301526113678161132b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006113ca602283610eb0565b91506113d58261136e565b604082019050919050565b600060208201905081810360008301526113f9816113bd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061145c602583610eb0565b915061146782611400565b604082019050919050565b6000602082019050818103600083015261148b8161144f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114ee602383610eb0565b91506114f982611492565b604082019050919050565b6000602082019050818103600083015261151d816114e1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611580602683610eb0565b915061158b82611524565b604082019050919050565b600060208201905081810360008301526115af81611573565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006115ec601d83610eb0565b91506115f7826115b6565b602082019050919050565b6000602082019050818103600083015261161b816115df565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611658601f83610eb0565b915061166382611622565b602082019050919050565b600060208201905081810360008301526116878161164b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006116ea602183610eb0565b91506116f58261168e565b604082019050919050565b60006020820190508181036000830152611719816116dd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061177c602283610eb0565b915061178782611720565b604082019050919050565b600060208201905081810360008301526117ab8161176f565b905091905056fea26469706673582212209d62306fdb6bd6aefa706dfb3c13b494b830ac3d9b65a4af071435a86f0d2c2d64736f6c63430008130033", } // TestERC20ABI is the input ABI used to generate the binding from. diff --git a/ethereum/swap_creator.go b/ethereum/swap_creator.go index 5b5d59c8..565db030 100644 --- a/ethereum/swap_creator.go +++ b/ethereum/swap_creator.go @@ -45,7 +45,7 @@ type SwapCreatorSwap struct { // SwapCreatorMetaData contains all meta data concerning the SwapCreator contract. var SwapCreatorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidClaimer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSecret\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSwap\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSwapKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTimeout\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotTimeToRefund\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySwapClaimer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySwapOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyTrustedForwarder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapNotPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooEarlyToClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooLateToClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValue\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"refundKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"New\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"}],\"name\":\"Ready\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"swapID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"Refunded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapCreator.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapCreator.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"claimRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"qKeccak\",\"type\":\"uint256\"}],\"name\":\"mulVerify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"addresspayable\",\"name\":\"_claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timeoutDuration0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeoutDuration1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"newSwap\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapCreator.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"refund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubKeyRefund\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeout0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeout1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"structSwapCreator.Swap\",\"name\":\"_swap\",\"type\":\"tuple\"}],\"name\":\"setReady\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"swaps\",\"outputs\":[{\"internalType\":\"enumSwapCreator.Stage\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001f1438038062001f148339818101604052810190620000379190620000de565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000110565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a68262000079565b9050919050565b620000b88162000099565b8114620000c457600080fd5b50565b600081519050620000d881620000ad565b92915050565b600060208284031215620000f757620000f662000074565b5b60006200010784828501620000c7565b91505092915050565b608051611de162000133600039600081816105c601526105ec0152611de16000f3fe6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063b32d1b4f1461016e578063c41e46cf146101ab578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad9190611610565b610241565b005b3480156100c057600080fd5b506100c96105c4565b6040516100d69190611661565b60405180910390f35b3480156100eb57600080fd5b506101066004803603810190610101919061167c565b6105e8565b60405161011391906116c4565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e9190611610565b610640565b005b34801561015157600080fd5b5061016c600480360381019061016791906116df565b610766565b005b34801561017a57600080fd5b5061019560048036038101906101909190611735565b6109ac565b6040516101a291906116c4565b60405180910390f35b6101c560048036038101906101c09190611775565b610ab1565b6040516101d2919061183a565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd9190611855565b610ec4565b60405161020f91906118f9565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a9190611914565b610ee4565b005b6000826040516020016102549190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff169050600060038111156102a4576102a3611882565b5b8160038111156102b7576102b6611882565b5b036102ee576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561030157610300611882565b5b81600381111561031457610313611882565b5b0361034b576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff16146103b4576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a00151421080156103f9575083608001514211806103f85750600260038111156103e3576103e2611882565b5b8160038111156103f6576103f5611882565b5b145b5b15610430576040517f65430c1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61043e838560600151611061565b82827e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156104a1576104a0611882565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361053257836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f1935050505015801561052c573d6000803e3d6000fd5b506105be565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610579929190611abf565b6020604051808303816000875af1158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190611b14565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b61064a82826110ab565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d657816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106d0573d6000803e3d6000fd5b50610762565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b815260040161071d929190611abf565b6020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611b14565b505b5050565b61076f336105e8565b6107a5576040517ffc5d4daa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107af83836110ab565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361088d57826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108159190611b70565b9081150290604051600060405180830381858888f19350505050158015610840573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610887573d6000803e3d6000fd5b506109a7565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c29190611b70565b6040518363ffffffff1660e01b81526004016108df929190611abf565b6020604051808303816000875af11580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190611b14565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610962929190611ba4565b6020604051808303816000875af1158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a59190611b14565b505b505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610a0857610a07611bcd565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610a4b9493929190611c8c565b6020604051602081039080840390855afa158015610a6d573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b6000808303610aec576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b5e57348314610b59576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610be0565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610b9b93929190611cd1565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611b14565b505b6000801b891480610bf357506000801b88145b15610c2a576040517f378c37da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f044bc28000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000861480610c9f5750600085145b15610cd6576040517f7fee1bc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018842610d349190611d08565b8152602001878942610d469190611d08565b610d509190611d08565b81526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152509050600081604051602001610d909190611a35565b60405160208183030381529060405280519060200120905060006003811115610dbc57610dbb611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610dee57610ded611882565b5b14610e25576040517f734530ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818c8c85608001518660a001518760c001518860e00151604051610e709796959493929190611d3c565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610eae57610ead611882565b5b0217905550809250505098975050505050505050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610ef79190611a35565b60405160208183030381529060405280519060200120905060016003811115610f2357610f22611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610f5557610f54611882565b5b14610f8c576040517f1fc1f6a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff0219169083600381111561102b5761102a611882565b5b0217905550807f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f60405160405180910390a25050565b6110718260001c8260001c6109ac565b6110a7576040517fabab6bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6000826040516020016110be9190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506000600381111561110e5761110d611882565b5b81600381111561112157611120611882565b5b03611158576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561116b5761116a611882565b5b81600381111561117e5761117d611882565b5b036111b5576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff166111d861134e565b73ffffffffffffffffffffffffffffffffffffffff1614611225576040517f68e2c81200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83608001514210801561125d57506002600381111561124757611246611882565b5b81600381111561125a57611259611882565b5b14155b15611294576040517fd71d60b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a0015142106112d1576040517f497df9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112df838560400151611061565b82827f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561134357611342611882565b5b021790555050505050565b6000611359336105e8565b1561136d57601436033560601c905061137c565b611375611380565b905061137d565b5b90565b600033905090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113e58261139c565b810181811067ffffffffffffffff82111715611404576114036113ad565b5b80604052505050565b6000611417611388565b905061142382826113dc565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061145382611428565b9050919050565b61146381611448565b811461146e57600080fd5b50565b6000813590506114808161145a565b92915050565b6000819050919050565b61149981611486565b81146114a457600080fd5b50565b6000813590506114b681611490565b92915050565b6000819050919050565b6114cf816114bc565b81146114da57600080fd5b50565b6000813590506114ec816114c6565b92915050565b60006114fd82611428565b9050919050565b61150d816114f2565b811461151857600080fd5b50565b60008135905061152a81611504565b92915050565b6000610120828403121561154757611546611397565b5b61155261012061140d565b9050600061156284828501611471565b600083015250602061157684828501611471565b602083015250604061158a848285016114a7565b604083015250606061159e848285016114a7565b60608301525060806115b2848285016114dd565b60808301525060a06115c6848285016114dd565b60a08301525060c06115da8482850161151b565b60c08301525060e06115ee848285016114dd565b60e083015250610100611603848285016114dd565b6101008301525092915050565b600080610140838503121561162857611627611392565b5b600061163685828601611530565b925050610120611648858286016114a7565b9150509250929050565b61165b816114f2565b82525050565b60006020820190506116766000830184611652565b92915050565b60006020828403121561169257611691611392565b5b60006116a08482850161151b565b91505092915050565b60008115159050919050565b6116be816116a9565b82525050565b60006020820190506116d960008301846116b5565b92915050565b600080600061016084860312156116f9576116f8611392565b5b600061170786828701611530565b935050610120611719868287016114a7565b92505061014061172b868287016114dd565b9150509250925092565b6000806040838503121561174c5761174b611392565b5b600061175a858286016114dd565b925050602061176b858286016114dd565b9150509250929050565b600080600080600080600080610100898b03121561179657611795611392565b5b60006117a48b828c016114a7565b98505060206117b58b828c016114a7565b97505060406117c68b828c01611471565b96505060606117d78b828c016114dd565b95505060806117e88b828c016114dd565b94505060a06117f98b828c0161151b565b93505060c061180a8b828c016114dd565b92505060e061181b8b828c016114dd565b9150509295985092959890939650565b61183481611486565b82525050565b600060208201905061184f600083018461182b565b92915050565b60006020828403121561186b5761186a611392565b5b6000611879848285016114a7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118c2576118c1611882565b5b50565b60008190506118d3826118b1565b919050565b60006118e3826118c5565b9050919050565b6118f3816118d8565b82525050565b600060208201905061190e60008301846118ea565b92915050565b6000610120828403121561192b5761192a611392565b5b600061193984828501611530565b91505092915050565b61194b81611448565b82525050565b61195a81611486565b82525050565b611969816114bc565b82525050565b611978816114f2565b82525050565b610120820160008201516119956000850182611942565b5060208201516119a86020850182611942565b5060408201516119bb6040850182611951565b5060608201516119ce6060850182611951565b5060808201516119e16080850182611960565b5060a08201516119f460a0850182611960565b5060c0820151611a0760c085018261196f565b5060e0820151611a1a60e0850182611960565b50610100820151611a2f610100850182611960565b50505050565b600061012082019050611a4b600083018461197e565b92915050565b6000819050919050565b6000611a76611a71611a6c84611428565b611a51565b611428565b9050919050565b6000611a8882611a5b565b9050919050565b6000611a9a82611a7d565b9050919050565b611aaa81611a8f565b82525050565b611ab9816114bc565b82525050565b6000604082019050611ad46000830185611aa1565b611ae16020830184611ab0565b9392505050565b611af1816116a9565b8114611afc57600080fd5b50565b600081519050611b0e81611ae8565b92915050565b600060208284031215611b2a57611b29611392565b5b6000611b3884828501611aff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b7b826114bc565b9150611b86836114bc565b9250828203905081811115611b9e57611b9d611b41565b5b92915050565b6000604082019050611bb96000830185611652565b611bc66020830184611ab0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b6000611c2e611c29611c2484611bfc565b611c06565b611486565b9050919050565b611c3e81611c13565b82525050565b6000819050919050565b600060ff82169050919050565b6000611c76611c71611c6c84611c44565b611a51565b611c4e565b9050919050565b611c8681611c5b565b82525050565b6000608082019050611ca16000830187611c35565b611cae6020830186611c7d565b611cbb604083018561182b565b611cc8606083018461182b565b95945050505050565b6000606082019050611ce66000830186611652565b611cf36020830185611652565b611d006040830184611ab0565b949350505050565b6000611d13826114bc565b9150611d1e836114bc565b9250828201905080821115611d3657611d35611b41565b5b92915050565b600060e082019050611d51600083018a61182b565b611d5e602083018961182b565b611d6b604083018861182b565b611d786060830187611ab0565b611d856080830186611ab0565b611d9260a0830185611652565b611d9f60c0830184611ab0565b9897505050505050505056fea26469706673582212208c63ee431b82b16cef4dde0eec375946c81052a6ac25b2e685ef84203b9a746264736f6c63430008130033", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001f1438038062001f148339818101604052810190620000379190620000de565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000110565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a68262000079565b9050919050565b620000b88162000099565b8114620000c457600080fd5b50565b600081519050620000d881620000ad565b92915050565b600060208284031215620000f757620000f662000074565b5b60006200010784828501620000c7565b91505092915050565b608051611de162000133600039600081816105c601526105ec0152611de16000f3fe6080604052600436106100865760003560e01c806373e4771c1161005957806373e4771c14610145578063b32d1b4f1461016e578063c41e46cf146101ab578063eb84e7f2146101db578063fcaf229c1461021857610086565b80631e6c5acc1461008b57806356c022bb146100b4578063572b6c05146100df5780635cb969161461011c575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad9190611610565b610241565b005b3480156100c057600080fd5b506100c96105c4565b6040516100d69190611661565b60405180910390f35b3480156100eb57600080fd5b506101066004803603810190610101919061167c565b6105e8565b60405161011391906116c4565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e9190611610565b610640565b005b34801561015157600080fd5b5061016c600480360381019061016791906116df565b610766565b005b34801561017a57600080fd5b5061019560048036038101906101909190611735565b6109ac565b6040516101a291906116c4565b60405180910390f35b6101c560048036038101906101c09190611775565b610ab1565b6040516101d2919061183a565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd9190611855565b610ec4565b60405161020f91906118f9565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a9190611914565b610ee4565b005b6000826040516020016102549190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff169050600060038111156102a4576102a3611882565b5b8160038111156102b7576102b6611882565b5b036102ee576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561030157610300611882565b5b81600381111561031457610313611882565b5b0361034b576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff16146103b4576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a00151421080156103f9575083608001514211806103f85750600260038111156103e3576103e2611882565b5b8160038111156103f6576103f5611882565b5b145b5b15610430576040517f65430c1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61043e838560600151611061565b82827e7c875846b687732a7579c19bb1dade66cd14e9f4f809565e2b2b5e76c72b4f60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff021916908360038111156104a1576104a0611882565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff160361053257836000015173ffffffffffffffffffffffffffffffffffffffff166108fc8560e001519081150290604051600060405180830381858888f1935050505015801561052c573d6000803e3d6000fd5b506105be565b8360c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85600001518660e001516040518363ffffffff1660e01b8152600401610579929190611abf565b6020604051808303816000875af1158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190611b14565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b61064a82826110ab565b600073ffffffffffffffffffffffffffffffffffffffff168260c0015173ffffffffffffffffffffffffffffffffffffffff16036106d657816020015173ffffffffffffffffffffffffffffffffffffffff166108fc8360e001519081150290604051600060405180830381858888f193505050501580156106d0573d6000803e3d6000fd5b50610762565b8160c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83602001518460e001516040518363ffffffff1660e01b815260040161071d929190611abf565b6020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611b14565b505b5050565b61076f336105e8565b6107a5576040517ffc5d4daa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107af83836110ab565b600073ffffffffffffffffffffffffffffffffffffffff168360c0015173ffffffffffffffffffffffffffffffffffffffff160361088d57826020015173ffffffffffffffffffffffffffffffffffffffff166108fc828560e001516108159190611b70565b9081150290604051600060405180830381858888f19350505050158015610840573d6000803e3d6000fd5b503273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610887573d6000803e3d6000fd5b506109a7565b8260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460200151838660e001516108c29190611b70565b6040518363ffffffff1660e01b81526004016108df929190611abf565b6020604051808303816000875af11580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190611b14565b508260c0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb32836040518363ffffffff1660e01b8152600401610962929190611ba4565b6020604051808303816000875af1158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a59190611b14565b505b505050565b60008060016000601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179860001b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414180610a0857610a07611bcd565b5b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798890960001b60405160008152602001604052604051610a4b9493929190611c8c565b6020604051602081039080840390855afa158015610a6d573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161491505092915050565b6000808303610aec576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b5e57348314610b59576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610be0565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610b9b93929190611cd1565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611b14565b505b6000801b891480610bf357506000801b88145b15610c2a576040517f378c37da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f044bc28000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000861480610c9f5750600085145b15610cd6576040517f7fee1bc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018842610d349190611d08565b8152602001878942610d469190611d08565b610d509190611d08565b81526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152509050600081604051602001610d909190611a35565b60405160208183030381529060405280519060200120905060006003811115610dbc57610dbb611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610dee57610ded611882565b5b14610e25576040517f734530ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f91446ce035ac29998b5473504609a5ef5e961005daba4630a1684b63be848f56818c8c85608001518660a001518760c001518860e00151604051610e709796959493929190611d3c565b60405180910390a1600160008083815260200190815260200160002060006101000a81548160ff02191690836003811115610eae57610ead611882565b5b0217905550809250505098975050505050505050565b60006020528060005260406000206000915054906101000a900460ff1681565b600081604051602001610ef79190611a35565b60405160208183030381529060405280519060200120905060016003811115610f2357610f22611882565b5b60008083815260200190815260200160002060009054906101000a900460ff166003811115610f5557610f54611882565b5b14610f8c576040517f1fc1f6a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f2919448600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008083815260200190815260200160002060006101000a81548160ff0219169083600381111561102b5761102a611882565b5b0217905550807f5fc23b25552757626e08b316cc2387ad1bc70ee1594af7204db4ce0c39f5d15f60405160405180910390a25050565b6110718260001c8260001c6109ac565b6110a7576040517fabab6bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6000826040516020016110be9190611a35565b604051602081830303815290604052805190602001209050600080600083815260200190815260200160002060009054906101000a900460ff1690506000600381111561110e5761110d611882565b5b81600381111561112157611120611882565b5b03611158576040517f1115766700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038081111561116b5761116a611882565b5b81600381111561117e5761117d611882565b5b036111b5576040517f066916a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020015173ffffffffffffffffffffffffffffffffffffffff166111d861134e565b73ffffffffffffffffffffffffffffffffffffffff1614611225576040517f68e2c81200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83608001514210801561125d57506002600381111561124757611246611882565b5b81600381111561125a57611259611882565b5b14155b15611294576040517fd71d60b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360a0015142106112d1576040517f497df9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112df838560400151611061565b82827f38d6042dbdae8e73a7f6afbabd3fbe0873f9f5ed3cd71294591c3908c2e65fee60405160405180910390a3600360008084815260200190815260200160002060006101000a81548160ff0219169083600381111561134357611342611882565b5b021790555050505050565b6000611359336105e8565b1561136d57601436033560601c905061137c565b611375611380565b905061137d565b5b90565b600033905090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113e58261139c565b810181811067ffffffffffffffff82111715611404576114036113ad565b5b80604052505050565b6000611417611388565b905061142382826113dc565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061145382611428565b9050919050565b61146381611448565b811461146e57600080fd5b50565b6000813590506114808161145a565b92915050565b6000819050919050565b61149981611486565b81146114a457600080fd5b50565b6000813590506114b681611490565b92915050565b6000819050919050565b6114cf816114bc565b81146114da57600080fd5b50565b6000813590506114ec816114c6565b92915050565b60006114fd82611428565b9050919050565b61150d816114f2565b811461151857600080fd5b50565b60008135905061152a81611504565b92915050565b6000610120828403121561154757611546611397565b5b61155261012061140d565b9050600061156284828501611471565b600083015250602061157684828501611471565b602083015250604061158a848285016114a7565b604083015250606061159e848285016114a7565b60608301525060806115b2848285016114dd565b60808301525060a06115c6848285016114dd565b60a08301525060c06115da8482850161151b565b60c08301525060e06115ee848285016114dd565b60e083015250610100611603848285016114dd565b6101008301525092915050565b600080610140838503121561162857611627611392565b5b600061163685828601611530565b925050610120611648858286016114a7565b9150509250929050565b61165b816114f2565b82525050565b60006020820190506116766000830184611652565b92915050565b60006020828403121561169257611691611392565b5b60006116a08482850161151b565b91505092915050565b60008115159050919050565b6116be816116a9565b82525050565b60006020820190506116d960008301846116b5565b92915050565b600080600061016084860312156116f9576116f8611392565b5b600061170786828701611530565b935050610120611719868287016114a7565b92505061014061172b868287016114dd565b9150509250925092565b6000806040838503121561174c5761174b611392565b5b600061175a858286016114dd565b925050602061176b858286016114dd565b9150509250929050565b600080600080600080600080610100898b03121561179657611795611392565b5b60006117a48b828c016114a7565b98505060206117b58b828c016114a7565b97505060406117c68b828c01611471565b96505060606117d78b828c016114dd565b95505060806117e88b828c016114dd565b94505060a06117f98b828c0161151b565b93505060c061180a8b828c016114dd565b92505060e061181b8b828c016114dd565b9150509295985092959890939650565b61183481611486565b82525050565b600060208201905061184f600083018461182b565b92915050565b60006020828403121561186b5761186a611392565b5b6000611879848285016114a7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106118c2576118c1611882565b5b50565b60008190506118d3826118b1565b919050565b60006118e3826118c5565b9050919050565b6118f3816118d8565b82525050565b600060208201905061190e60008301846118ea565b92915050565b6000610120828403121561192b5761192a611392565b5b600061193984828501611530565b91505092915050565b61194b81611448565b82525050565b61195a81611486565b82525050565b611969816114bc565b82525050565b611978816114f2565b82525050565b610120820160008201516119956000850182611942565b5060208201516119a86020850182611942565b5060408201516119bb6040850182611951565b5060608201516119ce6060850182611951565b5060808201516119e16080850182611960565b5060a08201516119f460a0850182611960565b5060c0820151611a0760c085018261196f565b5060e0820151611a1a60e0850182611960565b50610100820151611a2f610100850182611960565b50505050565b600061012082019050611a4b600083018461197e565b92915050565b6000819050919050565b6000611a76611a71611a6c84611428565b611a51565b611428565b9050919050565b6000611a8882611a5b565b9050919050565b6000611a9a82611a7d565b9050919050565b611aaa81611a8f565b82525050565b611ab9816114bc565b82525050565b6000604082019050611ad46000830185611aa1565b611ae16020830184611ab0565b9392505050565b611af1816116a9565b8114611afc57600080fd5b50565b600081519050611b0e81611ae8565b92915050565b600060208284031215611b2a57611b29611392565b5b6000611b3884828501611aff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b7b826114bc565b9150611b86836114bc565b9250828203905081811115611b9e57611b9d611b41565b5b92915050565b6000604082019050611bb96000830185611652565b611bc66020830184611ab0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000819050919050565b60008160001b9050919050565b6000611c2e611c29611c2484611bfc565b611c06565b611486565b9050919050565b611c3e81611c13565b82525050565b6000819050919050565b600060ff82169050919050565b6000611c76611c71611c6c84611c44565b611a51565b611c4e565b9050919050565b611c8681611c5b565b82525050565b6000608082019050611ca16000830187611c35565b611cae6020830186611c7d565b611cbb604083018561182b565b611cc8606083018461182b565b95945050505050565b6000606082019050611ce66000830186611652565b611cf36020830185611652565b611d006040830184611ab0565b949350505050565b6000611d13826114bc565b9150611d1e836114bc565b9250828201905080821115611d3657611d35611b41565b5b92915050565b600060e082019050611d51600083018a61182b565b611d5e602083018961182b565b611d6b604083018861182b565b611d786060830187611ab0565b611d856080830186611ab0565b611d9260a0830185611652565b611d9f60c0830184611ab0565b9897505050505050505056fea264697066735822122084f522d05ed6af1060846f3e30d11805736fb4d34a12fcf1a991eced80ebd24a64736f6c63430008130033", } // SwapCreatorABI is the input ABI used to generate the binding from.