From 9d5b0f2c9c3b3f25026ae9a52e74f2892acc5173 Mon Sep 17 00:00:00 2001 From: Yoichi Hirai Date: Sat, 2 Mar 2019 12:54:52 +0100 Subject: [PATCH] Make deposit limits configurable at TokenNetowk deployment time. After some trial and error I believe that the best approach to accomodate the different use cases of TokenNetwork is to make it configurable at the deployment time, as opposed to providing multiple flavors or versions of the source code. --- CHANGELOG.md | 1 + .../contracts/raiden/TokenNetwork.sol | 20 ++-- .../contracts/raiden/TokenNetworkRegistry.sol | 10 +- .../test/TokenNetworkInternalsTest.sol | 12 +- raiden_contracts/data/contracts.json | 104 ++++++++++-------- raiden_contracts/data/gas.json | 24 ++-- .../data/source/raiden/TokenNetwork.sol | 20 ++-- .../source/raiden/TokenNetworkRegistry.sol | 10 +- .../source/test/TokenNetworkInternalsTest.sol | 12 +- .../tests/fixtures/token_network_fixtures.py | 32 +++++- .../tests/fixtures/token_network_registry.py | 4 + .../tests/property/test_tokennetwork.py | 4 + .../tests/test_contract_limits.py | 26 ++++- raiden_contracts/tests/test_print_gas.py | 8 ++ .../tests/test_token_network_registry.py | 49 +++++++-- 15 files changed, 244 insertions(+), 92 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc1d164dd..b3b248c57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ Documents changes that result in: ## Unreleased +- TokenNetwork's constructor takes two additional arguments `_channel_participant_deposit_limit` and `_token_network_deposit_limit` - TokenNetworkRegistry's constructor takes an additional argument `max_number_of_token_networks` - Removed flavors diff --git a/raiden_contracts/contracts/raiden/TokenNetwork.sol b/raiden_contracts/contracts/raiden/TokenNetwork.sol index 993972c87..50bb84b63 100644 --- a/raiden_contracts/contracts/raiden/TokenNetwork.sol +++ b/raiden_contracts/contracts/raiden/TokenNetwork.sol @@ -31,13 +31,10 @@ contract TokenNetwork is Utils { 115792089237316195423570985008687907853269984665640564039457584007913129639935 ); - // Red Eyes release deposit limits - // The combined deposit of one channel is limited to 0.15 ETH. - // So 0.075 ETH per participant. - uint256 constant public channel_participant_deposit_limit = 75000000000000000 wei; - // The total combined deposit of all channels across the whole network is - // limited to 250 ETH. - uint256 constant public token_network_deposit_limit = 250000000000000000000 wei; + // The deposit limit per channel per participant. + uint256 public channel_participant_deposit_limit; + // The total combined deposit of all channels across the whole network + uint256 public token_network_deposit_limit; // Global, monotonically increasing counter that keeps track of all the // opened channels in this contract @@ -214,7 +211,9 @@ contract TokenNetwork is Utils { uint256 _chain_id, uint256 _settlement_timeout_min, uint256 _settlement_timeout_max, - address _deprecation_executor + address _deprecation_executor, + uint256 _channel_participant_deposit_limit, + uint256 _token_network_deposit_limit ) public { @@ -226,6 +225,9 @@ contract TokenNetwork is Utils { require(_settlement_timeout_max > _settlement_timeout_min); require(contractExists(_token_address)); require(contractExists(_secret_registry)); + require(_channel_participant_deposit_limit > 0); + require(_token_network_deposit_limit > 0); + require(_token_network_deposit_limit >= _channel_participant_deposit_limit); token = Token(_token_address); @@ -238,6 +240,8 @@ contract TokenNetwork is Utils { require(token.totalSupply() > 0); deprecation_executor = _deprecation_executor; + channel_participant_deposit_limit = _channel_participant_deposit_limit; + token_network_deposit_limit = _token_network_deposit_limit; } function deprecate() isSafe onlyDeprecationExecutor public { diff --git a/raiden_contracts/contracts/raiden/TokenNetworkRegistry.sol b/raiden_contracts/contracts/raiden/TokenNetworkRegistry.sol index ca1c41491..650ca4b0c 100644 --- a/raiden_contracts/contracts/raiden/TokenNetworkRegistry.sol +++ b/raiden_contracts/contracts/raiden/TokenNetworkRegistry.sol @@ -60,7 +60,11 @@ contract TokenNetworkRegistry is Utils { /// `_token_address`. /// @param _token_address Ethereum address of an already deployed token, to /// be used in the new TokenNetwork contract. - function createERC20TokenNetwork(address _token_address) + function createERC20TokenNetwork( + address _token_address, + uint256 _channel_participant_deposit_limit, + uint256 _token_network_deposit_limit + ) canCreateTokenNetwork external returns (address token_network_address) @@ -79,7 +83,9 @@ contract TokenNetworkRegistry is Utils { chain_id, settlement_timeout_min, settlement_timeout_max, - deprecation_executor + deprecation_executor, + _channel_participant_deposit_limit, + _token_network_deposit_limit ); token_network_address = address(token_network); diff --git a/raiden_contracts/contracts/test/TokenNetworkInternalsTest.sol b/raiden_contracts/contracts/test/TokenNetworkInternalsTest.sol index a2a411aab..ae240c1d6 100644 --- a/raiden_contracts/contracts/test/TokenNetworkInternalsTest.sol +++ b/raiden_contracts/contracts/test/TokenNetworkInternalsTest.sol @@ -16,7 +16,9 @@ contract TokenNetworkInternalStorageTest is TokenNetwork { _chain_id, _settlement_timeout_min, _settlement_timeout_max, - msg.sender + msg.sender, + MAX_SAFE_UINT256, + MAX_SAFE_UINT256 ) public { @@ -152,7 +154,9 @@ contract TokenNetworkSignatureTest is TokenNetwork { _chain_id, _settlement_timeout_min, _settlement_timeout_max, - msg.sender + msg.sender, + MAX_SAFE_UINT256, + MAX_SAFE_UINT256 ) public { @@ -256,7 +260,9 @@ contract TokenNetworkUtilsTest is TokenNetwork { _chain_id, _settlement_timeout_min, _settlement_timeout_max, - msg.sender + msg.sender, + MAX_SAFE_UINT256, + MAX_SAFE_UINT256 ) public { diff --git a/raiden_contracts/data/contracts.json b/raiden_contracts/data/contracts.json index dde1de4e7..7e26cb987 100644 --- a/raiden_contracts/data/contracts.json +++ b/raiden_contracts/data/contracts.json @@ -1016,9 +1016,9 @@ "type": "event" } ], - "bin": "60806040523480156200001157600080fd5b5060405160608062001882833981018060405260608110156200003357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200009557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620000d257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200010f57600080fd5b62000129836200031c640100000000026401000000009004565b15156200013557600080fd5b6200014f826200031c640100000000026401000000009004565b15156200015b57600080fd5b62000175816200031c640100000000026401000000009004565b15156200018157600080fd5b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002c957600080fd5b505afa158015620002de573d6000803e3d6000fd5b505050506040513d6020811015620002f557600080fd5b81019080805190602001909291905050501115156200031357600080fd5b5050506200032f565b600080823b905060008111915050919050565b611543806200033f6000396000f3fe608060405234801561001057600080fd5b506004361061009a576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146101eb578063b32c65c814610235578063d3b6c080146102b8578063fc0c546a1461052a5761009a565b80630e7dfb731461009f578063637d89d4146101455780637709bc781461018f575b600080fd5b61012b600480360360808110156100b557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610574565b604051808215151515815260200191505060405180910390f35b61014d610a26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101d1600480360360208110156101a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a4c565b604051808215151515815260200191505060405180910390f35b6101f3610a5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61023d610a85565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027d578082015181840152602081019050610262565b50505050905090810190601f1680156102aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61052860048036036101408110156102cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561034a57600080fd5b82018360208201111561035c57600080fd5b8035906020019184600183028401116401000000008311171561037e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103e157600080fd5b8201836020820111156103f357600080fd5b8035906020019184600183028401116401000000008311171561041557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104a257600080fd5b8201836020820111156104b457600080fd5b803590602001918460018302840111640100000000831117156104d657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610abe565b005b610532610f75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b1580156106be57600080fd5b505afa1580156106d2573d6000803e3d6000fd5b505050506040513d60408110156106e857600080fd5b81019080805190602001909291908051906020019092919050505090508091505060048081111561071557fe5b81600481111561072157fe5b14151561072d57600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156107a457600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156108e957600080fd5b505af11580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b8101908080519060200190929190505050151561092f57600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d6020811015610ba657600080fd5b8101908080519060200190929190505050111515610bc357600080fd5b610bd2838c8c878c3388610f9a565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b505050506040513d6020811015610cd057600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610df2578082015181840152602081019050610dd7565b50505050905090810190601f168015610e1f5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e58578082015181840152602081019050610e3d565b50505050905090810190601f168015610e855780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561106e57600080fd5b505afa158015611082573d6000803e3d6000fd5b505050506040513d602081101561109857600080fd5b81019080805190602001909291905050509050600061115782888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b81019080805190602001909291905050508a8961133e565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561119357600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561122a57600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506113f78184611404565b9150509695505050505050565b60006041825114151561141657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561144657601b810190505b601b8160ff16148061145b5750601c8160ff16145b151561146657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114c3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561150b57600080fd5b8393505050509291505056fea165627a7a723058201e1cec7a6b17d6fc3b597637cb29e00d4a7bc916b287382145e97ee9431e2a6e0029", - "bin-runtime": "608060405234801561001057600080fd5b506004361061009a576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146101eb578063b32c65c814610235578063d3b6c080146102b8578063fc0c546a1461052a5761009a565b80630e7dfb731461009f578063637d89d4146101455780637709bc781461018f575b600080fd5b61012b600480360360808110156100b557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610574565b604051808215151515815260200191505060405180910390f35b61014d610a26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101d1600480360360208110156101a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a4c565b604051808215151515815260200191505060405180910390f35b6101f3610a5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61023d610a85565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027d578082015181840152602081019050610262565b50505050905090810190601f1680156102aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61052860048036036101408110156102cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561034a57600080fd5b82018360208201111561035c57600080fd5b8035906020019184600183028401116401000000008311171561037e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103e157600080fd5b8201836020820111156103f357600080fd5b8035906020019184600183028401116401000000008311171561041557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104a257600080fd5b8201836020820111156104b457600080fd5b803590602001918460018302840111640100000000831117156104d657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610abe565b005b610532610f75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b1580156106be57600080fd5b505afa1580156106d2573d6000803e3d6000fd5b505050506040513d60408110156106e857600080fd5b81019080805190602001909291908051906020019092919050505090508091505060048081111561071557fe5b81600481111561072157fe5b14151561072d57600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156107a457600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156108e957600080fd5b505af11580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b8101908080519060200190929190505050151561092f57600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d6020811015610ba657600080fd5b8101908080519060200190929190505050111515610bc357600080fd5b610bd2838c8c878c3388610f9a565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b505050506040513d6020811015610cd057600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610df2578082015181840152602081019050610dd7565b50505050905090810190601f168015610e1f5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e58578082015181840152602081019050610e3d565b50505050905090810190601f168015610e855780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561106e57600080fd5b505afa158015611082573d6000803e3d6000fd5b505050506040513d602081101561109857600080fd5b81019080805190602001909291905050509050600061115782888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b81019080805190602001909291905050508a8961133e565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561119357600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561122a57600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506113f78184611404565b9150509695505050505050565b60006041825114151561141657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561144657601b810190505b601b8160ff16148061145b5750601c8160ff16145b151561146657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114c3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561150b57600080fd5b8393505050509291505056fea165627a7a723058201e1cec7a6b17d6fc3b597637cb29e00d4a7bc916b287382145e97ee9431e2a6e0029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"constructor\":{\"params\":{\"_service_registry_address\":\"The address of the ServiceRegistry contract\",\"_token_address\":\"The address of the token to use for rewards\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"constructor\":\"Set the default values for the smart contract\",\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/services/MonitoringService.sol\":\"MonitoringService\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xd6a815ea4cc35ca8fbf9e64cae2d51bcad170cd242c3f6681d9c887d09e2b595\",\"urls\":[\"bzzr://61b2069b4a3ac87f37cf9f80db287817235e17f3833bd3dacbb95ef43353e5ce\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/services/MonitoringService.sol\":{\"keccak256\":\"0x51af79ff12ba662d8415d0e58eca59503bd79ea64179693676b57648bb96f76d\",\"urls\":[\"bzzr://042609abfb62911489036cc9176218788c0ee4240f1c57e3e603b9721837ea4e\"]},\"contracts/services/ServiceRegistry.sol\":{\"keccak256\":\"0x821d8cc33354ac07bf2feb2d587d9db0f3a7b31e2ca8af82c60ec59802c4f90f\",\"urls\":[\"bzzr://1dda015af95b7c9be37e0d5951fe26e63c85289fe4a06afe325022f06ff4f660\"]},\"contracts/services/UserDeposit.sol\":{\"keccak256\":\"0x65ecab137520e978ef33fc079faf1e5149e9b615abecdf939aed4dd38cfe8146\",\"urls\":[\"bzzr://89e9847c8cfa90ff6c104d08fd19d49557a3749cbce44aa40efa10a264fb37d7\"]}},\"version\":1}" + "bin": "60806040523480156200001157600080fd5b5060405160608062001882833981018060405260608110156200003357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200009557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620000d257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200010f57600080fd5b62000129836200031c640100000000026401000000009004565b15156200013557600080fd5b6200014f826200031c640100000000026401000000009004565b15156200015b57600080fd5b62000175816200031c640100000000026401000000009004565b15156200018157600080fd5b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002c957600080fd5b505afa158015620002de573d6000803e3d6000fd5b505050506040513d6020811015620002f557600080fd5b81019080805190602001909291905050501115156200031357600080fd5b5050506200032f565b600080823b905060008111915050919050565b611543806200033f6000396000f3fe608060405234801561001057600080fd5b506004361061009a576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146101eb578063b32c65c814610235578063d3b6c080146102b8578063fc0c546a1461052a5761009a565b80630e7dfb731461009f578063637d89d4146101455780637709bc781461018f575b600080fd5b61012b600480360360808110156100b557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610574565b604051808215151515815260200191505060405180910390f35b61014d610a26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101d1600480360360208110156101a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a4c565b604051808215151515815260200191505060405180910390f35b6101f3610a5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61023d610a85565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027d578082015181840152602081019050610262565b50505050905090810190601f1680156102aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61052860048036036101408110156102cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561034a57600080fd5b82018360208201111561035c57600080fd5b8035906020019184600183028401116401000000008311171561037e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103e157600080fd5b8201836020820111156103f357600080fd5b8035906020019184600183028401116401000000008311171561041557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104a257600080fd5b8201836020820111156104b457600080fd5b803590602001918460018302840111640100000000831117156104d657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610abe565b005b610532610f75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b1580156106be57600080fd5b505afa1580156106d2573d6000803e3d6000fd5b505050506040513d60408110156106e857600080fd5b81019080805190602001909291908051906020019092919050505090508091505060048081111561071557fe5b81600481111561072157fe5b14151561072d57600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156107a457600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156108e957600080fd5b505af11580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b8101908080519060200190929190505050151561092f57600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d6020811015610ba657600080fd5b8101908080519060200190929190505050111515610bc357600080fd5b610bd2838c8c878c3388610f9a565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b505050506040513d6020811015610cd057600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610df2578082015181840152602081019050610dd7565b50505050905090810190601f168015610e1f5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e58578082015181840152602081019050610e3d565b50505050905090810190601f168015610e855780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561106e57600080fd5b505afa158015611082573d6000803e3d6000fd5b505050506040513d602081101561109857600080fd5b81019080805190602001909291905050509050600061115782888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b81019080805190602001909291905050508a8961133e565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561119357600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561122a57600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506113f78184611404565b9150509695505050505050565b60006041825114151561141657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561144657601b810190505b601b8160ff16148061145b5750601c8160ff16145b151561146657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114c3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561150b57600080fd5b8393505050509291505056fea165627a7a7230582017a0a5e5a6f27661840cc46170f7d5635d3dbd59e26d409f777ecabcd9776ef00029", + "bin-runtime": "608060405234801561001057600080fd5b506004361061009a576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146101eb578063b32c65c814610235578063d3b6c080146102b8578063fc0c546a1461052a5761009a565b80630e7dfb731461009f578063637d89d4146101455780637709bc781461018f575b600080fd5b61012b600480360360808110156100b557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610574565b604051808215151515815260200191505060405180910390f35b61014d610a26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101d1600480360360208110156101a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a4c565b604051808215151515815260200191505060405180910390f35b6101f3610a5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61023d610a85565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027d578082015181840152602081019050610262565b50505050905090810190601f1680156102aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61052860048036036101408110156102cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561034a57600080fd5b82018360208201111561035c57600080fd5b8035906020019184600183028401116401000000008311171561037e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103e157600080fd5b8201836020820111156103f357600080fd5b8035906020019184600183028401116401000000008311171561041557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104a257600080fd5b8201836020820111156104b457600080fd5b803590602001918460018302840111640100000000831117156104d657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610abe565b005b610532610f75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b1580156106be57600080fd5b505afa1580156106d2573d6000803e3d6000fd5b505050506040513d60408110156106e857600080fd5b81019080805190602001909291908051906020019092919050505090508091505060048081111561071557fe5b81600481111561072157fe5b14151561072d57600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156107a457600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156108e957600080fd5b505af11580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b8101908080519060200190929190505050151561092f57600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d6020811015610ba657600080fd5b8101908080519060200190929190505050111515610bc357600080fd5b610bd2838c8c878c3388610f9a565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b505050506040513d6020811015610cd057600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610df2578082015181840152602081019050610dd7565b50505050905090810190601f168015610e1f5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e58578082015181840152602081019050610e3d565b50505050905090810190601f168015610e855780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561106e57600080fd5b505afa158015611082573d6000803e3d6000fd5b505050506040513d602081101561109857600080fd5b81019080805190602001909291905050509050600061115782888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b81019080805190602001909291905050508a8961133e565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561119357600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561122a57600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506113f78184611404565b9150509695505050505050565b60006041825114151561141657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561144657601b810190505b601b8160ff16148061145b5750601c8160ff16145b151561146657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114c3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561150b57600080fd5b8393505050509291505056fea165627a7a7230582017a0a5e5a6f27661840cc46170f7d5635d3dbd59e26d409f777ecabcd9776ef00029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"constructor\":{\"params\":{\"_service_registry_address\":\"The address of the ServiceRegistry contract\",\"_token_address\":\"The address of the token to use for rewards\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"constructor\":\"Set the default values for the smart contract\",\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/services/MonitoringService.sol\":\"MonitoringService\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe1aa470a48d5224a00781700a8f73742de9381972eb9e00a610c6df29d38069d\",\"urls\":[\"bzzr://6d12abf81b55d71ccb9751e2ce82f1ec21d254634def365a5947483142ad7c6f\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/services/MonitoringService.sol\":{\"keccak256\":\"0x51af79ff12ba662d8415d0e58eca59503bd79ea64179693676b57648bb96f76d\",\"urls\":[\"bzzr://042609abfb62911489036cc9176218788c0ee4240f1c57e3e603b9721837ea4e\"]},\"contracts/services/ServiceRegistry.sol\":{\"keccak256\":\"0x821d8cc33354ac07bf2feb2d587d9db0f3a7b31e2ca8af82c60ec59802c4f90f\",\"urls\":[\"bzzr://1dda015af95b7c9be37e0d5951fe26e63c85289fe4a06afe325022f06ff4f660\"]},\"contracts/services/UserDeposit.sol\":{\"keccak256\":\"0x65ecab137520e978ef33fc079faf1e5149e9b615abecdf939aed4dd38cfe8146\",\"urls\":[\"bzzr://89e9847c8cfa90ff6c104d08fd19d49557a3749cbce44aa40efa10a264fb37d7\"]}},\"version\":1}" }, "MonitoringServiceInternalsTest": { "abi": [ @@ -1314,9 +1314,9 @@ "type": "event" } ], - "bin": "60806040523480156200001157600080fd5b5060405160608062001a67833981018060405260608110156200003357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050828282600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200009857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620000d557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200011257600080fd5b6200012c8362000322640100000000026401000000009004565b15156200013857600080fd5b620001528262000322640100000000026401000000009004565b15156200015e57600080fd5b620001788162000322640100000000026401000000009004565b15156200018457600080fd5b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002cc57600080fd5b505afa158015620002e1573d6000803e3d6000fd5b505050506040513d6020811015620002f857600080fd5b81019080805190602001909291905050501115156200031657600080fd5b50505050505062000335565b600080823b905060008111915050919050565b61172280620003456000396000f3fe608060405234801561001057600080fd5b50600436106100b0576000357c010000000000000000000000000000000000000000000000000000000090048063a4b448e211610083578063a4b448e21461024b578063b32c65c81461039a578063d3b6c0801461041d578063dcf137671461068f578063fc0c546a146106d1576100b0565b80630e7dfb73146100b5578063637d89d41461015b5780637709bc78146101a557806381c6dac214610201575b600080fd5b610141600480360360808110156100cb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071b565b604051808215151515815260200191505060405180910390f35b610163610bcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e7600480360360208110156101bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf3565b604051808215151515815260200191505060405180910390f35b610209610c06565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610398600480360360e081101561026157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561031257600080fd5b82018360208201111561032457600080fd5b8035906020019184600183028401116401000000008311171561034657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c2c565b005b6103a2610c44565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103e25780820151818401526020810190506103c7565b50505050905090810190601f16801561040f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61068d600480360361014081101561043457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156104af57600080fd5b8201836020820111156104c157600080fd5b803590602001918460018302840111640100000000831117156104e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561054657600080fd5b82018360208201111561055857600080fd5b8035906020019184600183028401116401000000008311171561057a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c7d565b005b6106bb600480360360208110156106a557600080fd5b8101908080359060200190929190505050611134565b6040518082815260200191505060405180910390f35b6106d9611154565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561086557600080fd5b505afa158015610879573d6000803e3d6000fd5b505050506040513d604081101561088f57600080fd5b8101908080519060200190929190805190602001909291905050509050809150506004808111156108bc57fe5b8160048111156108c857fe5b1415156108d457600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561094b57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050506040513d6020811015610aba57600080fd5b81019080805190602001909291905050501515610ad657600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c3b87878787878787611179565b50505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d6020811015610d6557600080fd5b8101908080519060200190929190505050111515610d8257600080fd5b610d91838c8c878c3388611179565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610fb1578082015181840152602081019050610f96565b50505050905090810190601f168015610fde5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611017578082015181840152602081019050610ffc565b50505050905090810190601f1680156110445780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b600060036000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561124d57600080fd5b505afa158015611261573d6000803e3d6000fd5b505050506040513d602081101561127757600080fd5b81019080805190602001909291905050509050600061133682888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156112f457600080fd5b505afa158015611308573d6000803e3d6000fd5b505050506040513d602081101561131e57600080fd5b81019080805190602001909291905050508a8961151d565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561137257600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561140957600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506115d681846115e3565b9150509695505050505050565b6000604182511415156115f557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561162557601b810190505b601b8160ff16148061163a5750601c8160ff16145b151561164557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116a2573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156116ea57600080fd5b8393505050509291505056fea165627a7a72305820181967481fb7270b364c9637713034dc6fcf69538dd03c538cd603d326d189da0029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100b0576000357c010000000000000000000000000000000000000000000000000000000090048063a4b448e211610083578063a4b448e21461024b578063b32c65c81461039a578063d3b6c0801461041d578063dcf137671461068f578063fc0c546a146106d1576100b0565b80630e7dfb73146100b5578063637d89d41461015b5780637709bc78146101a557806381c6dac214610201575b600080fd5b610141600480360360808110156100cb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071b565b604051808215151515815260200191505060405180910390f35b610163610bcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e7600480360360208110156101bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf3565b604051808215151515815260200191505060405180910390f35b610209610c06565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610398600480360360e081101561026157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561031257600080fd5b82018360208201111561032457600080fd5b8035906020019184600183028401116401000000008311171561034657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c2c565b005b6103a2610c44565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103e25780820151818401526020810190506103c7565b50505050905090810190601f16801561040f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61068d600480360361014081101561043457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156104af57600080fd5b8201836020820111156104c157600080fd5b803590602001918460018302840111640100000000831117156104e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561054657600080fd5b82018360208201111561055857600080fd5b8035906020019184600183028401116401000000008311171561057a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c7d565b005b6106bb600480360360208110156106a557600080fd5b8101908080359060200190929190505050611134565b6040518082815260200191505060405180910390f35b6106d9611154565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561086557600080fd5b505afa158015610879573d6000803e3d6000fd5b505050506040513d604081101561088f57600080fd5b8101908080519060200190929190805190602001909291905050509050809150506004808111156108bc57fe5b8160048111156108c857fe5b1415156108d457600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561094b57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050506040513d6020811015610aba57600080fd5b81019080805190602001909291905050501515610ad657600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c3b87878787878787611179565b50505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d6020811015610d6557600080fd5b8101908080519060200190929190505050111515610d8257600080fd5b610d91838c8c878c3388611179565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610fb1578082015181840152602081019050610f96565b50505050905090810190601f168015610fde5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611017578082015181840152602081019050610ffc565b50505050905090810190601f1680156110445780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b600060036000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561124d57600080fd5b505afa158015611261573d6000803e3d6000fd5b505050506040513d602081101561127757600080fd5b81019080805190602001909291905050509050600061133682888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156112f457600080fd5b505afa158015611308573d6000803e3d6000fd5b505050506040513d602081101561131e57600080fd5b81019080805190602001909291905050508a8961151d565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561137257600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561140957600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506115d681846115e3565b9150509695505050505050565b6000604182511415156115f557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561162557601b810190505b601b8160ff16148061163a5750601c8160ff16145b151561164557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116a2573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156116ea57600080fd5b8393505050509291505056fea165627a7a72305820181967481fb7270b364c9637713034dc6fcf69538dd03c538cd603d326d189da0029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"updateRewardPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"rewardNonce\",\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/MonitoringServiceInternalsTest.sol\":\"MonitoringServiceInternalsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xd6a815ea4cc35ca8fbf9e64cae2d51bcad170cd242c3f6681d9c887d09e2b595\",\"urls\":[\"bzzr://61b2069b4a3ac87f37cf9f80db287817235e17f3833bd3dacbb95ef43353e5ce\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/services/MonitoringService.sol\":{\"keccak256\":\"0x51af79ff12ba662d8415d0e58eca59503bd79ea64179693676b57648bb96f76d\",\"urls\":[\"bzzr://042609abfb62911489036cc9176218788c0ee4240f1c57e3e603b9721837ea4e\"]},\"contracts/services/ServiceRegistry.sol\":{\"keccak256\":\"0x821d8cc33354ac07bf2feb2d587d9db0f3a7b31e2ca8af82c60ec59802c4f90f\",\"urls\":[\"bzzr://1dda015af95b7c9be37e0d5951fe26e63c85289fe4a06afe325022f06ff4f660\"]},\"contracts/services/UserDeposit.sol\":{\"keccak256\":\"0x65ecab137520e978ef33fc079faf1e5149e9b615abecdf939aed4dd38cfe8146\",\"urls\":[\"bzzr://89e9847c8cfa90ff6c104d08fd19d49557a3749cbce44aa40efa10a264fb37d7\"]},\"contracts/test/MonitoringServiceInternalsTest.sol\":{\"keccak256\":\"0x5303b36208665c963a4253c7f78729ad3250f6000d4a5f0f80256d9155fc3907\",\"urls\":[\"bzzr://7646be7a49181c05668a92d84f8c6a40e5005dbc0e74a50df9e5935a0dbb8bfd\"]}},\"version\":1}" + "bin": "60806040523480156200001157600080fd5b5060405160608062001a67833981018060405260608110156200003357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050828282600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200009857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620000d557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200011257600080fd5b6200012c8362000322640100000000026401000000009004565b15156200013857600080fd5b620001528262000322640100000000026401000000009004565b15156200015e57600080fd5b620001788162000322640100000000026401000000009004565b15156200018457600080fd5b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002cc57600080fd5b505afa158015620002e1573d6000803e3d6000fd5b505050506040513d6020811015620002f857600080fd5b81019080805190602001909291905050501115156200031657600080fd5b50505050505062000335565b600080823b905060008111915050919050565b61172280620003456000396000f3fe608060405234801561001057600080fd5b50600436106100b0576000357c010000000000000000000000000000000000000000000000000000000090048063a4b448e211610083578063a4b448e21461024b578063b32c65c81461039a578063d3b6c0801461041d578063dcf137671461068f578063fc0c546a146106d1576100b0565b80630e7dfb73146100b5578063637d89d41461015b5780637709bc78146101a557806381c6dac214610201575b600080fd5b610141600480360360808110156100cb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071b565b604051808215151515815260200191505060405180910390f35b610163610bcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e7600480360360208110156101bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf3565b604051808215151515815260200191505060405180910390f35b610209610c06565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610398600480360360e081101561026157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561031257600080fd5b82018360208201111561032457600080fd5b8035906020019184600183028401116401000000008311171561034657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c2c565b005b6103a2610c44565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103e25780820151818401526020810190506103c7565b50505050905090810190601f16801561040f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61068d600480360361014081101561043457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156104af57600080fd5b8201836020820111156104c157600080fd5b803590602001918460018302840111640100000000831117156104e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561054657600080fd5b82018360208201111561055857600080fd5b8035906020019184600183028401116401000000008311171561057a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c7d565b005b6106bb600480360360208110156106a557600080fd5b8101908080359060200190929190505050611134565b6040518082815260200191505060405180910390f35b6106d9611154565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561086557600080fd5b505afa158015610879573d6000803e3d6000fd5b505050506040513d604081101561088f57600080fd5b8101908080519060200190929190805190602001909291905050509050809150506004808111156108bc57fe5b8160048111156108c857fe5b1415156108d457600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561094b57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050506040513d6020811015610aba57600080fd5b81019080805190602001909291905050501515610ad657600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c3b87878787878787611179565b50505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d6020811015610d6557600080fd5b8101908080519060200190929190505050111515610d8257600080fd5b610d91838c8c878c3388611179565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610fb1578082015181840152602081019050610f96565b50505050905090810190601f168015610fde5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611017578082015181840152602081019050610ffc565b50505050905090810190601f1680156110445780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b600060036000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561124d57600080fd5b505afa158015611261573d6000803e3d6000fd5b505050506040513d602081101561127757600080fd5b81019080805190602001909291905050509050600061133682888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156112f457600080fd5b505afa158015611308573d6000803e3d6000fd5b505050506040513d602081101561131e57600080fd5b81019080805190602001909291905050508a8961151d565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561137257600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561140957600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506115d681846115e3565b9150509695505050505050565b6000604182511415156115f557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561162557601b810190505b601b8160ff16148061163a5750601c8160ff16145b151561164557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116a2573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156116ea57600080fd5b8393505050509291505056fea165627a7a723058207e1168f7004ae9a06711c4820c0c513d65f1345cbce64f3dec618c84f20911780029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106100b0576000357c010000000000000000000000000000000000000000000000000000000090048063a4b448e211610083578063a4b448e21461024b578063b32c65c81461039a578063d3b6c0801461041d578063dcf137671461068f578063fc0c546a146106d1576100b0565b80630e7dfb73146100b5578063637d89d41461015b5780637709bc78146101a557806381c6dac214610201575b600080fd5b610141600480360360808110156100cb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071b565b604051808215151515815260200191505060405180910390f35b610163610bcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e7600480360360208110156101bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf3565b604051808215151515815260200191505060405180910390f35b610209610c06565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610398600480360360e081101561026157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561031257600080fd5b82018360208201111561032457600080fd5b8035906020019184600183028401116401000000008311171561034657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c2c565b005b6103a2610c44565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103e25780820151818401526020810190506103c7565b50505050905090810190601f16801561040f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61068d600480360361014081101561043457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156104af57600080fd5b8201836020820111156104c157600080fd5b803590602001918460018302840111640100000000831117156104e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561054657600080fd5b82018360208201111561055857600080fd5b8035906020019184600183028401116401000000008311171561057a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c7d565b005b6106bb600480360360208110156106a557600080fd5b8101908080359060200190929190505050611134565b6040518082815260200191505060405180910390f35b6106d9611154565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060008273ffffffffffffffffffffffffffffffffffffffff1663838d6e058988886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561086557600080fd5b505afa158015610879573d6000803e3d6000fd5b505050506040513d604081101561088f57600080fd5b8101908080519060200190929190805190602001909291905050509050809150506004808111156108bc57fe5b8160048111156108c857fe5b1415156108d457600080fd5b6000600360008481526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561094b57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050506040513d6020811015610aba57600080fd5b81019080805190602001909291905050501515610ad657600080fd5b828160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36003600084815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c3b87878787878787611179565b50505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b336000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7e286d836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d6020811015610d6557600080fd5b8101908080519060200190929190505050111515610d8257600080fd5b610d91838c8c878c3388611179565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828f8f8f8f8f8f8f6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610fb1578082015181840152602081019050610f96565b50505050905090810190601f168015610fde5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611017578082015181840152602081019050610ffc565b50505050905090810190601f1680156110445780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff88858b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a450505050505050505050505050565b600060036000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600087905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd6789896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561124d57600080fd5b505afa158015611261573d6000803e3d6000fd5b505050506040513d602081101561127757600080fd5b81019080805190602001909291905050509050600061133682888c8673ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156112f457600080fd5b505afa158015611308573d6000803e3d6000fd5b505050506040513d602081101561131e57600080fd5b81019080805190602001909291905050508a8961151d565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561137257600080fd5b6000828b604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050600060036000838152602001908152602001600020905087816001015410151561140957600080fd5b6080604051908101604052808a81526020018981526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525060036000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600080878787878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313438000000815250601d018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040528051906020012090506115d681846115e3565b9150509695505050505050565b6000604182511415156115f557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561162557601b810190505b601b8160ff16148061163a5750601c8160ff16145b151561164557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116a2573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156116ea57600080fd5b8393505050509291505056fea165627a7a723058207e1168f7004ae9a06711c4820c0c513d65f1345cbce64f3dec618c84f20911780029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"updateRewardPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"rewardNonce\",\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/MonitoringServiceInternalsTest.sol\":\"MonitoringServiceInternalsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe1aa470a48d5224a00781700a8f73742de9381972eb9e00a610c6df29d38069d\",\"urls\":[\"bzzr://6d12abf81b55d71ccb9751e2ce82f1ec21d254634def365a5947483142ad7c6f\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/services/MonitoringService.sol\":{\"keccak256\":\"0x51af79ff12ba662d8415d0e58eca59503bd79ea64179693676b57648bb96f76d\",\"urls\":[\"bzzr://042609abfb62911489036cc9176218788c0ee4240f1c57e3e603b9721837ea4e\"]},\"contracts/services/ServiceRegistry.sol\":{\"keccak256\":\"0x821d8cc33354ac07bf2feb2d587d9db0f3a7b31e2ca8af82c60ec59802c4f90f\",\"urls\":[\"bzzr://1dda015af95b7c9be37e0d5951fe26e63c85289fe4a06afe325022f06ff4f660\"]},\"contracts/services/UserDeposit.sol\":{\"keccak256\":\"0x65ecab137520e978ef33fc079faf1e5149e9b615abecdf939aed4dd38cfe8146\",\"urls\":[\"bzzr://89e9847c8cfa90ff6c104d08fd19d49557a3749cbce44aa40efa10a264fb37d7\"]},\"contracts/test/MonitoringServiceInternalsTest.sol\":{\"keccak256\":\"0x5303b36208665c963a4253c7f78729ad3250f6000d4a5f0f80256d9155fc3907\",\"urls\":[\"bzzr://7646be7a49181c05668a92d84f8c6a40e5005dbc0e74a50df9e5935a0dbb8bfd\"]}},\"version\":1}" }, "OneToN": { "abi": [ @@ -2826,6 +2826,14 @@ { "name": "_deprecation_executor", "type": "address" + }, + { + "name": "_channel_participant_deposit_limit", + "type": "uint256" + }, + { + "name": "_token_network_deposit_limit", + "type": "uint256" } ], "payable": false, @@ -2985,9 +2993,9 @@ "type": "event" } ], - "bin": "60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160c08062003b0d833981018060405260c08110156200004e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515620000ce57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156200010b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200014857600080fd5b6000841115156200015857600080fd5b6000831115156200016857600080fd5b82821115156200017757600080fd5b620001918662000376640100000000026401000000009004565b15156200019d57600080fd5b620001b78562000376640100000000026401000000009004565b1515620001c357600080fd5b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600281905550826003819055508160048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002df57600080fd5b505afa158015620002f4573d6000803e3d6000fd5b505050506040513d60208110156200030b57600080fd5b81019080805190602001909291905050501115156200032957600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000389565b600080823b905060008111915050919050565b61377480620003996000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113d5565b005b61037f611470565b6040518082815260200191505060405180910390f35b61039d611476565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e761149c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114c2565b6040518082815260200191505060405180910390f35b61044f6114c8565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114d5565b6040518082815260200191505060405180910390f35b6104af6114ed565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f9565b005b610545611951565b6040518082815260200191505060405180910390f35b610563611957565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061197b565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061198e565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd0565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611cc3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cfc565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611ddb565b005b6108926122ff565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612338565b604051808215151515815260200191505060405180910390f35b61093761234b565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612351565b005b610a7c60048036036020811015610a6657600080fd5b810190808035906020019092919050505061250d565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061253e565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b9091929391929390505050612613565b005b610c966128d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f6565b6040518082815260200191505060405180910390f35b610d648383611cfc565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129e9565b8094508195505050610dee89888a6128f6565b9450600060096000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cfe565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600660149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d602081101561125f57600080fd5b810190808051906020019092919050505010151561127c57600080fd5b6001600560008282540192505081905550600554905061129c878761198e565b9150600060086000848152602001908152602001600020541415156112c057600080fd5b8060086000848152602001908152602001600020819055506000600760008381526020019081526020016000209050600081600001541415156112ff57fe5b6000600481111561130c57fe5b8160010160009054906101000a900460ff16600481111561132957fe5b14151561133257fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135c57fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600660149054906101000a900460ff1615151415156113f757600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145357600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff16151514151561151b57600080fd5b836001600481111561152957fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561155857fe5b14151561156457600080fd5b61156e8483611cfc565b8514151561157b57600080fd5b60008311151561158a57600080fd5b67010a741a4627800083111515156115a157600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561165d57600080fd5b87851115151561166c57600080fd5b878583600001540114151561167d57fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561174257600080fd5b505afa158015611756573d6000803e3d6000fd5b505050506040513d602081101561176c57600080fd5b8101908080519060200190929190505050011115151561178b57600080fd5b87826000018190555080600001548260000154019350816000015484101515156117b457600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b505050506040513d602081101561192957600080fd5b8101908080519060200190929190505050151561194557600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119cb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a0757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a4257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b22578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611bca565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611c1057fe5b816004811115611c1c57fe5b148015611c295750600089115b8015611c3757506005548911155b15611cad5760039050611c4b8989896128f6565b93506000600960008681526020019081526020016000209050611c6f8a898b6128f6565b9350600060096000868152602001908152602001600020905060008260010154148015611ca0575060008160010154145b15611caa57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d3957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d7557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611db057600080fd5b6000611dbc848461198e565b9050600860008281526020019081526020016000205491505092915050565b611de58885611cfc565b89141515611df257600080fd5b6000611dfe898661198e565b90506000600760008c8152602001908152602001600020905060026004811115611e2457fe5b8160010160009054906101000a900460ff166004811115611e4157fe5b141515611e4d57600080fd5b438160000154101515611e5f57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ef5828c8c8c612d17565b1515611f0057600080fd5b611f0c81888888612d17565b1515611f1757600080fd5b611f25828c8c848b8b612da0565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600860008581526020019081526020016000206000905561207b8d8d8a8d8d612eaf565b6120888d898e8989612eaf565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121dc576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b810190808051906020019092919050505015156121db57600080fd5b5b60008711156122f0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122a957600080fd5b505af11580156122bd573d6000803e3d6000fd5b505050506040513d60208110156122d357600080fd5b810190808051906020019092919050505015156122ef57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b856001600481111561235f57fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561238e57fe5b14151561239a57600080fd5b6123a43387611cfc565b871415156123b157600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123ea57fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156124bd576124748988888888612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156124b057600080fd5b6124bc8183888a6130e3565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506125ac8c8c8c6128f6565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b61261d8989611cfc565b8a14151561262a57600080fd5b6000600102871415151561263d57600080fd5b60008611151561264c57600080fd5b6000806000600760008e815260200190815260200160002090506002600481111561267357fe5b8160010160009054906101000a900460ff16600481111561269057fe5b14151561269c57600080fd5b438160000154101515156126af57600080fd5b6127458d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613153565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561278157600080fd5b6127d28d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561280e57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561287057600080fd5b61287c828e8c8e6130e3565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561293357600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612a0057fe5b06141515612a0d57600080fd5b600080600080600060606001606088811515612a2557fe5b0401604051908082528060200260200182016040528015612a555781602001602082028038833980820191505090505b509050602095505b86861015612ab057612a6f8a8761337f565b809550819450505083850194508281606088811515612a8a57fe5b04815181101515612a9757fe5b9060200190602002018181525050606086019550612a5d565b606087811515612abc57fe5b0496505b6001871115612cd1576000600288811515612ad757fe5b06141515612b1d578060018803815181101515612af057fe5b906020019060200201518188815181101515612b0857fe5b90602001906020020181815250506001870196505b600095505b60018703861015612cbd578060018701815181101515612b3e57fe5b906020019060200201518187815181101515612b5657fe5b906020019060200201511415612b85578086815181101515612b7457fe5b906020019060200201519250612c89565b8060018701815181101515612b9657fe5b906020019060200201518187815181101515612bae57fe5b906020019060200201511015612c25578086815181101515612bcc57fe5b906020019060200201518160018801815181101515612be757fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c88565b8060018701815181101515612c3657fe5b906020019060200201518187815181101515612c4e57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c9757fe5b04815181101515612ca457fe5b9060200190602002018181525050600286019550612b22565b600286811515612cc957fe5b049650612ac0565b806000815181101515612ce057fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612d0d5782612d0f565b815b905092915050565b6000806001028560030154148015612d2f5750600084145b8015612d3b5750600083145b8015612d4a5750600060010282145b15612d585760019050612d98565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612db361371f565b612dbb61371f565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e258f8d6134f1565b9250612e318282613512565b9450612e3d8584612cfe565b94508483039350612e4e858b6135a6565b809b508196505050612e60848e6135a6565b809e508195505050828511151515612e7457fe5b828411151515612e8057fe5b898d858701010183141515612e9157fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ec15750600060010281145b15612ecb57612f06565b6000612ed88686866128f6565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f9357fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fcf5780518252602082019150602081019050602083039250612faa565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130225780518252602082019150602081019050602083039250612ffd565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130d681856135cb565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561313a57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131d957fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561321657805182526020820191506020810190506020830392506131f1565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132695780518252602082019150602081019050602083039250613244565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561332157805182526020820191506020810190506020830392506132fc565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061337181856135cb565b925050509695505050505050565b60008060008060008060008789511115156133a8578060008090509650965050505050506134ea565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561348857600080fd5b505afa15801561349c573d6000803e3d6000fd5b505050506040513d60208110156134b257600080fd5b8101908080519060200190929190505050925060008314806134d45750828511155b156134de57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061352c876040015188606001516136de565b9350613540866040015187606001516136de565b925083831015151561355157600080fd5b8660400151841015151561356157fe5b8560400151831015151561357157fe5b83830391506135848288600001516136de565b90506135948188602001516135a6565b50809150508094505050505092915050565b6000808284116135bb576000848191506135c0565b828403835b915091509250929050565b6000604182511415156135dd57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561360d57601b810190505b601b8160ff1614806136225750601c8160ff16145b151561362d57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561368a573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136d257600080fd5b83935050505092915050565b600080828401905083811015613714577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613716565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820656cdf73dc8613cacb88247f0856941db1d3229c66937c3f479c36811c177d7b0029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113d5565b005b61037f611470565b6040518082815260200191505060405180910390f35b61039d611476565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e761149c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114c2565b6040518082815260200191505060405180910390f35b61044f6114c8565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114d5565b6040518082815260200191505060405180910390f35b6104af6114ed565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f9565b005b610545611951565b6040518082815260200191505060405180910390f35b610563611957565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061197b565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061198e565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd0565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611cc3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cfc565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611ddb565b005b6108926122ff565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612338565b604051808215151515815260200191505060405180910390f35b61093761234b565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612351565b005b610a7c60048036036020811015610a6657600080fd5b810190808035906020019092919050505061250d565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061253e565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b9091929391929390505050612613565b005b610c966128d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f6565b6040518082815260200191505060405180910390f35b610d648383611cfc565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129e9565b8094508195505050610dee89888a6128f6565b9450600060096000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cfe565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600660149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d602081101561125f57600080fd5b810190808051906020019092919050505010151561127c57600080fd5b6001600560008282540192505081905550600554905061129c878761198e565b9150600060086000848152602001908152602001600020541415156112c057600080fd5b8060086000848152602001908152602001600020819055506000600760008381526020019081526020016000209050600081600001541415156112ff57fe5b6000600481111561130c57fe5b8160010160009054906101000a900460ff16600481111561132957fe5b14151561133257fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135c57fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600660149054906101000a900460ff1615151415156113f757600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145357600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff16151514151561151b57600080fd5b836001600481111561152957fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561155857fe5b14151561156457600080fd5b61156e8483611cfc565b8514151561157b57600080fd5b60008311151561158a57600080fd5b67010a741a4627800083111515156115a157600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561165d57600080fd5b87851115151561166c57600080fd5b878583600001540114151561167d57fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561174257600080fd5b505afa158015611756573d6000803e3d6000fd5b505050506040513d602081101561176c57600080fd5b8101908080519060200190929190505050011115151561178b57600080fd5b87826000018190555080600001548260000154019350816000015484101515156117b457600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b505050506040513d602081101561192957600080fd5b8101908080519060200190929190505050151561194557600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119cb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a0757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a4257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b22578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611bca565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611c1057fe5b816004811115611c1c57fe5b148015611c295750600089115b8015611c3757506005548911155b15611cad5760039050611c4b8989896128f6565b93506000600960008681526020019081526020016000209050611c6f8a898b6128f6565b9350600060096000868152602001908152602001600020905060008260010154148015611ca0575060008160010154145b15611caa57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d3957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d7557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611db057600080fd5b6000611dbc848461198e565b9050600860008281526020019081526020016000205491505092915050565b611de58885611cfc565b89141515611df257600080fd5b6000611dfe898661198e565b90506000600760008c8152602001908152602001600020905060026004811115611e2457fe5b8160010160009054906101000a900460ff166004811115611e4157fe5b141515611e4d57600080fd5b438160000154101515611e5f57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ef5828c8c8c612d17565b1515611f0057600080fd5b611f0c81888888612d17565b1515611f1757600080fd5b611f25828c8c848b8b612da0565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600860008581526020019081526020016000206000905561207b8d8d8a8d8d612eaf565b6120888d898e8989612eaf565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121dc576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b810190808051906020019092919050505015156121db57600080fd5b5b60008711156122f0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122a957600080fd5b505af11580156122bd573d6000803e3d6000fd5b505050506040513d60208110156122d357600080fd5b810190808051906020019092919050505015156122ef57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b856001600481111561235f57fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561238e57fe5b14151561239a57600080fd5b6123a43387611cfc565b871415156123b157600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123ea57fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156124bd576124748988888888612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156124b057600080fd5b6124bc8183888a6130e3565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506125ac8c8c8c6128f6565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b61261d8989611cfc565b8a14151561262a57600080fd5b6000600102871415151561263d57600080fd5b60008611151561264c57600080fd5b6000806000600760008e815260200190815260200160002090506002600481111561267357fe5b8160010160009054906101000a900460ff16600481111561269057fe5b14151561269c57600080fd5b438160000154101515156126af57600080fd5b6127458d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613153565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561278157600080fd5b6127d28d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561280e57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561287057600080fd5b61287c828e8c8e6130e3565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561293357600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612a0057fe5b06141515612a0d57600080fd5b600080600080600060606001606088811515612a2557fe5b0401604051908082528060200260200182016040528015612a555781602001602082028038833980820191505090505b509050602095505b86861015612ab057612a6f8a8761337f565b809550819450505083850194508281606088811515612a8a57fe5b04815181101515612a9757fe5b9060200190602002018181525050606086019550612a5d565b606087811515612abc57fe5b0496505b6001871115612cd1576000600288811515612ad757fe5b06141515612b1d578060018803815181101515612af057fe5b906020019060200201518188815181101515612b0857fe5b90602001906020020181815250506001870196505b600095505b60018703861015612cbd578060018701815181101515612b3e57fe5b906020019060200201518187815181101515612b5657fe5b906020019060200201511415612b85578086815181101515612b7457fe5b906020019060200201519250612c89565b8060018701815181101515612b9657fe5b906020019060200201518187815181101515612bae57fe5b906020019060200201511015612c25578086815181101515612bcc57fe5b906020019060200201518160018801815181101515612be757fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c88565b8060018701815181101515612c3657fe5b906020019060200201518187815181101515612c4e57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c9757fe5b04815181101515612ca457fe5b9060200190602002018181525050600286019550612b22565b600286811515612cc957fe5b049650612ac0565b806000815181101515612ce057fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612d0d5782612d0f565b815b905092915050565b6000806001028560030154148015612d2f5750600084145b8015612d3b5750600083145b8015612d4a5750600060010282145b15612d585760019050612d98565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612db361371f565b612dbb61371f565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e258f8d6134f1565b9250612e318282613512565b9450612e3d8584612cfe565b94508483039350612e4e858b6135a6565b809b508196505050612e60848e6135a6565b809e508195505050828511151515612e7457fe5b828411151515612e8057fe5b898d858701010183141515612e9157fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ec15750600060010281145b15612ecb57612f06565b6000612ed88686866128f6565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f9357fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fcf5780518252602082019150602081019050602083039250612faa565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130225780518252602082019150602081019050602083039250612ffd565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130d681856135cb565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561313a57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131d957fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561321657805182526020820191506020810190506020830392506131f1565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132695780518252602082019150602081019050602083039250613244565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561332157805182526020820191506020810190506020830392506132fc565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061337181856135cb565b925050509695505050505050565b60008060008060008060008789511115156133a8578060008090509650965050505050506134ea565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561348857600080fd5b505afa15801561349c573d6000803e3d6000fd5b505050506040513d60208110156134b257600080fd5b8101908080519060200190929190505050925060008314806134d45750828511155b156134de57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061352c876040015188606001516136de565b9350613540866040015187606001516136de565b925083831015151561355157600080fd5b8660400151841015151561356157fe5b8560400151831015151561357157fe5b83830391506135848288600001516136de565b90506135948188602001516135a6565b50809150508094505050505092915050565b6000808284116135bb576000848191506135c0565b828403835b915091509250929050565b6000604182511415156135dd57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561360d57601b810190505b601b8160ff1614806136225750601c8160ff16145b151561362d57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561368a573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136d257600080fd5b83935050505092915050565b600080828401905083811015613714577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613716565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820656cdf73dc8613cacb88247f0856941db1d3229c66937c3f479c36811c177d7b0029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_deprecation_executor\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}},\"title\":\"TokenNetwork\"},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}},\"notice\":\"Stores and manages all the Raiden Network channels that use the token specified in this TokenNetwork contract.\"}},\"settings\":{\"compilationTarget\":{\"contracts/raiden/TokenNetwork.sol\":\"TokenNetwork\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xd6a815ea4cc35ca8fbf9e64cae2d51bcad170cd242c3f6681d9c887d09e2b595\",\"urls\":[\"bzzr://61b2069b4a3ac87f37cf9f80db287817235e17f3833bd3dacbb95ef43353e5ce\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516101008062003b4283398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b61375380620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113ce565b005b61037f611469565b6040518082815260200191505060405180910390f35b61039d61146f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611495565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114bb565b6040518082815260200191505060405180910390f35b61044f6114c1565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114c7565b6040518082815260200191505060405180910390f35b6104af6114df565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114e5565b005b610545611930565b6040518082815260200191505060405180910390f35b610563611936565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195a565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196d565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611baf565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611ca2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdb565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611dba565b005b6108926122de565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612317565b604051808215151515815260200191505060405180910390f35b61093761232a565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612330565b005b610a7c60048036036020811015610a6657600080fd5b81019080803590602001909291905050506124ec565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061251d565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b90919293919293905050506125f2565b005b610c966128b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128d5565b6040518082815260200191505060405180910390f35b610d648383611cdb565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129c8565b8094508195505050610dee89888a6128d5565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cdd565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561122e57600080fd5b505afa158015611242573d6000803e3d6000fd5b505050506040513d602081101561125857600080fd5b810190808051906020019092919050505010151561127557600080fd5b60016007600082825401925050819055506007549050611295878761196d565b91506000600a6000848152602001908152602001600020541415156112b957600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156112f857fe5b6000600481111561130557fe5b8160010160009054906101000a900460ff16600481111561132257fe5b14151561132b57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135557fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff1615151415156113f057600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561144c57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561150757600080fd5b836001600481111561151557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561154457fe5b14151561155057600080fd5b61155a8483611cdb565b8514151561156757600080fd5b60008311151561157657600080fd5b600554831115151561158757600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561164357600080fd5b87851115151561165257600080fd5b878583600001540114151561166357fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561172157600080fd5b505afa158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b8101908080519060200190929190505050011115151561176a57600080fd5b878260000181905550806000015482600001540193508160000154841015151561179357600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118de57600080fd5b505af11580156118f2573d6000803e3d6000fd5b505050506040513d602081101561190857600080fd5b8101908080519060200190929190505050151561192457600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119aa57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156119e657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a2157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b01578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611ba9565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611bef57fe5b816004811115611bfb57fe5b148015611c085750600089115b8015611c1657506007548911155b15611c8c5760039050611c2a8989896128d5565b93506000600b60008681526020019081526020016000209050611c4e8a898b6128d5565b93506000600b6000868152602001908152602001600020905060008260010154148015611c7f575060008160010154145b15611c8957600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d1857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d5457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d8f57600080fd5b6000611d9b848461196d565b9050600a60008281526020019081526020016000205491505092915050565b611dc48885611cdb565b89141515611dd157600080fd5b6000611ddd898661196d565b90506000600960008c8152602001908152602001600020905060026004811115611e0357fe5b8160010160009054906101000a900460ff166004811115611e2057fe5b141515611e2c57600080fd5b438160000154101515611e3e57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ed4828c8c8c612cf6565b1515611edf57600080fd5b611eeb81888888612cf6565b1515611ef657600080fd5b611f04828c8c848b8b612d7f565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a60008581526020019081526020016000206000905561205a8d8d8a8d8d612e8e565b6120678d898e8989612e8e565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121bb576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050506040513d602081101561219e57600080fd5b810190808051906020019092919050505015156121ba57600080fd5b5b60008711156122cf576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561228857600080fd5b505af115801561229c573d6000803e3d6000fd5b505050506040513d60208110156122b257600080fd5b810190808051906020019092919050505015156122ce57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b856001600481111561233e57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561236d57fe5b14151561237957600080fd5b6123833387611cdb565b8714151561239057600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123c957fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550438160000160008282540192505081905550600086111561249c576124538988888888612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561248f57600080fd5b61249b8183888a6130c2565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061258b8c8c8c6128d5565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6125fc8989611cdb565b8a14151561260957600080fd5b6000600102871415151561261c57600080fd5b60008611151561262b57600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561265257fe5b8160010160009054906101000a900460ff16600481111561266f57fe5b14151561267b57600080fd5b4381600001541015151561268e57600080fd5b6127248d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613132565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561276057600080fd5b6127b18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156127ed57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561284f57600080fd5b61285b828e8c8e6130c2565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561291257600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156129df57fe5b061415156129ec57600080fd5b600080600080600060606001606088811515612a0457fe5b0401604051908082528060200260200182016040528015612a345781602001602082028038833980820191505090505b509050602095505b86861015612a8f57612a4e8a8761335e565b809550819450505083850194508281606088811515612a6957fe5b04815181101515612a7657fe5b9060200190602002018181525050606086019550612a3c565b606087811515612a9b57fe5b0496505b6001871115612cb0576000600288811515612ab657fe5b06141515612afc578060018803815181101515612acf57fe5b906020019060200201518188815181101515612ae757fe5b90602001906020020181815250506001870196505b600095505b60018703861015612c9c578060018701815181101515612b1d57fe5b906020019060200201518187815181101515612b3557fe5b906020019060200201511415612b64578086815181101515612b5357fe5b906020019060200201519250612c68565b8060018701815181101515612b7557fe5b906020019060200201518187815181101515612b8d57fe5b906020019060200201511015612c04578086815181101515612bab57fe5b906020019060200201518160018801815181101515612bc657fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c67565b8060018701815181101515612c1557fe5b906020019060200201518187815181101515612c2d57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c7657fe5b04815181101515612c8357fe5b9060200190602002018181525050600286019550612b01565b600286811515612ca857fe5b049650612a9f565b806000815181101515612cbf57fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612cec5782612cee565b815b905092915050565b6000806001028560030154148015612d0e5750600084145b8015612d1a5750600083145b8015612d295750600060010282145b15612d375760019050612d77565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612d926136fe565b612d9a6136fe565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e048f8d6134d0565b9250612e1082826134f1565b9450612e1c8584612cdd565b94508483039350612e2d858b613585565b809b508196505050612e3f848e613585565b809e508195505050828511151515612e5357fe5b828411151515612e5f57fe5b898d858701010183141515612e7057fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ea05750600060010281145b15612eaa57612ee5565b6000612eb78686866128d5565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f7257fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fae5780518252602082019150602081019050602083039250612f89565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130015780518252602082019150602081019050602083039250612fdc565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130b581856135aa565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561311957600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131b857fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156131f557805182526020820191506020810190506020830392506131d0565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132485780518252602082019150602081019050602083039250613223565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561330057805182526020820191506020810190506020830392506132db565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061335081856135aa565b925050509695505050505050565b6000806000806000806000878951111515613387578060008090509650965050505050506134c9565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561346757600080fd5b505afa15801561347b573d6000803e3d6000fd5b505050506040513d602081101561349157600080fd5b8101908080519060200190929190505050925060008314806134b35750828511155b156134bd57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061350b876040015188606001516136bd565b935061351f866040015187606001516136bd565b925083831015151561353057600080fd5b8660400151841015151561354057fe5b8560400151831015151561355057fe5b83830391506135638288600001516136bd565b9050613573818860200151613585565b50809150508094505050505092915050565b60008082841161359a5760008481915061359f565b828403835b915091509250929050565b6000604182511415156135bc57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156135ec57601b810190505b601b8160ff1614806136015750601c8160ff16145b151561360c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613669573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136b157600080fd5b83935050505092915050565b6000808284019050838110156136f3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6136f5565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820abd27e0e951c1cdd72635a9c4ccfd36151bffff98dbec79cfa62c60dc03d50420029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113ce565b005b61037f611469565b6040518082815260200191505060405180910390f35b61039d61146f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611495565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114bb565b6040518082815260200191505060405180910390f35b61044f6114c1565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114c7565b6040518082815260200191505060405180910390f35b6104af6114df565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114e5565b005b610545611930565b6040518082815260200191505060405180910390f35b610563611936565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195a565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196d565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611baf565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611ca2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdb565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611dba565b005b6108926122de565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612317565b604051808215151515815260200191505060405180910390f35b61093761232a565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612330565b005b610a7c60048036036020811015610a6657600080fd5b81019080803590602001909291905050506124ec565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061251d565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b90919293919293905050506125f2565b005b610c966128b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128d5565b6040518082815260200191505060405180910390f35b610d648383611cdb565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129c8565b8094508195505050610dee89888a6128d5565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cdd565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561122e57600080fd5b505afa158015611242573d6000803e3d6000fd5b505050506040513d602081101561125857600080fd5b810190808051906020019092919050505010151561127557600080fd5b60016007600082825401925050819055506007549050611295878761196d565b91506000600a6000848152602001908152602001600020541415156112b957600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156112f857fe5b6000600481111561130557fe5b8160010160009054906101000a900460ff16600481111561132257fe5b14151561132b57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135557fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff1615151415156113f057600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561144c57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561150757600080fd5b836001600481111561151557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561154457fe5b14151561155057600080fd5b61155a8483611cdb565b8514151561156757600080fd5b60008311151561157657600080fd5b600554831115151561158757600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561164357600080fd5b87851115151561165257600080fd5b878583600001540114151561166357fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561172157600080fd5b505afa158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b8101908080519060200190929190505050011115151561176a57600080fd5b878260000181905550806000015482600001540193508160000154841015151561179357600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118de57600080fd5b505af11580156118f2573d6000803e3d6000fd5b505050506040513d602081101561190857600080fd5b8101908080519060200190929190505050151561192457600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119aa57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156119e657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a2157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b01578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611ba9565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611bef57fe5b816004811115611bfb57fe5b148015611c085750600089115b8015611c1657506007548911155b15611c8c5760039050611c2a8989896128d5565b93506000600b60008681526020019081526020016000209050611c4e8a898b6128d5565b93506000600b6000868152602001908152602001600020905060008260010154148015611c7f575060008160010154145b15611c8957600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d1857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d5457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d8f57600080fd5b6000611d9b848461196d565b9050600a60008281526020019081526020016000205491505092915050565b611dc48885611cdb565b89141515611dd157600080fd5b6000611ddd898661196d565b90506000600960008c8152602001908152602001600020905060026004811115611e0357fe5b8160010160009054906101000a900460ff166004811115611e2057fe5b141515611e2c57600080fd5b438160000154101515611e3e57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ed4828c8c8c612cf6565b1515611edf57600080fd5b611eeb81888888612cf6565b1515611ef657600080fd5b611f04828c8c848b8b612d7f565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a60008581526020019081526020016000206000905561205a8d8d8a8d8d612e8e565b6120678d898e8989612e8e565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121bb576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050506040513d602081101561219e57600080fd5b810190808051906020019092919050505015156121ba57600080fd5b5b60008711156122cf576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561228857600080fd5b505af115801561229c573d6000803e3d6000fd5b505050506040513d60208110156122b257600080fd5b810190808051906020019092919050505015156122ce57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b856001600481111561233e57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561236d57fe5b14151561237957600080fd5b6123833387611cdb565b8714151561239057600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123c957fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550438160000160008282540192505081905550600086111561249c576124538988888888612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561248f57600080fd5b61249b8183888a6130c2565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061258b8c8c8c6128d5565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6125fc8989611cdb565b8a14151561260957600080fd5b6000600102871415151561261c57600080fd5b60008611151561262b57600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561265257fe5b8160010160009054906101000a900460ff16600481111561266f57fe5b14151561267b57600080fd5b4381600001541015151561268e57600080fd5b6127248d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613132565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561276057600080fd5b6127b18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156127ed57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561284f57600080fd5b61285b828e8c8e6130c2565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561291257600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156129df57fe5b061415156129ec57600080fd5b600080600080600060606001606088811515612a0457fe5b0401604051908082528060200260200182016040528015612a345781602001602082028038833980820191505090505b509050602095505b86861015612a8f57612a4e8a8761335e565b809550819450505083850194508281606088811515612a6957fe5b04815181101515612a7657fe5b9060200190602002018181525050606086019550612a3c565b606087811515612a9b57fe5b0496505b6001871115612cb0576000600288811515612ab657fe5b06141515612afc578060018803815181101515612acf57fe5b906020019060200201518188815181101515612ae757fe5b90602001906020020181815250506001870196505b600095505b60018703861015612c9c578060018701815181101515612b1d57fe5b906020019060200201518187815181101515612b3557fe5b906020019060200201511415612b64578086815181101515612b5357fe5b906020019060200201519250612c68565b8060018701815181101515612b7557fe5b906020019060200201518187815181101515612b8d57fe5b906020019060200201511015612c04578086815181101515612bab57fe5b906020019060200201518160018801815181101515612bc657fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c67565b8060018701815181101515612c1557fe5b906020019060200201518187815181101515612c2d57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c7657fe5b04815181101515612c8357fe5b9060200190602002018181525050600286019550612b01565b600286811515612ca857fe5b049650612a9f565b806000815181101515612cbf57fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612cec5782612cee565b815b905092915050565b6000806001028560030154148015612d0e5750600084145b8015612d1a5750600083145b8015612d295750600060010282145b15612d375760019050612d77565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612d926136fe565b612d9a6136fe565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e048f8d6134d0565b9250612e1082826134f1565b9450612e1c8584612cdd565b94508483039350612e2d858b613585565b809b508196505050612e3f848e613585565b809e508195505050828511151515612e5357fe5b828411151515612e5f57fe5b898d858701010183141515612e7057fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ea05750600060010281145b15612eaa57612ee5565b6000612eb78686866128d5565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f7257fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fae5780518252602082019150602081019050602083039250612f89565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130015780518252602082019150602081019050602083039250612fdc565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130b581856135aa565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561311957600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131b857fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156131f557805182526020820191506020810190506020830392506131d0565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132485780518252602082019150602081019050602083039250613223565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561330057805182526020820191506020810190506020830392506132db565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061335081856135aa565b925050509695505050505050565b6000806000806000806000878951111515613387578060008090509650965050505050506134c9565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561346757600080fd5b505afa15801561347b573d6000803e3d6000fd5b505050506040513d602081101561349157600080fd5b8101908080519060200190929190505050925060008314806134b35750828511155b156134bd57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061350b876040015188606001516136bd565b935061351f866040015187606001516136bd565b925083831015151561353057600080fd5b8660400151841015151561354057fe5b8560400151831015151561355057fe5b83830391506135638288600001516136bd565b9050613573818860200151613585565b50809150508094505050505092915050565b60008082841161359a5760008481915061359f565b828403835b915091509250929050565b6000604182511415156135bc57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156135ec57601b810190505b601b8160ff1614806136015750601c8160ff16145b151561360c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613669573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136b157600080fd5b83935050505092915050565b6000808284019050838110156136f3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6136f5565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820abd27e0e951c1cdd72635a9c4ccfd36151bffff98dbec79cfa62c60dc03d50420029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_deprecation_executor\",\"type\":\"address\"},{\"name\":\"_channel_participant_deposit_limit\",\"type\":\"uint256\"},{\"name\":\"_token_network_deposit_limit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}},\"title\":\"TokenNetwork\"},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}},\"notice\":\"Stores and manages all the Raiden Network channels that use the token specified in this TokenNetwork contract.\"}},\"settings\":{\"compilationTarget\":{\"contracts/raiden/TokenNetwork.sol\":\"TokenNetwork\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe1aa470a48d5224a00781700a8f73742de9381972eb9e00a610c6df29d38069d\",\"urls\":[\"bzzr://6d12abf81b55d71ccb9751e2ce82f1ec21d254634def365a5947483142ad7c6f\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]}},\"version\":1}" }, "TokenNetworkInternalStorageTest": { "abi": [ @@ -3932,9 +3940,9 @@ "type": "event" } ], - "bin": "60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a080620040a0833981018060405260a08110156200004e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050848484848433600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515620000ca57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156200010757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200014457600080fd5b6000841115156200015457600080fd5b6000831115156200016457600080fd5b82821115156200017357600080fd5b6200018d8662000377640100000000026401000000009004565b15156200019957600080fd5b620001b38562000377640100000000026401000000009004565b1515620001bf57600080fd5b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600281905550826003819055508160048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d60208110156200030757600080fd5b81019080805190602001909291905050501115156200032557600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050506200038a565b600080823b905060008111915050919050565b613d06806200039a6000396000f3fe608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063c203d51e116100ca578063f20a440311610099578063f20a440314610d22578063f5c6a22914610d84578063fadc554b14610e24578063fc0c546a14610f5b578063fe49ba1c14610fa557610218565b8063c203d51e14610a7e578063db45479b14610b18578063e5949b5d14610c1b578063ee4516d914610c7257610218565b80639cadb159116101065780639cadb15914610910578063b32c65c8146109bb578063b7506d7014610a3e578063b8378f7514610a6057610218565b80637c4734f414610706578063838d6e051461077e5780638723423714610815578063938bcd671461089857610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611027565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f5565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a2565b6040518082815260200191505060405180910390f35b610424611768565b005b61042e611803565b6040518082815260200191505060405180910390f35b61044c611809565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049661182f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e0611855565b6040518082815260200191505060405180910390f35b6104fe61185b565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b8101908080359060200190929190505050611868565b6040518082815260200191505060405180910390f35b61055e611880565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061188c565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118a0565b005b610676611cf8565b6040518082815260200191505060405180910390f35b610694611cfe565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d22565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d35565b6040518082815260200191505060405180910390f35b6107ea6004803603606081101561079457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f77565b6040518083815260200182600481111561080057fe5b60ff1681526020019250505060405180910390f35b61081d61206a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085d578082015181840152602081019050610842565b50505050905090810190601f16801561088a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108fa600480360360408110156108ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a3565b6040518082815260200191505060405180910390f35b6109b9600480360361012081101561092757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612182565b005b6109c36126a6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a035780820151818401526020810190506109e8565b50505050905090810190601f168015610a305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a466126df565b604051808215151515815260200191505060405180910390f35b610a686126f2565b6040518082815260200191505060405180910390f35b610afe600480360360a0811015610a9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506126f8565b604051808215151515815260200191505060405180910390f35b610c19600480360360c0811015610b2e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610b9357600080fd5b820183602082011115610ba557600080fd5b80359060200191846001830284011164010000000083111715610bc757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061277d565b005b610c4760048036036020811015610c3157600080fd5b8101908080359060200190929190505050612939565b60405180838152602001826004811115610c5d57fe5b60ff1681526020019250505060405180910390f35b610cde60048036036060811015610c8857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061296a565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610d8260048036036080811015610d3857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a3f565b005b610e0e600480360360c0811015610d9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a69565b6040518082815260200191505060405180910390f35b610f596004803603610100811015610e3b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ec057600080fd5b820183602082011115610ed257600080fd5b80359060200191846001830284011164010000000083111715610ef457600080fd5b909192939192939080359060200190640100000000811115610f1557600080fd5b820183602082011115610f2757600080fd5b80359060200191846001830284011164010000000083111715610f4957600080fd5b9091929391929390505050612ba5565b005b610f63612e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61101160048036036060811015610fbb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e88565b6040518082815260200191505060405180910390f35b61103183836120a3565b841415151561103f57600080fd5b6000600481111561104c57fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff16600481111561107b57fe5b14151561108757600080fd5b6000815111151561109757600080fd5b60008060008060006110a886612f7b565b80945081955050506110bb89888a612e88565b94506000600960008781526020019081526020016000209050806001015492508481600001541415156110ed57600080fd5b6000831115156110fc57600080fd5b6111068484613290565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112bd576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561127657600080fd5b505af115801561128a573d6000803e3d6000fd5b505050506040513d60208110156112a057600080fd5b810190808051906020019092919050505015156112bc57600080fd5b5b60008211156113d1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b505050506040513d60208110156113b457600080fd5b810190808051906020019092919050505015156113d057600080fd5b5b8183101515156113dd57fe5b8383101515156113e957fe5b50505050505050505050565b6000801515600660149054906101000a900460ff16151514151561141857600080fd5b81600354811015151561142a57600080fd5b600454811115151561143b57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d602081101561152c57600080fd5b810190808051906020019092919050505010151561154957600080fd5b600160056000828254019250508190555060055490506115698787611d35565b91506000600860008481526020019081526020016000205414151561158d57600080fd5b8060086000848152602001908152602001600020819055506000600760008381526020019081526020016000209050600081600001541415156115cc57fe5b600060048111156115d957fe5b8160010160009054906101000a900460ff1660048111156115f657fe5b1415156115ff57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561162957fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806116af84846120a3565b9050600060076000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061175c82826132a9565b94505050505092915050565b60001515600660149054906101000a900460ff16151514151561178a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117e657600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b61189985858585856132ca565b5050505050565b60001515600660149054906101000a900460ff1615151415156118c257600080fd5b83600160048111156118d057fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118ff57fe5b14151561190b57600080fd5b61191584836120a3565b8514151561192257600080fd5b60008311151561193157600080fd5b67010a741a46278000831115151561194857600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611a0457600080fd5b878511151515611a1357600080fd5b8785836000015401141515611a2457fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b81019080805190602001909291905050500111151515611b3257600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b5b57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ca657600080fd5b505af1158015611cba573d6000803e3d6000fd5b505050506040513d6020811015611cd057600080fd5b81019080805190602001909291905050501515611cec57600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d7257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611dae57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611de957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611ec9578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f71565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611fb757fe5b816004811115611fc357fe5b148015611fd05750600089115b8015611fde57506005548911155b156120545760039050611ff2898989612e88565b935060006009600086815260200190815260200160002090506120168a898b612e88565b9350600060096000868152602001908152602001600020905060008260010154148015612047575060008160010154145b1561205157600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120e057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561211c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561215757600080fd5b60006121638484611d35565b9050600860008281526020019081526020016000205491505092915050565b61218c88856120a3565b8914151561219957600080fd5b60006121a58986611d35565b90506000600760008c81526020019081526020016000209050600260048111156121cb57fe5b8160010160009054906101000a900460ff1660048111156121e857fe5b1415156121f457600080fd5b43816000015410151561220657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061229c828c8c8c613328565b15156122a757600080fd5b6122b381888888613328565b15156122be57600080fd5b6122cc828c8c848b8b6133b1565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff0219169055505060086000858152602001908152602001600020600090556124228d8d8a8d8d6132ca565b61242f8d898e89896132ca565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b1115612583576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561253c57600080fd5b505af1158015612550573d6000803e3d6000fd5b505050506040513d602081101561256657600080fd5b8101908080519060200190929190505050151561258257600080fd5b5b6000871115612697576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561265057600080fd5b505af1158015612664573d6000803e3d6000fd5b505050506040513d602081101561267a57600080fd5b8101908080519060200190929190505050151561269657600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b60008061270587876120a3565b9050600060076000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061276f81888888613328565b935050505095945050505050565b856001600481111561278b57fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156127ba57fe5b1415156127c657600080fd5b6127d033876120a3565b871415156127dd57600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561281657fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128e9576128a089888888886134c0565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156128dc57600080fd5b6128e88183888a613696565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506129d88c8c8c612e88565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6000600760008681526020019081526020016000209050612a6281858585613696565b5050505050565b600080612a7688866120a3565b9050600060076000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b21613cb1565b612b29613cb1565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a826060018181525050826000015481600001818152505082600101548160200181815250508881604001818152505087816060018181525050612b938282613706565b96505050505050509695505050505050565b612baf89896120a3565b8a141515612bbc57600080fd5b60006001028714151515612bcf57600080fd5b600086111515612bde57600080fd5b6000806000600760008e8152602001908152602001600020905060026004811115612c0557fe5b8160010160009054906101000a900460ff166004811115612c2257fe5b141515612c2e57600080fd5b43816000015410151515612c4157600080fd5b612cd78d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061379a565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d1357600080fd5b612d648d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134c0565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612da057600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e0257600080fd5b612e0e828e8c8e613696565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612ec557600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612f9257fe5b06141515612f9f57600080fd5b600080600080600060606001606088811515612fb757fe5b0401604051908082528060200260200182016040528015612fe75781602001602082028038833980820191505090505b509050602095505b86861015613042576130018a876139c6565b80955081945050508385019450828160608881151561301c57fe5b0481518110151561302957fe5b9060200190602002018181525050606086019550612fef565b60608781151561304e57fe5b0496505b600187111561326357600060028881151561306957fe5b061415156130af57806001880381518110151561308257fe5b90602001906020020151818881518110151561309a57fe5b90602001906020020181815250506001870196505b600095505b6001870386101561324f5780600187018151811015156130d057fe5b9060200190602002015181878151811015156130e857fe5b90602001906020020151141561311757808681518110151561310657fe5b90602001906020020151925061321b565b806001870181518110151561312857fe5b90602001906020020151818781518110151561314057fe5b9060200190602002015110156131b757808681518110151561315e57fe5b90602001906020020151816001880181518110151561317957fe5b90602001906020020151604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925061321a565b80600187018151811015156131c857fe5b9060200190602002015181878151811015156131e057fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561322957fe5b0481518110151561323657fe5b90602001906020020181815250506002860195506130b4565b60028681151561325b57fe5b049650613052565b80600081518110151561327257fe5b90602001906020020151915081859850985050505050505050915091565b600081831161329f57826132a1565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214806132dc5750600060010281145b156132e657613321565b60006132f3868686612e88565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b60008060010285600301541480156133405750600084145b801561334c5750600083145b801561335b5750600060010282145b1561336957600190506133a9565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006133c4613cb1565b6133cc613cb1565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506134368f8d6132a9565b92506134428282613706565b945061344e8584613290565b9450848303935061345f858b613b38565b809b508196505050613471848e613b38565b809e50819550505082851115151561348557fe5b82841115151561349157fe5b898d8587010101831415156134a257fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561354657fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613582578051825260208201915060208101905060208303925061355d565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135d557805182526020820191506020810190506020830392506135b0565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136898185613b5d565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060040154831115156136ed57600080fd5b8281600401819055508181600301819055505050505050565b600080600080600061372087604001518860600151613c70565b935061373486604001518760600151613c70565b925083831015151561374557600080fd5b8660400151841015151561375557fe5b8560400151831015151561376557fe5b8383039150613778828860000151613c70565b9050613788818860200151613b38565b50809150508094505050505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600481111561382057fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561385d5780518252602082019150602081019050602083039250613838565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156138b0578051825260208201915060208101905060208303925061388b565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156139685780518252602082019150602081019050602083039250613943565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139b88185613b5d565b925050509695505050505050565b60008060008060008060008789511115156139ef57806000809050965096505050505050613b31565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613acf57600080fd5b505afa158015613ae3573d6000803e3d6000fd5b505050506040513d6020811015613af957600080fd5b810190808051906020019092919050505092506000831480613b1b5750828511155b15613b2557600093505b80849650965050505050505b9250929050565b600080828411613b4d57600084819150613b52565b828403835b915091509250929050565b600060418251141515613b6f57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613b9f57601b810190505b601b8160ff161480613bb45750601c8160ff16145b1515613bbf57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613c1c573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613c6457600080fd5b83935050505092915050565b600080828401905083811015613ca6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613ca8565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058201489955e88bee604f7bdb80f49f64ba0ca204653856bbbd00c6461444dd7e4db0029", - "bin-runtime": "608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063c203d51e116100ca578063f20a440311610099578063f20a440314610d22578063f5c6a22914610d84578063fadc554b14610e24578063fc0c546a14610f5b578063fe49ba1c14610fa557610218565b8063c203d51e14610a7e578063db45479b14610b18578063e5949b5d14610c1b578063ee4516d914610c7257610218565b80639cadb159116101065780639cadb15914610910578063b32c65c8146109bb578063b7506d7014610a3e578063b8378f7514610a6057610218565b80637c4734f414610706578063838d6e051461077e5780638723423714610815578063938bcd671461089857610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611027565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f5565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a2565b6040518082815260200191505060405180910390f35b610424611768565b005b61042e611803565b6040518082815260200191505060405180910390f35b61044c611809565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049661182f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e0611855565b6040518082815260200191505060405180910390f35b6104fe61185b565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b8101908080359060200190929190505050611868565b6040518082815260200191505060405180910390f35b61055e611880565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061188c565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118a0565b005b610676611cf8565b6040518082815260200191505060405180910390f35b610694611cfe565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d22565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d35565b6040518082815260200191505060405180910390f35b6107ea6004803603606081101561079457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f77565b6040518083815260200182600481111561080057fe5b60ff1681526020019250505060405180910390f35b61081d61206a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085d578082015181840152602081019050610842565b50505050905090810190601f16801561088a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108fa600480360360408110156108ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a3565b6040518082815260200191505060405180910390f35b6109b9600480360361012081101561092757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612182565b005b6109c36126a6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a035780820151818401526020810190506109e8565b50505050905090810190601f168015610a305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a466126df565b604051808215151515815260200191505060405180910390f35b610a686126f2565b6040518082815260200191505060405180910390f35b610afe600480360360a0811015610a9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506126f8565b604051808215151515815260200191505060405180910390f35b610c19600480360360c0811015610b2e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610b9357600080fd5b820183602082011115610ba557600080fd5b80359060200191846001830284011164010000000083111715610bc757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061277d565b005b610c4760048036036020811015610c3157600080fd5b8101908080359060200190929190505050612939565b60405180838152602001826004811115610c5d57fe5b60ff1681526020019250505060405180910390f35b610cde60048036036060811015610c8857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061296a565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610d8260048036036080811015610d3857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a3f565b005b610e0e600480360360c0811015610d9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a69565b6040518082815260200191505060405180910390f35b610f596004803603610100811015610e3b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ec057600080fd5b820183602082011115610ed257600080fd5b80359060200191846001830284011164010000000083111715610ef457600080fd5b909192939192939080359060200190640100000000811115610f1557600080fd5b820183602082011115610f2757600080fd5b80359060200191846001830284011164010000000083111715610f4957600080fd5b9091929391929390505050612ba5565b005b610f63612e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61101160048036036060811015610fbb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e88565b6040518082815260200191505060405180910390f35b61103183836120a3565b841415151561103f57600080fd5b6000600481111561104c57fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff16600481111561107b57fe5b14151561108757600080fd5b6000815111151561109757600080fd5b60008060008060006110a886612f7b565b80945081955050506110bb89888a612e88565b94506000600960008781526020019081526020016000209050806001015492508481600001541415156110ed57600080fd5b6000831115156110fc57600080fd5b6111068484613290565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112bd576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561127657600080fd5b505af115801561128a573d6000803e3d6000fd5b505050506040513d60208110156112a057600080fd5b810190808051906020019092919050505015156112bc57600080fd5b5b60008211156113d1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b505050506040513d60208110156113b457600080fd5b810190808051906020019092919050505015156113d057600080fd5b5b8183101515156113dd57fe5b8383101515156113e957fe5b50505050505050505050565b6000801515600660149054906101000a900460ff16151514151561141857600080fd5b81600354811015151561142a57600080fd5b600454811115151561143b57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d602081101561152c57600080fd5b810190808051906020019092919050505010151561154957600080fd5b600160056000828254019250508190555060055490506115698787611d35565b91506000600860008481526020019081526020016000205414151561158d57600080fd5b8060086000848152602001908152602001600020819055506000600760008381526020019081526020016000209050600081600001541415156115cc57fe5b600060048111156115d957fe5b8160010160009054906101000a900460ff1660048111156115f657fe5b1415156115ff57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561162957fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806116af84846120a3565b9050600060076000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061175c82826132a9565b94505050505092915050565b60001515600660149054906101000a900460ff16151514151561178a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117e657600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b61189985858585856132ca565b5050505050565b60001515600660149054906101000a900460ff1615151415156118c257600080fd5b83600160048111156118d057fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118ff57fe5b14151561190b57600080fd5b61191584836120a3565b8514151561192257600080fd5b60008311151561193157600080fd5b67010a741a46278000831115151561194857600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611a0457600080fd5b878511151515611a1357600080fd5b8785836000015401141515611a2457fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b81019080805190602001909291905050500111151515611b3257600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b5b57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ca657600080fd5b505af1158015611cba573d6000803e3d6000fd5b505050506040513d6020811015611cd057600080fd5b81019080805190602001909291905050501515611cec57600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d7257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611dae57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611de957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611ec9578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f71565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611fb757fe5b816004811115611fc357fe5b148015611fd05750600089115b8015611fde57506005548911155b156120545760039050611ff2898989612e88565b935060006009600086815260200190815260200160002090506120168a898b612e88565b9350600060096000868152602001908152602001600020905060008260010154148015612047575060008160010154145b1561205157600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120e057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561211c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561215757600080fd5b60006121638484611d35565b9050600860008281526020019081526020016000205491505092915050565b61218c88856120a3565b8914151561219957600080fd5b60006121a58986611d35565b90506000600760008c81526020019081526020016000209050600260048111156121cb57fe5b8160010160009054906101000a900460ff1660048111156121e857fe5b1415156121f457600080fd5b43816000015410151561220657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061229c828c8c8c613328565b15156122a757600080fd5b6122b381888888613328565b15156122be57600080fd5b6122cc828c8c848b8b6133b1565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff0219169055505060086000858152602001908152602001600020600090556124228d8d8a8d8d6132ca565b61242f8d898e89896132ca565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b1115612583576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561253c57600080fd5b505af1158015612550573d6000803e3d6000fd5b505050506040513d602081101561256657600080fd5b8101908080519060200190929190505050151561258257600080fd5b5b6000871115612697576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561265057600080fd5b505af1158015612664573d6000803e3d6000fd5b505050506040513d602081101561267a57600080fd5b8101908080519060200190929190505050151561269657600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b60008061270587876120a3565b9050600060076000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061276f81888888613328565b935050505095945050505050565b856001600481111561278b57fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156127ba57fe5b1415156127c657600080fd5b6127d033876120a3565b871415156127dd57600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561281657fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128e9576128a089888888886134c0565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156128dc57600080fd5b6128e88183888a613696565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506129d88c8c8c612e88565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6000600760008681526020019081526020016000209050612a6281858585613696565b5050505050565b600080612a7688866120a3565b9050600060076000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b21613cb1565b612b29613cb1565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a826060018181525050826000015481600001818152505082600101548160200181815250508881604001818152505087816060018181525050612b938282613706565b96505050505050509695505050505050565b612baf89896120a3565b8a141515612bbc57600080fd5b60006001028714151515612bcf57600080fd5b600086111515612bde57600080fd5b6000806000600760008e8152602001908152602001600020905060026004811115612c0557fe5b8160010160009054906101000a900460ff166004811115612c2257fe5b141515612c2e57600080fd5b43816000015410151515612c4157600080fd5b612cd78d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061379a565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d1357600080fd5b612d648d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134c0565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612da057600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e0257600080fd5b612e0e828e8c8e613696565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612ec557600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612f9257fe5b06141515612f9f57600080fd5b600080600080600060606001606088811515612fb757fe5b0401604051908082528060200260200182016040528015612fe75781602001602082028038833980820191505090505b509050602095505b86861015613042576130018a876139c6565b80955081945050508385019450828160608881151561301c57fe5b0481518110151561302957fe5b9060200190602002018181525050606086019550612fef565b60608781151561304e57fe5b0496505b600187111561326357600060028881151561306957fe5b061415156130af57806001880381518110151561308257fe5b90602001906020020151818881518110151561309a57fe5b90602001906020020181815250506001870196505b600095505b6001870386101561324f5780600187018151811015156130d057fe5b9060200190602002015181878151811015156130e857fe5b90602001906020020151141561311757808681518110151561310657fe5b90602001906020020151925061321b565b806001870181518110151561312857fe5b90602001906020020151818781518110151561314057fe5b9060200190602002015110156131b757808681518110151561315e57fe5b90602001906020020151816001880181518110151561317957fe5b90602001906020020151604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925061321a565b80600187018151811015156131c857fe5b9060200190602002015181878151811015156131e057fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561322957fe5b0481518110151561323657fe5b90602001906020020181815250506002860195506130b4565b60028681151561325b57fe5b049650613052565b80600081518110151561327257fe5b90602001906020020151915081859850985050505050505050915091565b600081831161329f57826132a1565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214806132dc5750600060010281145b156132e657613321565b60006132f3868686612e88565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b60008060010285600301541480156133405750600084145b801561334c5750600083145b801561335b5750600060010282145b1561336957600190506133a9565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006133c4613cb1565b6133cc613cb1565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506134368f8d6132a9565b92506134428282613706565b945061344e8584613290565b9450848303935061345f858b613b38565b809b508196505050613471848e613b38565b809e50819550505082851115151561348557fe5b82841115151561349157fe5b898d8587010101831415156134a257fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561354657fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613582578051825260208201915060208101905060208303925061355d565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135d557805182526020820191506020810190506020830392506135b0565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136898185613b5d565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060040154831115156136ed57600080fd5b8281600401819055508181600301819055505050505050565b600080600080600061372087604001518860600151613c70565b935061373486604001518760600151613c70565b925083831015151561374557600080fd5b8660400151841015151561375557fe5b8560400151831015151561376557fe5b8383039150613778828860000151613c70565b9050613788818860200151613b38565b50809150508094505050505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600481111561382057fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561385d5780518252602082019150602081019050602083039250613838565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156138b0578051825260208201915060208101905060208303925061388b565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156139685780518252602082019150602081019050602083039250613943565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139b88185613b5d565b925050509695505050505050565b60008060008060008060008789511115156139ef57806000809050965096505050505050613b31565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613acf57600080fd5b505afa158015613ae3573d6000803e3d6000fd5b505050506040513d6020811015613af957600080fd5b810190808051906020019092919050505092506000831480613b1b5750828511155b15613b2557600093505b80849650965050505050505b9250929050565b600080828411613b4d57600084819150613b52565b828403835b915091509250929050565b600060418251141515613b6f57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613b9f57601b810190505b601b8160ff161480613bb45750601c8160ff16145b1515613bbf57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613c1c573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613c6457600080fd5b83935050505092915050565b600080828401905083811015613ca6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613ca8565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058201489955e88bee604f7bdb80f49f64ba0ca204653856bbbd00c6461444dd7e4db0029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelAvailableDepositPublic\",\"outputs\":[{\"name\":\"total_available_deposit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"updateUnlockDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"to_verify\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"transferred_amount\",\"type\":\"uint256\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"verifyBalanceHashDataPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"updateBalanceProofDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"}],\"name\":\"getMaxPossibleReceivableAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkInternalStorageTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xd6a815ea4cc35ca8fbf9e64cae2d51bcad170cd242c3f6681d9c887d09e2b595\",\"urls\":[\"bzzr://61b2069b4a3ac87f37cf9f80db287817235e17f3833bd3dacbb95ef43353e5ce\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x71686981d22a38a532fe80a212d5801fe4b31b4eff1942b43d1186a7b25b3173\",\"urls\":[\"bzzr://b16b75506c7c7179656c010ed15fa5e1fb94d9e5a5f3f52f4dbfda3b4a0df5db\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a080620040e1833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b613ce580620003fc6000396000f3fe608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063c203d51e116100ca578063f20a440311610099578063f20a440314610d22578063f5c6a22914610d84578063fadc554b14610e24578063fc0c546a14610f5b578063fe49ba1c14610fa557610218565b8063c203d51e14610a7e578063db45479b14610b18578063e5949b5d14610c1b578063ee4516d914610c7257610218565b80639cadb159116101065780639cadb15914610910578063b32c65c8146109bb578063b7506d7014610a3e578063b8378f7514610a6057610218565b80637c4734f414610706578063838d6e051461077e5780638723423714610815578063938bcd671461089857610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611027565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f5565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061169b565b6040518082815260200191505060405180910390f35b610424611761565b005b61042e6117fc565b6040518082815260200191505060405180910390f35b61044c611802565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610496611828565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e061184e565b6040518082815260200191505060405180910390f35b6104fe611854565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b810190808035906020019092919050505061185a565b6040518082815260200191505060405180910390f35b61055e611872565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611878565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188c565b005b610676611cd7565b6040518082815260200191505060405180910390f35b610694611cdd565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d01565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d14565b6040518082815260200191505060405180910390f35b6107ea6004803603606081101561079457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f56565b6040518083815260200182600481111561080057fe5b60ff1681526020019250505060405180910390f35b61081d612049565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085d578082015181840152602081019050610842565b50505050905090810190601f16801561088a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108fa600480360360408110156108ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612082565b6040518082815260200191505060405180910390f35b6109b9600480360361012081101561092757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612161565b005b6109c3612685565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a035780820151818401526020810190506109e8565b50505050905090810190601f168015610a305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a466126be565b604051808215151515815260200191505060405180910390f35b610a686126d1565b6040518082815260200191505060405180910390f35b610afe600480360360a0811015610a9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506126d7565b604051808215151515815260200191505060405180910390f35b610c19600480360360c0811015610b2e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610b9357600080fd5b820183602082011115610ba557600080fd5b80359060200191846001830284011164010000000083111715610bc757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061275c565b005b610c4760048036036020811015610c3157600080fd5b8101908080359060200190929190505050612918565b60405180838152602001826004811115610c5d57fe5b60ff1681526020019250505060405180910390f35b610cde60048036036060811015610c8857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612949565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610d8260048036036080811015610d3857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a1e565b005b610e0e600480360360c0811015610d9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a48565b6040518082815260200191505060405180910390f35b610f596004803603610100811015610e3b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ec057600080fd5b820183602082011115610ed257600080fd5b80359060200191846001830284011164010000000083111715610ef457600080fd5b909192939192939080359060200190640100000000811115610f1557600080fd5b820183602082011115610f2757600080fd5b80359060200191846001830284011164010000000083111715610f4957600080fd5b9091929391929390505050612b84565b005b610f63612e42565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61101160048036036060811015610fbb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e67565b6040518082815260200191505060405180910390f35b6110318383612082565b841415151561103f57600080fd5b6000600481111561104c57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561107b57fe5b14151561108757600080fd5b6000815111151561109757600080fd5b60008060008060006110a886612f5a565b80945081955050506110bb89888a612e67565b94506000600b60008781526020019081526020016000209050806001015492508481600001541415156110ed57600080fd5b6000831115156110fc57600080fd5b611106848461326f565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112bd576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561127657600080fd5b505af115801561128a573d6000803e3d6000fd5b505050506040513d60208110156112a057600080fd5b810190808051906020019092919050505015156112bc57600080fd5b5b60008211156113d1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b505050506040513d60208110156113b457600080fd5b810190808051906020019092919050505015156113d057600080fd5b5b8183101515156113dd57fe5b8383101515156113e957fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561141857600080fd5b81600354811015151561142a57600080fd5b600454811115151561143b57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b810190808051906020019092919050505010151561154257600080fd5b600160076000828254019250508190555060075490506115628787611d14565b91506000600a60008481526020019081526020016000205414151561158657600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156115c557fe5b600060048111156115d257fe5b8160010160009054906101000a900460ff1660048111156115ef57fe5b1415156115f857fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561162257fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806116a88484612082565b9050600060096000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506117558282613288565b94505050505092915050565b60001515600860149054906101000a900460ff16151514151561178357600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117df57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b61188585858585856132a9565b5050505050565b60001515600860149054906101000a900460ff1615151415156118ae57600080fd5b83600160048111156118bc57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118eb57fe5b1415156118f757600080fd5b6119018483612082565b8514151561190e57600080fd5b60008311151561191d57600080fd5b600554831115151561192e57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156119ea57600080fd5b8785111515156119f957600080fd5b8785836000015401141515611a0a57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ac857600080fd5b505afa158015611adc573d6000803e3d6000fd5b505050506040513d6020811015611af257600080fd5b81019080805190602001909291905050500111151515611b1157600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b3a57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c8557600080fd5b505af1158015611c99573d6000803e3d6000fd5b505050506040513d6020811015611caf57600080fd5b81019080805190602001909291905050501515611ccb57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d5157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d8d57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611dc857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611ea8578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f50565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f9657fe5b816004811115611fa257fe5b148015611faf5750600089115b8015611fbd57506007548911155b156120335760039050611fd1898989612e67565b93506000600b60008681526020019081526020016000209050611ff58a898b612e67565b93506000600b6000868152602001908152602001600020905060008260010154148015612026575060008160010154145b1561203057600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120bf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120fb57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561213657600080fd5b60006121428484611d14565b9050600a60008281526020019081526020016000205491505092915050565b61216b8885612082565b8914151561217857600080fd5b60006121848986611d14565b90506000600960008c81526020019081526020016000209050600260048111156121aa57fe5b8160010160009054906101000a900460ff1660048111156121c757fe5b1415156121d357600080fd5b4381600001541015156121e557600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061227b828c8c8c613307565b151561228657600080fd5b61229281888888613307565b151561229d57600080fd5b6122ab828c8c848b8b613390565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556124018d8d8a8d8d6132a9565b61240e8d898e89896132a9565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b1115612562576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251b57600080fd5b505af115801561252f573d6000803e3d6000fd5b505050506040513d602081101561254557600080fd5b8101908080519060200190929190505050151561256157600080fd5b5b6000871115612676576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262f57600080fd5b505af1158015612643573d6000803e3d6000fd5b505050506040513d602081101561265957600080fd5b8101908080519060200190929190505050151561267557600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b6000806126e48787612082565b9050600060096000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061274e81888888613307565b935050505095945050505050565b856001600481111561276a57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561279957fe5b1415156127a557600080fd5b6127af3387612082565b871415156127bc57600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156127f557fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128c85761287f898888888861349f565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156128bb57600080fd5b6128c78183888a613675565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506129b78c8c8c612e67565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6000600960008681526020019081526020016000209050612a4181858585613675565b5050505050565b600080612a558886612082565b9050600060096000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b00613c90565b612b08613c90565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a826060018181525050826000015481600001818152505082600101548160200181815250508881604001818152505087816060018181525050612b7282826136e5565b96505050505050509695505050505050565b612b8e8989612082565b8a141515612b9b57600080fd5b60006001028714151515612bae57600080fd5b600086111515612bbd57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612be457fe5b8160010160009054906101000a900460ff166004811115612c0157fe5b141515612c0d57600080fd5b43816000015410151515612c2057600080fd5b612cb68d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613779565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612cf257600080fd5b612d438d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061349f565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612d7f57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612de157600080fd5b612ded828e8c8e613675565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612ea457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612f7157fe5b06141515612f7e57600080fd5b600080600080600060606001606088811515612f9657fe5b0401604051908082528060200260200182016040528015612fc65781602001602082028038833980820191505090505b509050602095505b8686101561302157612fe08a876139a5565b809550819450505083850194508281606088811515612ffb57fe5b0481518110151561300857fe5b9060200190602002018181525050606086019550612fce565b60608781151561302d57fe5b0496505b600187111561324257600060028881151561304857fe5b0614151561308e57806001880381518110151561306157fe5b90602001906020020151818881518110151561307957fe5b90602001906020020181815250506001870196505b600095505b6001870386101561322e5780600187018151811015156130af57fe5b9060200190602002015181878151811015156130c757fe5b9060200190602002015114156130f65780868151811015156130e557fe5b9060200190602002015192506131fa565b806001870181518110151561310757fe5b90602001906020020151818781518110151561311f57fe5b90602001906020020151101561319657808681518110151561313d57fe5b90602001906020020151816001880181518110151561315857fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092506131f9565b80600187018151811015156131a757fe5b9060200190602002015181878151811015156131bf57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561320857fe5b0481518110151561321557fe5b9060200190602002018181525050600286019550613093565b60028681151561323a57fe5b049650613031565b80600081518110151561325157fe5b90602001906020020151915081859850985050505050505050915091565b600081831161327e5782613280565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214806132bb5750600060010281145b156132c557613300565b60006132d2868686612e67565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600080600102856003015414801561331f5750600084145b801561332b5750600083145b801561333a5750600060010282145b156133485760019050613388565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006133a3613c90565b6133ab613c90565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506134158f8d613288565b925061342182826136e5565b945061342d858461326f565b9450848303935061343e858b613b17565b809b508196505050613450848e613b17565b809e50819550505082851115151561346457fe5b82841115151561347057fe5b898d85870101018314151561348157fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561352557fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613561578051825260208201915060208101905060208303925061353c565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135b4578051825260208201915060208101905060208303925061358f565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136688185613b3c565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060040154831115156136cc57600080fd5b8281600401819055508181600301819055505050505050565b60008060008060006136ff87604001518860600151613c4f565b935061371386604001518760600151613c4f565b925083831015151561372457600080fd5b8660400151841015151561373457fe5b8560400151831015151561374457fe5b8383039150613757828860000151613c4f565b9050613767818860200151613b17565b50809150508094505050505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156137ff57fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561383c5780518252602082019150602081019050602083039250613817565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561388f578051825260208201915060208101905060208303925061386a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156139475780518252602082019150602081019050602083039250613922565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139978185613b3c565b925050509695505050505050565b60008060008060008060008789511115156139ce57806000809050965096505050505050613b10565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613aae57600080fd5b505afa158015613ac2573d6000803e3d6000fd5b505050506040513d6020811015613ad857600080fd5b810190808051906020019092919050505092506000831480613afa5750828511155b15613b0457600093505b80849650965050505050505b9250929050565b600080828411613b2c57600084819150613b31565b828403835b915091509250929050565b600060418251141515613b4e57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613b7e57601b810190505b601b8160ff161480613b935750601c8160ff16145b1515613b9e57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613bfb573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613c4357600080fd5b83935050505092915050565b600080828401905083811015613c85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613c87565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058202ad54ed37dc4d307df5eca98ff824c92a47daec4290d6a557d6093a96a1e32c70029", + "bin-runtime": "608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063c203d51e116100ca578063f20a440311610099578063f20a440314610d22578063f5c6a22914610d84578063fadc554b14610e24578063fc0c546a14610f5b578063fe49ba1c14610fa557610218565b8063c203d51e14610a7e578063db45479b14610b18578063e5949b5d14610c1b578063ee4516d914610c7257610218565b80639cadb159116101065780639cadb15914610910578063b32c65c8146109bb578063b7506d7014610a3e578063b8378f7514610a6057610218565b80637c4734f414610706578063838d6e051461077e5780638723423714610815578063938bcd671461089857610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611027565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f5565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061169b565b6040518082815260200191505060405180910390f35b610424611761565b005b61042e6117fc565b6040518082815260200191505060405180910390f35b61044c611802565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610496611828565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e061184e565b6040518082815260200191505060405180910390f35b6104fe611854565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b810190808035906020019092919050505061185a565b6040518082815260200191505060405180910390f35b61055e611872565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611878565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188c565b005b610676611cd7565b6040518082815260200191505060405180910390f35b610694611cdd565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d01565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d14565b6040518082815260200191505060405180910390f35b6107ea6004803603606081101561079457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f56565b6040518083815260200182600481111561080057fe5b60ff1681526020019250505060405180910390f35b61081d612049565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085d578082015181840152602081019050610842565b50505050905090810190601f16801561088a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108fa600480360360408110156108ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612082565b6040518082815260200191505060405180910390f35b6109b9600480360361012081101561092757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612161565b005b6109c3612685565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a035780820151818401526020810190506109e8565b50505050905090810190601f168015610a305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a466126be565b604051808215151515815260200191505060405180910390f35b610a686126d1565b6040518082815260200191505060405180910390f35b610afe600480360360a0811015610a9457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506126d7565b604051808215151515815260200191505060405180910390f35b610c19600480360360c0811015610b2e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610b9357600080fd5b820183602082011115610ba557600080fd5b80359060200191846001830284011164010000000083111715610bc757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061275c565b005b610c4760048036036020811015610c3157600080fd5b8101908080359060200190929190505050612918565b60405180838152602001826004811115610c5d57fe5b60ff1681526020019250505060405180910390f35b610cde60048036036060811015610c8857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612949565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610d8260048036036080811015610d3857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a1e565b005b610e0e600480360360c0811015610d9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a48565b6040518082815260200191505060405180910390f35b610f596004803603610100811015610e3b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ec057600080fd5b820183602082011115610ed257600080fd5b80359060200191846001830284011164010000000083111715610ef457600080fd5b909192939192939080359060200190640100000000811115610f1557600080fd5b820183602082011115610f2757600080fd5b80359060200191846001830284011164010000000083111715610f4957600080fd5b9091929391929390505050612b84565b005b610f63612e42565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61101160048036036060811015610fbb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e67565b6040518082815260200191505060405180910390f35b6110318383612082565b841415151561103f57600080fd5b6000600481111561104c57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561107b57fe5b14151561108757600080fd5b6000815111151561109757600080fd5b60008060008060006110a886612f5a565b80945081955050506110bb89888a612e67565b94506000600b60008781526020019081526020016000209050806001015492508481600001541415156110ed57600080fd5b6000831115156110fc57600080fd5b611106848461326f565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112bd576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561127657600080fd5b505af115801561128a573d6000803e3d6000fd5b505050506040513d60208110156112a057600080fd5b810190808051906020019092919050505015156112bc57600080fd5b5b60008211156113d1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b505050506040513d60208110156113b457600080fd5b810190808051906020019092919050505015156113d057600080fd5b5b8183101515156113dd57fe5b8383101515156113e957fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561141857600080fd5b81600354811015151561142a57600080fd5b600454811115151561143b57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b810190808051906020019092919050505010151561154257600080fd5b600160076000828254019250508190555060075490506115628787611d14565b91506000600a60008481526020019081526020016000205414151561158657600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156115c557fe5b600060048111156115d257fe5b8160010160009054906101000a900460ff1660048111156115ef57fe5b1415156115f857fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561162257fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806116a88484612082565b9050600060096000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506117558282613288565b94505050505092915050565b60001515600860149054906101000a900460ff16151514151561178357600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117df57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b61188585858585856132a9565b5050505050565b60001515600860149054906101000a900460ff1615151415156118ae57600080fd5b83600160048111156118bc57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118eb57fe5b1415156118f757600080fd5b6119018483612082565b8514151561190e57600080fd5b60008311151561191d57600080fd5b600554831115151561192e57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156119ea57600080fd5b8785111515156119f957600080fd5b8785836000015401141515611a0a57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ac857600080fd5b505afa158015611adc573d6000803e3d6000fd5b505050506040513d6020811015611af257600080fd5b81019080805190602001909291905050500111151515611b1157600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b3a57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c8557600080fd5b505af1158015611c99573d6000803e3d6000fd5b505050506040513d6020811015611caf57600080fd5b81019080805190602001909291905050501515611ccb57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d5157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d8d57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611dc857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611ea8578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f50565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f9657fe5b816004811115611fa257fe5b148015611faf5750600089115b8015611fbd57506007548911155b156120335760039050611fd1898989612e67565b93506000600b60008681526020019081526020016000209050611ff58a898b612e67565b93506000600b6000868152602001908152602001600020905060008260010154148015612026575060008160010154145b1561203057600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120bf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120fb57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561213657600080fd5b60006121428484611d14565b9050600a60008281526020019081526020016000205491505092915050565b61216b8885612082565b8914151561217857600080fd5b60006121848986611d14565b90506000600960008c81526020019081526020016000209050600260048111156121aa57fe5b8160010160009054906101000a900460ff1660048111156121c757fe5b1415156121d357600080fd5b4381600001541015156121e557600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061227b828c8c8c613307565b151561228657600080fd5b61229281888888613307565b151561229d57600080fd5b6122ab828c8c848b8b613390565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556124018d8d8a8d8d6132a9565b61240e8d898e89896132a9565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b1115612562576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251b57600080fd5b505af115801561252f573d6000803e3d6000fd5b505050506040513d602081101561254557600080fd5b8101908080519060200190929190505050151561256157600080fd5b5b6000871115612676576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262f57600080fd5b505af1158015612643573d6000803e3d6000fd5b505050506040513d602081101561265957600080fd5b8101908080519060200190929190505050151561267557600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b6000806126e48787612082565b9050600060096000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061274e81888888613307565b935050505095945050505050565b856001600481111561276a57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561279957fe5b1415156127a557600080fd5b6127af3387612082565b871415156127bc57600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156127f557fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128c85761287f898888888861349f565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156128bb57600080fd5b6128c78183888a613675565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506129b78c8c8c612e67565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6000600960008681526020019081526020016000209050612a4181858585613675565b5050505050565b600080612a558886612082565b9050600060096000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b00613c90565b612b08613c90565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a826060018181525050826000015481600001818152505082600101548160200181815250508881604001818152505087816060018181525050612b7282826136e5565b96505050505050509695505050505050565b612b8e8989612082565b8a141515612b9b57600080fd5b60006001028714151515612bae57600080fd5b600086111515612bbd57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612be457fe5b8160010160009054906101000a900460ff166004811115612c0157fe5b141515612c0d57600080fd5b43816000015410151515612c2057600080fd5b612cb68d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613779565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612cf257600080fd5b612d438d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061349f565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612d7f57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612de157600080fd5b612ded828e8c8e613675565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612ea457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612f7157fe5b06141515612f7e57600080fd5b600080600080600060606001606088811515612f9657fe5b0401604051908082528060200260200182016040528015612fc65781602001602082028038833980820191505090505b509050602095505b8686101561302157612fe08a876139a5565b809550819450505083850194508281606088811515612ffb57fe5b0481518110151561300857fe5b9060200190602002018181525050606086019550612fce565b60608781151561302d57fe5b0496505b600187111561324257600060028881151561304857fe5b0614151561308e57806001880381518110151561306157fe5b90602001906020020151818881518110151561307957fe5b90602001906020020181815250506001870196505b600095505b6001870386101561322e5780600187018151811015156130af57fe5b9060200190602002015181878151811015156130c757fe5b9060200190602002015114156130f65780868151811015156130e557fe5b9060200190602002015192506131fa565b806001870181518110151561310757fe5b90602001906020020151818781518110151561311f57fe5b90602001906020020151101561319657808681518110151561313d57fe5b90602001906020020151816001880181518110151561315857fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092506131f9565b80600187018151811015156131a757fe5b9060200190602002015181878151811015156131bf57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561320857fe5b0481518110151561321557fe5b9060200190602002018181525050600286019550613093565b60028681151561323a57fe5b049650613031565b80600081518110151561325157fe5b90602001906020020151915081859850985050505050505050915091565b600081831161327e5782613280565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214806132bb5750600060010281145b156132c557613300565b60006132d2868686612e67565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600080600102856003015414801561331f5750600084145b801561332b5750600083145b801561333a5750600060010282145b156133485760019050613388565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006133a3613c90565b6133ab613c90565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506134158f8d613288565b925061342182826136e5565b945061342d858461326f565b9450848303935061343e858b613b17565b809b508196505050613450848e613b17565b809e50819550505082851115151561346457fe5b82841115151561347057fe5b898d85870101018314151561348157fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561352557fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613561578051825260208201915060208101905060208303925061353c565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135b4578051825260208201915060208101905060208303925061358f565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136688185613b3c565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060040154831115156136cc57600080fd5b8281600401819055508181600301819055505050505050565b60008060008060006136ff87604001518860600151613c4f565b935061371386604001518760600151613c4f565b925083831015151561372457600080fd5b8660400151841015151561373457fe5b8560400151831015151561374457fe5b8383039150613757828860000151613c4f565b9050613767818860200151613b17565b50809150508094505050505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156137ff57fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561383c5780518252602082019150602081019050602083039250613817565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561388f578051825260208201915060208101905060208303925061386a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156139475780518252602082019150602081019050602083039250613922565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139978185613b3c565b925050509695505050505050565b60008060008060008060008789511115156139ce57806000809050965096505050505050613b10565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613aae57600080fd5b505afa158015613ac2573d6000803e3d6000fd5b505050506040513d6020811015613ad857600080fd5b810190808051906020019092919050505092506000831480613afa5750828511155b15613b0457600093505b80849650965050505050505b9250929050565b600080828411613b2c57600084819150613b31565b828403835b915091509250929050565b600060418251141515613b4e57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613b7e57601b810190505b601b8160ff161480613b935750601c8160ff16145b1515613b9e57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613bfb573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613c4357600080fd5b83935050505092915050565b600080828401905083811015613c85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613c87565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058202ad54ed37dc4d307df5eca98ff824c92a47daec4290d6a557d6093a96a1e32c70029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelAvailableDepositPublic\",\"outputs\":[{\"name\":\"total_available_deposit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"updateUnlockDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"to_verify\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"transferred_amount\",\"type\":\"uint256\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"verifyBalanceHashDataPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"updateBalanceProofDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"}],\"name\":\"getMaxPossibleReceivableAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkInternalStorageTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe1aa470a48d5224a00781700a8f73742de9381972eb9e00a610c6df29d38069d\",\"urls\":[\"bzzr://6d12abf81b55d71ccb9751e2ce82f1ec21d254634def365a5947483142ad7c6f\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x133ea61d9961f2fbe43a516105f2e32b083fcecc10b07dde5dc25586a3ec4970\",\"urls\":[\"bzzr://1084b4782124511572c6aa2dd59d4e7c3f5249d6affaa78005524f7f9fb173f2\"]}},\"version\":1}" }, "TokenNetworkRegistry": { "abi": [ @@ -3999,25 +4007,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": false, - "inputs": [ - { - "name": "_token_address", - "type": "address" - } - ], - "name": "createERC20TokenNetwork", - "outputs": [ - { - "name": "token_network_address", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, { "constant": true, "inputs": [ @@ -4093,6 +4082,33 @@ "stateMutability": "view", "type": "function" }, + { + "constant": false, + "inputs": [ + { + "name": "_token_address", + "type": "address" + }, + { + "name": "_channel_participant_deposit_limit", + "type": "uint256" + }, + { + "name": "_token_network_deposit_limit", + "type": "uint256" + } + ], + "name": "createERC20TokenNetwork", + "outputs": [ + { + "name": "token_network_address", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": true, "inputs": [], @@ -4152,9 +4168,9 @@ "type": "event" } ], - "bin": "6080604052600060065534801561001557600080fd5b5060405160a0806144b5833981018060405260a081101561003557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505060008411151561007d57600080fd5b60008311151561008c57600080fd5b60008211151561009b57600080fd5b82821115156100a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156100e557600080fd5b6100fd856101be640100000000026401000000009004565b151561010857600080fd5b60008111151561011757600080fd5b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360018190555082600281905550816003819055508060048190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506101d1565b600080823b905060008111915050919050565b6142d5806101e06000396000f3fe608060405234801561001057600080fd5b50600436106100c6576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161008e5780637709bc7814610259578063b0228f1e146102b5578063b32c65c8146102d3578063b61c408314610356578063b8378f7514610374578063d0ad4bec14610392576100c6565b80630fabd9e7146100cb578063224df42f1461014f57806323aa81741461016d5780633af973b1146101b75780634cf71a04146101d5575b600080fd5b61010d600480360360208110156100e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61015761040f565b6040518082815260200191505060405180910390f35b610175610415565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bf61043b565b6040518082815260200191505060405180910390f35b610217600480360360208110156101eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610441565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61029b6004803603602081101561026f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061070c565b604051808215151515815260200191505060405180910390f35b6102bd61071f565b6040518082815260200191505060405180910390f35b6102db610725565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561031b578082015181840152602081019050610300565b50505050905090810190601f1680156103485780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035e61075e565b6040518082815260200191505060405180910390f35b61037c610764565b6040518082815260200191505060405180910390f35b61039a61076a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600060045460065410151561045557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156104ef57600080fd5b6001600654016006819055506000826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516105589061078f565b808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019650505050505050604051809103906000f080158015610625573d6000803e3d6000fd5b50905080915081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a381915050919050565b600080823b905060008111915050919050565b60045481565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b60065481565b60025481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613b0d8061079d8339019056fe60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160c08062003b0d833981018060405260c08110156200004e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515620000ce57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156200010b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200014857600080fd5b6000841115156200015857600080fd5b6000831115156200016857600080fd5b82821115156200017757600080fd5b620001918662000376640100000000026401000000009004565b15156200019d57600080fd5b620001b78562000376640100000000026401000000009004565b1515620001c357600080fd5b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600281905550826003819055508160048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002df57600080fd5b505afa158015620002f4573d6000803e3d6000fd5b505050506040513d60208110156200030b57600080fd5b81019080805190602001909291905050501115156200032957600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000389565b600080823b905060008111915050919050565b61377480620003996000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113d5565b005b61037f611470565b6040518082815260200191505060405180910390f35b61039d611476565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e761149c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114c2565b6040518082815260200191505060405180910390f35b61044f6114c8565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114d5565b6040518082815260200191505060405180910390f35b6104af6114ed565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f9565b005b610545611951565b6040518082815260200191505060405180910390f35b610563611957565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061197b565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061198e565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd0565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611cc3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cfc565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611ddb565b005b6108926122ff565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612338565b604051808215151515815260200191505060405180910390f35b61093761234b565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612351565b005b610a7c60048036036020811015610a6657600080fd5b810190808035906020019092919050505061250d565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061253e565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b9091929391929390505050612613565b005b610c966128d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f6565b6040518082815260200191505060405180910390f35b610d648383611cfc565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129e9565b8094508195505050610dee89888a6128f6565b9450600060096000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cfe565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600660149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d602081101561125f57600080fd5b810190808051906020019092919050505010151561127c57600080fd5b6001600560008282540192505081905550600554905061129c878761198e565b9150600060086000848152602001908152602001600020541415156112c057600080fd5b8060086000848152602001908152602001600020819055506000600760008381526020019081526020016000209050600081600001541415156112ff57fe5b6000600481111561130c57fe5b8160010160009054906101000a900460ff16600481111561132957fe5b14151561133257fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135c57fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600660149054906101000a900460ff1615151415156113f757600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145357600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff16151514151561151b57600080fd5b836001600481111561152957fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561155857fe5b14151561156457600080fd5b61156e8483611cfc565b8514151561157b57600080fd5b60008311151561158a57600080fd5b67010a741a4627800083111515156115a157600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561165d57600080fd5b87851115151561166c57600080fd5b878583600001540114151561167d57fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561174257600080fd5b505afa158015611756573d6000803e3d6000fd5b505050506040513d602081101561176c57600080fd5b8101908080519060200190929190505050011115151561178b57600080fd5b87826000018190555080600001548260000154019350816000015484101515156117b457600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b505050506040513d602081101561192957600080fd5b8101908080519060200190929190505050151561194557600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119cb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a0757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a4257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b22578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611bca565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611c1057fe5b816004811115611c1c57fe5b148015611c295750600089115b8015611c3757506005548911155b15611cad5760039050611c4b8989896128f6565b93506000600960008681526020019081526020016000209050611c6f8a898b6128f6565b9350600060096000868152602001908152602001600020905060008260010154148015611ca0575060008160010154145b15611caa57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d3957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d7557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611db057600080fd5b6000611dbc848461198e565b9050600860008281526020019081526020016000205491505092915050565b611de58885611cfc565b89141515611df257600080fd5b6000611dfe898661198e565b90506000600760008c8152602001908152602001600020905060026004811115611e2457fe5b8160010160009054906101000a900460ff166004811115611e4157fe5b141515611e4d57600080fd5b438160000154101515611e5f57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ef5828c8c8c612d17565b1515611f0057600080fd5b611f0c81888888612d17565b1515611f1757600080fd5b611f25828c8c848b8b612da0565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600860008581526020019081526020016000206000905561207b8d8d8a8d8d612eaf565b6120888d898e8989612eaf565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121dc576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b810190808051906020019092919050505015156121db57600080fd5b5b60008711156122f0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122a957600080fd5b505af11580156122bd573d6000803e3d6000fd5b505050506040513d60208110156122d357600080fd5b810190808051906020019092919050505015156122ef57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b856001600481111561235f57fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561238e57fe5b14151561239a57600080fd5b6123a43387611cfc565b871415156123b157600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123ea57fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156124bd576124748988888888612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156124b057600080fd5b6124bc8183888a6130e3565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506125ac8c8c8c6128f6565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b61261d8989611cfc565b8a14151561262a57600080fd5b6000600102871415151561263d57600080fd5b60008611151561264c57600080fd5b6000806000600760008e815260200190815260200160002090506002600481111561267357fe5b8160010160009054906101000a900460ff16600481111561269057fe5b14151561269c57600080fd5b438160000154101515156126af57600080fd5b6127458d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613153565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561278157600080fd5b6127d28d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561280e57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561287057600080fd5b61287c828e8c8e6130e3565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561293357600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612a0057fe5b06141515612a0d57600080fd5b600080600080600060606001606088811515612a2557fe5b0401604051908082528060200260200182016040528015612a555781602001602082028038833980820191505090505b509050602095505b86861015612ab057612a6f8a8761337f565b809550819450505083850194508281606088811515612a8a57fe5b04815181101515612a9757fe5b9060200190602002018181525050606086019550612a5d565b606087811515612abc57fe5b0496505b6001871115612cd1576000600288811515612ad757fe5b06141515612b1d578060018803815181101515612af057fe5b906020019060200201518188815181101515612b0857fe5b90602001906020020181815250506001870196505b600095505b60018703861015612cbd578060018701815181101515612b3e57fe5b906020019060200201518187815181101515612b5657fe5b906020019060200201511415612b85578086815181101515612b7457fe5b906020019060200201519250612c89565b8060018701815181101515612b9657fe5b906020019060200201518187815181101515612bae57fe5b906020019060200201511015612c25578086815181101515612bcc57fe5b906020019060200201518160018801815181101515612be757fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c88565b8060018701815181101515612c3657fe5b906020019060200201518187815181101515612c4e57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c9757fe5b04815181101515612ca457fe5b9060200190602002018181525050600286019550612b22565b600286811515612cc957fe5b049650612ac0565b806000815181101515612ce057fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612d0d5782612d0f565b815b905092915050565b6000806001028560030154148015612d2f5750600084145b8015612d3b5750600083145b8015612d4a5750600060010282145b15612d585760019050612d98565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612db361371f565b612dbb61371f565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e258f8d6134f1565b9250612e318282613512565b9450612e3d8584612cfe565b94508483039350612e4e858b6135a6565b809b508196505050612e60848e6135a6565b809e508195505050828511151515612e7457fe5b828411151515612e8057fe5b898d858701010183141515612e9157fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ec15750600060010281145b15612ecb57612f06565b6000612ed88686866128f6565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f9357fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fcf5780518252602082019150602081019050602083039250612faa565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130225780518252602082019150602081019050602083039250612ffd565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130d681856135cb565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561313a57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131d957fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561321657805182526020820191506020810190506020830392506131f1565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132695780518252602082019150602081019050602083039250613244565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561332157805182526020820191506020810190506020830392506132fc565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061337181856135cb565b925050509695505050505050565b60008060008060008060008789511115156133a8578060008090509650965050505050506134ea565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561348857600080fd5b505afa15801561349c573d6000803e3d6000fd5b505050506040513d60208110156134b257600080fd5b8101908080519060200190929190505050925060008314806134d45750828511155b156134de57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061352c876040015188606001516136de565b9350613540866040015187606001516136de565b925083831015151561355157600080fd5b8660400151841015151561356157fe5b8560400151831015151561357157fe5b83830391506135848288600001516136de565b90506135948188602001516135a6565b50809150508094505050505092915050565b6000808284116135bb576000848191506135c0565b828403835b915091509250929050565b6000604182511415156135dd57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561360d57601b810190505b601b8160ff1614806136225750601c8160ff16145b151561362d57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561368a573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136d257600080fd5b83935050505092915050565b600080828401905083811015613714577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613716565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820656cdf73dc8613cacb88247f0856941db1d3229c66937c3f479c36811c177d7b0029a165627a7a72305820dee22cf0a4014f961cb15a6b0802efe3f26c5fbf322f88a509f2c184627647e30029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100c6576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161008e5780637709bc7814610259578063b0228f1e146102b5578063b32c65c8146102d3578063b61c408314610356578063b8378f7514610374578063d0ad4bec14610392576100c6565b80630fabd9e7146100cb578063224df42f1461014f57806323aa81741461016d5780633af973b1146101b75780634cf71a04146101d5575b600080fd5b61010d600480360360208110156100e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61015761040f565b6040518082815260200191505060405180910390f35b610175610415565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bf61043b565b6040518082815260200191505060405180910390f35b610217600480360360208110156101eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610441565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61029b6004803603602081101561026f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061070c565b604051808215151515815260200191505060405180910390f35b6102bd61071f565b6040518082815260200191505060405180910390f35b6102db610725565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561031b578082015181840152602081019050610300565b50505050905090810190601f1680156103485780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035e61075e565b6040518082815260200191505060405180910390f35b61037c610764565b6040518082815260200191505060405180910390f35b61039a61076a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600060045460065410151561045557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156104ef57600080fd5b6001600654016006819055506000826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516105589061078f565b808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019650505050505050604051809103906000f080158015610625573d6000803e3d6000fd5b50905080915081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a381915050919050565b600080823b905060008111915050919050565b60045481565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b60065481565b60025481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613b0d8061079d8339019056fe60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160c08062003b0d833981018060405260c08110156200004e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515620000ce57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156200010b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200014857600080fd5b6000841115156200015857600080fd5b6000831115156200016857600080fd5b82821115156200017757600080fd5b620001918662000376640100000000026401000000009004565b15156200019d57600080fd5b620001b78562000376640100000000026401000000009004565b1515620001c357600080fd5b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600281905550826003819055508160048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002df57600080fd5b505afa158015620002f4573d6000803e3d6000fd5b505050506040513d60208110156200030b57600080fd5b81019080805190602001909291905050501115156200032957600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000389565b600080823b905060008111915050919050565b61377480620003996000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113d5565b005b61037f611470565b6040518082815260200191505060405180910390f35b61039d611476565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e761149c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114c2565b6040518082815260200191505060405180910390f35b61044f6114c8565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114d5565b6040518082815260200191505060405180910390f35b6104af6114ed565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f9565b005b610545611951565b6040518082815260200191505060405180910390f35b610563611957565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061197b565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061198e565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd0565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611cc3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cfc565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611ddb565b005b6108926122ff565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612338565b604051808215151515815260200191505060405180910390f35b61093761234b565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612351565b005b610a7c60048036036020811015610a6657600080fd5b810190808035906020019092919050505061250d565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061253e565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b9091929391929390505050612613565b005b610c966128d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f6565b6040518082815260200191505060405180910390f35b610d648383611cfc565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129e9565b8094508195505050610dee89888a6128f6565b9450600060096000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cfe565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600660149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d602081101561125f57600080fd5b810190808051906020019092919050505010151561127c57600080fd5b6001600560008282540192505081905550600554905061129c878761198e565b9150600060086000848152602001908152602001600020541415156112c057600080fd5b8060086000848152602001908152602001600020819055506000600760008381526020019081526020016000209050600081600001541415156112ff57fe5b6000600481111561130c57fe5b8160010160009054906101000a900460ff16600481111561132957fe5b14151561133257fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135c57fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600660149054906101000a900460ff1615151415156113f757600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145357600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff16151514151561151b57600080fd5b836001600481111561152957fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561155857fe5b14151561156457600080fd5b61156e8483611cfc565b8514151561157b57600080fd5b60008311151561158a57600080fd5b67010a741a4627800083111515156115a157600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561165d57600080fd5b87851115151561166c57600080fd5b878583600001540114151561167d57fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561174257600080fd5b505afa158015611756573d6000803e3d6000fd5b505050506040513d602081101561176c57600080fd5b8101908080519060200190929190505050011115151561178b57600080fd5b87826000018190555080600001548260000154019350816000015484101515156117b457600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b505050506040513d602081101561192957600080fd5b8101908080519060200190929190505050151561194557600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119cb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a0757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a4257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b22578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611bca565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611c1057fe5b816004811115611c1c57fe5b148015611c295750600089115b8015611c3757506005548911155b15611cad5760039050611c4b8989896128f6565b93506000600960008681526020019081526020016000209050611c6f8a898b6128f6565b9350600060096000868152602001908152602001600020905060008260010154148015611ca0575060008160010154145b15611caa57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d3957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d7557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611db057600080fd5b6000611dbc848461198e565b9050600860008281526020019081526020016000205491505092915050565b611de58885611cfc565b89141515611df257600080fd5b6000611dfe898661198e565b90506000600760008c8152602001908152602001600020905060026004811115611e2457fe5b8160010160009054906101000a900460ff166004811115611e4157fe5b141515611e4d57600080fd5b438160000154101515611e5f57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ef5828c8c8c612d17565b1515611f0057600080fd5b611f0c81888888612d17565b1515611f1757600080fd5b611f25828c8c848b8b612da0565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600860008581526020019081526020016000206000905561207b8d8d8a8d8d612eaf565b6120888d898e8989612eaf565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121dc576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b810190808051906020019092919050505015156121db57600080fd5b5b60008711156122f0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122a957600080fd5b505af11580156122bd573d6000803e3d6000fd5b505050506040513d60208110156122d357600080fd5b810190808051906020019092919050505015156122ef57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b856001600481111561235f57fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561238e57fe5b14151561239a57600080fd5b6123a43387611cfc565b871415156123b157600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123ea57fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156124bd576124748988888888612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156124b057600080fd5b6124bc8183888a6130e3565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506125ac8c8c8c6128f6565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b61261d8989611cfc565b8a14151561262a57600080fd5b6000600102871415151561263d57600080fd5b60008611151561264c57600080fd5b6000806000600760008e815260200190815260200160002090506002600481111561267357fe5b8160010160009054906101000a900460ff16600481111561269057fe5b14151561269c57600080fd5b438160000154101515156126af57600080fd5b6127458d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613153565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561278157600080fd5b6127d28d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f0d565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561280e57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561287057600080fd5b61287c828e8c8e6130e3565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561293357600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612a0057fe5b06141515612a0d57600080fd5b600080600080600060606001606088811515612a2557fe5b0401604051908082528060200260200182016040528015612a555781602001602082028038833980820191505090505b509050602095505b86861015612ab057612a6f8a8761337f565b809550819450505083850194508281606088811515612a8a57fe5b04815181101515612a9757fe5b9060200190602002018181525050606086019550612a5d565b606087811515612abc57fe5b0496505b6001871115612cd1576000600288811515612ad757fe5b06141515612b1d578060018803815181101515612af057fe5b906020019060200201518188815181101515612b0857fe5b90602001906020020181815250506001870196505b600095505b60018703861015612cbd578060018701815181101515612b3e57fe5b906020019060200201518187815181101515612b5657fe5b906020019060200201511415612b85578086815181101515612b7457fe5b906020019060200201519250612c89565b8060018701815181101515612b9657fe5b906020019060200201518187815181101515612bae57fe5b906020019060200201511015612c25578086815181101515612bcc57fe5b906020019060200201518160018801815181101515612be757fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c88565b8060018701815181101515612c3657fe5b906020019060200201518187815181101515612c4e57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c9757fe5b04815181101515612ca457fe5b9060200190602002018181525050600286019550612b22565b600286811515612cc957fe5b049650612ac0565b806000815181101515612ce057fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612d0d5782612d0f565b815b905092915050565b6000806001028560030154148015612d2f5750600084145b8015612d3b5750600083145b8015612d4a5750600060010282145b15612d585760019050612d98565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612db361371f565b612dbb61371f565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e258f8d6134f1565b9250612e318282613512565b9450612e3d8584612cfe565b94508483039350612e4e858b6135a6565b809b508196505050612e60848e6135a6565b809e508195505050828511151515612e7457fe5b828411151515612e8057fe5b898d858701010183141515612e9157fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ec15750600060010281145b15612ecb57612f06565b6000612ed88686866128f6565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f9357fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fcf5780518252602082019150602081019050602083039250612faa565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130225780518252602082019150602081019050602083039250612ffd565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130d681856135cb565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561313a57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131d957fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561321657805182526020820191506020810190506020830392506131f1565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132695780518252602082019150602081019050602083039250613244565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561332157805182526020820191506020810190506020830392506132fc565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061337181856135cb565b925050509695505050505050565b60008060008060008060008789511115156133a8578060008090509650965050505050506134ea565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561348857600080fd5b505afa15801561349c573d6000803e3d6000fd5b505050506040513d60208110156134b257600080fd5b8101908080519060200190929190505050925060008314806134d45750828511155b156134de57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061352c876040015188606001516136de565b9350613540866040015187606001516136de565b925083831015151561355157600080fd5b8660400151841015151561356157fe5b8560400151831015151561357157fe5b83830391506135848288600001516136de565b90506135948188602001516135a6565b50809150508094505050505092915050565b6000808284116135bb576000848191506135c0565b828403835b915091509250929050565b6000604182511415156135dd57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561360d57601b810190505b601b8160ff1614806136225750601c8160ff16145b151561362d57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561368a573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136d257600080fd5b83935050505092915050565b600080828401905083811015613714577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613716565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820656cdf73dc8613cacb88247f0856941db1d3229c66937c3f479c36811c177d7b0029a165627a7a72305820dee22cf0a4014f961cb15a6b0802efe3f26c5fbf322f88a509f2c184627647e30029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"token_to_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"}],\"name\":\"createERC20TokenNetwork\",\"outputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"max_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_created\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry_address\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_secret_registry_address\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_max_token_networks\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"token_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token_network_address\",\"type\":\"address\"}],\"name\":\"TokenNetworkCreated\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"createERC20TokenNetwork(address)\":{\"params\":{\"_token_address\":\"Ethereum address of an already deployed token, to be used in the new TokenNetwork contract.\"}}},\"title\":\"TokenNetworkRegistry\"},\"userdoc\":{\"methods\":{\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"createERC20TokenNetwork(address)\":{\"notice\":\"Deploy a new TokenNetwork contract for the Token deployed at `_token_address`.\"}},\"notice\":\"The TokenNetwork Registry deploys new TokenNetwork contracts for the Raiden Network protocol.\"}},\"settings\":{\"compilationTarget\":{\"contracts/raiden/TokenNetworkRegistry.sol\":\"TokenNetworkRegistry\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xd6a815ea4cc35ca8fbf9e64cae2d51bcad170cd242c3f6681d9c887d09e2b595\",\"urls\":[\"bzzr://61b2069b4a3ac87f37cf9f80db287817235e17f3833bd3dacbb95ef43353e5ce\"]},\"contracts/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0x67cec4174f629b5c4c046b6a78cc1ac83bf322a4ea0bd0be2f447a34cbd33b59\",\"urls\":[\"bzzr://de30e2d5cda539efc15b47c3f26899a043998453b05c9a58f6c32609f744947a\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]}},\"version\":1}" + "bin": "6080604052600060065534801561001557600080fd5b5060405160a080614511833981018060405260a081101561003557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505060008411151561007d57600080fd5b60008311151561008c57600080fd5b60008211151561009b57600080fd5b82821115156100a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156100e557600080fd5b6100fd856101be640100000000026401000000009004565b151561010857600080fd5b60008111151561011757600080fd5b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360018190555082600281905550816003819055508060048190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506101d1565b600080823b905060008111915050919050565b614331806101e06000396000f3fe608060405234801561001057600080fd5b50600436106100c6576000357c010000000000000000000000000000000000000000000000000000000090048063b0228f1e1161008e578063b0228f1e14610231578063b32c65c81461024f578063b61c4083146102d2578063b8378f75146102f0578063cc2799c71461030e578063d0ad4bec146103a6576100c6565b80630fabd9e7146100cb578063224df42f1461014f57806323aa81741461016d5780633af973b1146101b75780637709bc78146101d5575b600080fd5b61010d600480360360208110156100e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103f0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610157610423565b6040518082815260200191505060405180910390f35b610175610429565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bf61044f565b6040518082815260200191505060405180910390f35b610217600480360360208110156101eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610455565b604051808215151515815260200191505060405180910390f35b610239610468565b6040518082815260200191505060405180910390f35b61025761046e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029757808201518184015260208101905061027c565b50505050905090810190601f1680156102c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102da6104a7565b6040518082815260200191505060405180910390f35b6102f86104ad565b6040518082815260200191505060405180910390f35b6103646004803603606081101561032457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506104b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103ae610790565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600080823b905060008111915050919050565b60045481565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b60065481565b60025481565b60006004546006541015156104c757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561056157600080fd5b6001600654016006819055506000846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689896040516105cc906107b5565b808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200198505050505050505050604051809103906000f0801580156106a7573d6000803e3d6000fd5b50905080915081600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a3819150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613b4280620007c48339019056fe60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516101008062003b4283398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b61375380620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113ce565b005b61037f611469565b6040518082815260200191505060405180910390f35b61039d61146f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611495565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114bb565b6040518082815260200191505060405180910390f35b61044f6114c1565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114c7565b6040518082815260200191505060405180910390f35b6104af6114df565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114e5565b005b610545611930565b6040518082815260200191505060405180910390f35b610563611936565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195a565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196d565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611baf565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611ca2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdb565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611dba565b005b6108926122de565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612317565b604051808215151515815260200191505060405180910390f35b61093761232a565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612330565b005b610a7c60048036036020811015610a6657600080fd5b81019080803590602001909291905050506124ec565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061251d565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b90919293919293905050506125f2565b005b610c966128b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128d5565b6040518082815260200191505060405180910390f35b610d648383611cdb565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129c8565b8094508195505050610dee89888a6128d5565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cdd565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561122e57600080fd5b505afa158015611242573d6000803e3d6000fd5b505050506040513d602081101561125857600080fd5b810190808051906020019092919050505010151561127557600080fd5b60016007600082825401925050819055506007549050611295878761196d565b91506000600a6000848152602001908152602001600020541415156112b957600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156112f857fe5b6000600481111561130557fe5b8160010160009054906101000a900460ff16600481111561132257fe5b14151561132b57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135557fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff1615151415156113f057600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561144c57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561150757600080fd5b836001600481111561151557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561154457fe5b14151561155057600080fd5b61155a8483611cdb565b8514151561156757600080fd5b60008311151561157657600080fd5b600554831115151561158757600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561164357600080fd5b87851115151561165257600080fd5b878583600001540114151561166357fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561172157600080fd5b505afa158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b8101908080519060200190929190505050011115151561176a57600080fd5b878260000181905550806000015482600001540193508160000154841015151561179357600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118de57600080fd5b505af11580156118f2573d6000803e3d6000fd5b505050506040513d602081101561190857600080fd5b8101908080519060200190929190505050151561192457600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119aa57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156119e657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a2157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b01578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611ba9565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611bef57fe5b816004811115611bfb57fe5b148015611c085750600089115b8015611c1657506007548911155b15611c8c5760039050611c2a8989896128d5565b93506000600b60008681526020019081526020016000209050611c4e8a898b6128d5565b93506000600b6000868152602001908152602001600020905060008260010154148015611c7f575060008160010154145b15611c8957600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d1857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d5457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d8f57600080fd5b6000611d9b848461196d565b9050600a60008281526020019081526020016000205491505092915050565b611dc48885611cdb565b89141515611dd157600080fd5b6000611ddd898661196d565b90506000600960008c8152602001908152602001600020905060026004811115611e0357fe5b8160010160009054906101000a900460ff166004811115611e2057fe5b141515611e2c57600080fd5b438160000154101515611e3e57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ed4828c8c8c612cf6565b1515611edf57600080fd5b611eeb81888888612cf6565b1515611ef657600080fd5b611f04828c8c848b8b612d7f565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a60008581526020019081526020016000206000905561205a8d8d8a8d8d612e8e565b6120678d898e8989612e8e565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121bb576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050506040513d602081101561219e57600080fd5b810190808051906020019092919050505015156121ba57600080fd5b5b60008711156122cf576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561228857600080fd5b505af115801561229c573d6000803e3d6000fd5b505050506040513d60208110156122b257600080fd5b810190808051906020019092919050505015156122ce57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b856001600481111561233e57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561236d57fe5b14151561237957600080fd5b6123833387611cdb565b8714151561239057600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123c957fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550438160000160008282540192505081905550600086111561249c576124538988888888612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561248f57600080fd5b61249b8183888a6130c2565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061258b8c8c8c6128d5565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6125fc8989611cdb565b8a14151561260957600080fd5b6000600102871415151561261c57600080fd5b60008611151561262b57600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561265257fe5b8160010160009054906101000a900460ff16600481111561266f57fe5b14151561267b57600080fd5b4381600001541015151561268e57600080fd5b6127248d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613132565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561276057600080fd5b6127b18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156127ed57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561284f57600080fd5b61285b828e8c8e6130c2565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561291257600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156129df57fe5b061415156129ec57600080fd5b600080600080600060606001606088811515612a0457fe5b0401604051908082528060200260200182016040528015612a345781602001602082028038833980820191505090505b509050602095505b86861015612a8f57612a4e8a8761335e565b809550819450505083850194508281606088811515612a6957fe5b04815181101515612a7657fe5b9060200190602002018181525050606086019550612a3c565b606087811515612a9b57fe5b0496505b6001871115612cb0576000600288811515612ab657fe5b06141515612afc578060018803815181101515612acf57fe5b906020019060200201518188815181101515612ae757fe5b90602001906020020181815250506001870196505b600095505b60018703861015612c9c578060018701815181101515612b1d57fe5b906020019060200201518187815181101515612b3557fe5b906020019060200201511415612b64578086815181101515612b5357fe5b906020019060200201519250612c68565b8060018701815181101515612b7557fe5b906020019060200201518187815181101515612b8d57fe5b906020019060200201511015612c04578086815181101515612bab57fe5b906020019060200201518160018801815181101515612bc657fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c67565b8060018701815181101515612c1557fe5b906020019060200201518187815181101515612c2d57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c7657fe5b04815181101515612c8357fe5b9060200190602002018181525050600286019550612b01565b600286811515612ca857fe5b049650612a9f565b806000815181101515612cbf57fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612cec5782612cee565b815b905092915050565b6000806001028560030154148015612d0e5750600084145b8015612d1a5750600083145b8015612d295750600060010282145b15612d375760019050612d77565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612d926136fe565b612d9a6136fe565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e048f8d6134d0565b9250612e1082826134f1565b9450612e1c8584612cdd565b94508483039350612e2d858b613585565b809b508196505050612e3f848e613585565b809e508195505050828511151515612e5357fe5b828411151515612e5f57fe5b898d858701010183141515612e7057fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ea05750600060010281145b15612eaa57612ee5565b6000612eb78686866128d5565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f7257fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fae5780518252602082019150602081019050602083039250612f89565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130015780518252602082019150602081019050602083039250612fdc565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130b581856135aa565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561311957600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131b857fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156131f557805182526020820191506020810190506020830392506131d0565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132485780518252602082019150602081019050602083039250613223565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561330057805182526020820191506020810190506020830392506132db565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061335081856135aa565b925050509695505050505050565b6000806000806000806000878951111515613387578060008090509650965050505050506134c9565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561346757600080fd5b505afa15801561347b573d6000803e3d6000fd5b505050506040513d602081101561349157600080fd5b8101908080519060200190929190505050925060008314806134b35750828511155b156134bd57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061350b876040015188606001516136bd565b935061351f866040015187606001516136bd565b925083831015151561353057600080fd5b8660400151841015151561354057fe5b8560400151831015151561355057fe5b83830391506135638288600001516136bd565b9050613573818860200151613585565b50809150508094505050505092915050565b60008082841161359a5760008481915061359f565b828403835b915091509250929050565b6000604182511415156135bc57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156135ec57601b810190505b601b8160ff1614806136015750601c8160ff16145b151561360c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613669573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136b157600080fd5b83935050505092915050565b6000808284019050838110156136f3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6136f5565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820abd27e0e951c1cdd72635a9c4ccfd36151bffff98dbec79cfa62c60dc03d50420029a165627a7a7230582096fc72f25ec73017b923903e7ab5dbd4ce152543dfc1936bef8a368f2ee7b7820029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106100c6576000357c010000000000000000000000000000000000000000000000000000000090048063b0228f1e1161008e578063b0228f1e14610231578063b32c65c81461024f578063b61c4083146102d2578063b8378f75146102f0578063cc2799c71461030e578063d0ad4bec146103a6576100c6565b80630fabd9e7146100cb578063224df42f1461014f57806323aa81741461016d5780633af973b1146101b75780637709bc78146101d5575b600080fd5b61010d600480360360208110156100e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103f0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610157610423565b6040518082815260200191505060405180910390f35b610175610429565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bf61044f565b6040518082815260200191505060405180910390f35b610217600480360360208110156101eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610455565b604051808215151515815260200191505060405180910390f35b610239610468565b6040518082815260200191505060405180910390f35b61025761046e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029757808201518184015260208101905061027c565b50505050905090810190601f1680156102c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102da6104a7565b6040518082815260200191505060405180910390f35b6102f86104ad565b6040518082815260200191505060405180910390f35b6103646004803603606081101561032457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506104b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103ae610790565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600080823b905060008111915050919050565b60045481565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b60065481565b60025481565b60006004546006541015156104c757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561056157600080fd5b6001600654016006819055506000846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689896040516105cc906107b5565b808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200198505050505050505050604051809103906000f0801580156106a7573d6000803e3d6000fd5b50905080915081600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a3819150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613b4280620007c48339019056fe60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516101008062003b4283398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b61375380620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b8378f75116100b4578063ee4516d91161008e578063ee4516d914610aa7578063fadc554b14610b57578063fc0c546a14610c8e578063fe49ba1c14610cd8576101e1565b8063b8378f751461092f578063db45479b1461094d578063e5949b5d14610a50576101e1565b8063938bcd67116100f0578063938bcd67146107675780639cadb159146107df578063b32c65c81461088a578063b7506d701461090d576101e1565b80637c4734f4146105d5578063838d6e051461064d57806387234237146106e4576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d5a565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611128565b6040518082815260200191505060405180910390f35b6103756113ce565b005b61037f611469565b6040518082815260200191505060405180910390f35b61039d61146f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611495565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316114bb565b6040518082815260200191505060405180910390f35b61044f6114c1565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b81019080803590602001909291905050506114c7565b6040518082815260200191505060405180910390f35b6104af6114df565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114e5565b005b610545611930565b6040518082815260200191505060405180910390f35b610563611936565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195a565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196d565b6040518082815260200191505060405180910390f35b6106b96004803603606081101561066357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611baf565b604051808381526020018260048111156106cf57fe5b60ff1681526020019250505060405180910390f35b6106ec611ca2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072c578082015181840152602081019050610711565b50505050905090810190601f1680156107595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c96004803603604081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdb565b6040518082815260200191505060405180910390f35b61088860048036036101208110156107f657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611dba565b005b6108926122de565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610915612317565b604051808215151515815260200191505060405180910390f35b61093761232a565b6040518082815260200191505060405180910390f35b610a4e600480360360c081101561096357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109c857600080fd5b8201836020820111156109da57600080fd5b803590602001918460018302840111640100000000831117156109fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612330565b005b610a7c60048036036020811015610a6657600080fd5b81019080803590602001909291905050506124ec565b60405180838152602001826004811115610a9257fe5b60ff1681526020019250505060405180910390f35b610b1360048036036060811015610abd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061251d565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610c8c6004803603610100811015610b6e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bf357600080fd5b820183602082011115610c0557600080fd5b80359060200191846001830284011164010000000083111715610c2757600080fd5b909192939192939080359060200190640100000000811115610c4857600080fd5b820183602082011115610c5a57600080fd5b80359060200191846001830284011164010000000083111715610c7c57600080fd5b90919293919293905050506125f2565b005b610c966128b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d4460048036036060811015610cee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128d5565b6040518082815260200191505060405180910390f35b610d648383611cdb565b8414151515610d7257600080fd5b60006004811115610d7f57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610dae57fe5b141515610dba57600080fd5b60008151111515610dca57600080fd5b6000806000806000610ddb866129c8565b8094508195505050610dee89888a6128d5565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610e2057600080fd5b600083111515610e2f57600080fd5b610e398484612cdd565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115610ff0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b81019080805190602001909291905050501515610fef57600080fd5b5b6000821115611104576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d60208110156110e757600080fd5b8101908080519060200190929190505050151561110357600080fd5b5b81831015151561111057fe5b83831015151561111c57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561114b57600080fd5b81600354811015151561115d57600080fd5b600454811115151561116e57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561122e57600080fd5b505afa158015611242573d6000803e3d6000fd5b505050506040513d602081101561125857600080fd5b810190808051906020019092919050505010151561127557600080fd5b60016007600082825401925050819055506007549050611295878761196d565b91506000600a6000848152602001908152602001600020541415156112b957600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156112f857fe5b6000600481111561130557fe5b8160010160009054906101000a900460ff16600481111561132257fe5b14151561132b57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561135557fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff1615151415156113f057600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561144c57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561150757600080fd5b836001600481111561151557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561154457fe5b14151561155057600080fd5b61155a8483611cdb565b8514151561156757600080fd5b60008311151561157657600080fd5b600554831115151561158757600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561164357600080fd5b87851115151561165257600080fd5b878583600001540114151561166357fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561172157600080fd5b505afa158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b8101908080519060200190929190505050011115151561176a57600080fd5b878260000181905550806000015482600001540193508160000154841015151561179357600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118de57600080fd5b505af11580156118f2573d6000803e3d6000fd5b505050506040513d602081101561190857600080fd5b8101908080519060200190929190505050151561192457600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156119aa57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156119e657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611a2157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611b01578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611ba9565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611bef57fe5b816004811115611bfb57fe5b148015611c085750600089115b8015611c1657506007548911155b15611c8c5760039050611c2a8989896128d5565b93506000600b60008681526020019081526020016000209050611c4e8a898b6128d5565b93506000600b6000868152602001908152602001600020905060008260010154148015611c7f575060008160010154145b15611c8957600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d1857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d5457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d8f57600080fd5b6000611d9b848461196d565b9050600a60008281526020019081526020016000205491505092915050565b611dc48885611cdb565b89141515611dd157600080fd5b6000611ddd898661196d565b90506000600960008c8152602001908152602001600020905060026004811115611e0357fe5b8160010160009054906101000a900460ff166004811115611e2057fe5b141515611e2c57600080fd5b438160000154101515611e3e57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ed4828c8c8c612cf6565b1515611edf57600080fd5b611eeb81888888612cf6565b1515611ef657600080fd5b611f04828c8c848b8b612d7f565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a60008581526020019081526020016000206000905561205a8d8d8a8d8d612e8e565b6120678d898e8989612e8e565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156121bb576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050506040513d602081101561219e57600080fd5b810190808051906020019092919050505015156121ba57600080fd5b5b60008711156122cf576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561228857600080fd5b505af115801561229c573d6000803e3d6000fd5b505050506040513d60208110156122b257600080fd5b810190808051906020019092919050505015156122ce57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b856001600481111561233e57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561236d57fe5b14151561237957600080fd5b6123833387611cdb565b8714151561239057600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156123c957fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550438160000160008282540192505081905550600086111561249c576124538988888888612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561248f57600080fd5b61249b8183888a6130c2565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061258b8c8c8c6128d5565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6125fc8989611cdb565b8a14151561260957600080fd5b6000600102871415151561261c57600080fd5b60008611151561262b57600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561265257fe5b8160010160009054906101000a900460ff16600481111561266f57fe5b14151561267b57600080fd5b4381600001541015151561268e57600080fd5b6127248d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613132565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561276057600080fd5b6127b18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612eec565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156127ed57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561284f57600080fd5b61285b828e8c8e6130c2565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561291257600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156129df57fe5b061415156129ec57600080fd5b600080600080600060606001606088811515612a0457fe5b0401604051908082528060200260200182016040528015612a345781602001602082028038833980820191505090505b509050602095505b86861015612a8f57612a4e8a8761335e565b809550819450505083850194508281606088811515612a6957fe5b04815181101515612a7657fe5b9060200190602002018181525050606086019550612a3c565b606087811515612a9b57fe5b0496505b6001871115612cb0576000600288811515612ab657fe5b06141515612afc578060018803815181101515612acf57fe5b906020019060200201518188815181101515612ae757fe5b90602001906020020181815250506001870196505b600095505b60018703861015612c9c578060018701815181101515612b1d57fe5b906020019060200201518187815181101515612b3557fe5b906020019060200201511415612b64578086815181101515612b5357fe5b906020019060200201519250612c68565b8060018701815181101515612b7557fe5b906020019060200201518187815181101515612b8d57fe5b906020019060200201511015612c04578086815181101515612bab57fe5b906020019060200201518160018801815181101515612bc657fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c67565b8060018701815181101515612c1557fe5b906020019060200201518187815181101515612c2d57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612c7657fe5b04815181101515612c8357fe5b9060200190602002018181525050600286019550612b01565b600286811515612ca857fe5b049650612a9f565b806000815181101515612cbf57fe5b90602001906020020151915081859850985050505050505050915091565b6000818311612cec5782612cee565b815b905092915050565b6000806001028560030154148015612d0e5750600084145b8015612d1a5750600083145b8015612d295750600060010282145b15612d375760019050612d77565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000612d926136fe565b612d9a6136fe565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050612e048f8d6134d0565b9250612e1082826134f1565b9450612e1c8584612cdd565b94508483039350612e2d858b613585565b809b508196505050612e3f848e613585565b809e508195505050828511151515612e5357fe5b828411151515612e5f57fe5b898d858701010183141515612e7057fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821480612ea05750600060010281145b15612eaa57612ee5565b6000612eb78686866128d5565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460016004811115612f7257fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515612fae5780518252602082019150602081019050602083039250612f89565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156130015780518252602082019150602081019050602083039250612fdc565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506130b581856135aa565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561311957600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156131b857fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156131f557805182526020820191506020810190506020830392506131d0565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156132485780518252602082019150602081019050602083039250613223565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561330057805182526020820191506020810190506020830392506132db565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061335081856135aa565b925050509695505050505050565b6000806000806000806000878951111515613387578060008090509650965050505050506134c9565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561346757600080fd5b505afa15801561347b573d6000803e3d6000fd5b505050506040513d602081101561349157600080fd5b8101908080519060200190929190505050925060008314806134b35750828511155b156134bd57600093505b80849650965050505050505b9250929050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061350b876040015188606001516136bd565b935061351f866040015187606001516136bd565b925083831015151561353057600080fd5b8660400151841015151561354057fe5b8560400151831015151561355057fe5b83830391506135638288600001516136bd565b9050613573818860200151613585565b50809150508094505050505092915050565b60008082841161359a5760008481915061359f565b828403835b915091509250929050565b6000604182511415156135bc57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156135ec57601b810190505b601b8160ff1614806136015750601c8160ff16145b151561360c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613669573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136b157600080fd5b83935050505092915050565b6000808284019050838110156136f3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6136f5565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820abd27e0e951c1cdd72635a9c4ccfd36151bffff98dbec79cfa62c60dc03d50420029a165627a7a7230582096fc72f25ec73017b923903e7ab5dbd4ce152543dfc1936bef8a368f2ee7b7820029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"token_to_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"max_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_created\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_channel_participant_deposit_limit\",\"type\":\"uint256\"},{\"name\":\"_token_network_deposit_limit\",\"type\":\"uint256\"}],\"name\":\"createERC20TokenNetwork\",\"outputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry_address\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_secret_registry_address\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_max_token_networks\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"token_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token_network_address\",\"type\":\"address\"}],\"name\":\"TokenNetworkCreated\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"createERC20TokenNetwork(address,uint256,uint256)\":{\"params\":{\"_token_address\":\"Ethereum address of an already deployed token, to be used in the new TokenNetwork contract.\"}}},\"title\":\"TokenNetworkRegistry\"},\"userdoc\":{\"methods\":{\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"createERC20TokenNetwork(address,uint256,uint256)\":{\"notice\":\"Deploy a new TokenNetwork contract for the Token deployed at `_token_address`.\"}},\"notice\":\"The TokenNetwork Registry deploys new TokenNetwork contracts for the Raiden Network protocol.\"}},\"settings\":{\"compilationTarget\":{\"contracts/raiden/TokenNetworkRegistry.sol\":\"TokenNetworkRegistry\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe1aa470a48d5224a00781700a8f73742de9381972eb9e00a610c6df29d38069d\",\"urls\":[\"bzzr://6d12abf81b55d71ccb9751e2ce82f1ec21d254634def365a5947483142ad7c6f\"]},\"contracts/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0xfb42dcf2e599b20a1c32724d7471ba480aa2db92ddeacda240cff2a3395018dc\",\"urls\":[\"bzzr://5cfa33e05ba9a15ed958ea557e867d7547bb935534dd0cfd3f99d28cb9f80a8d\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]}},\"version\":1}" }, "TokenNetworkSignatureTest": { "abi": [ @@ -5020,9 +5036,9 @@ "type": "event" } ], - "bin": "60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a08062003e37833981018060405260a08110156200004e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050848484848433600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515620000ca57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156200010757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200014457600080fd5b6000841115156200015457600080fd5b6000831115156200016457600080fd5b82821115156200017357600080fd5b6200018d8662000377640100000000026401000000009004565b15156200019957600080fd5b620001b38562000377640100000000026401000000009004565b1515620001bf57600080fd5b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600281905550826003819055508160048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d60208110156200030757600080fd5b81019080805190602001909291905050501115156200032557600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050506200038a565b600080823b905060008111915050919050565b613a9d806200039a6000396000f3fe608060405234801561001057600080fd5b50600436106101f7576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610121578063b8378f75116100bf578063ee4516d91161008e578063ee4516d914610d9a578063fadc554b14610e4a578063fc0c546a14610f81578063fe49ba1c14610fcb576101f7565b8063b8378f7514610a68578063baa172ee14610a86578063db45479b14610c40578063e5949b5d14610d43576101f7565b8063938bcd67116100fb578063938bcd67146108a05780639cadb15914610918578063b32c65c8146109c3578063b7506d7014610a46576101f7565b80637c4734f41461070e578063838d6e0514610786578063872342371461081d576101f7565b80633af973b11161019957806363ea01431161016857806363ea0143146105fe578063679b37631461067657806371e75992146106945780637709bc78146106b2576101f7565b80633af973b1146105625780634845be7614610580578063524bef8a1461059e5780635d6e441b146105e0576101f7565b80630fcc0c28116101d55780630fcc0c28146104a6578063224df42f146104b057806323aa8174146104ce57806324d73a9314610518576101f7565b806303d9d253146101fc57806305868687146103015780630a798f2414610424575b600080fd5b6102ff6004803603608081101561021257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561027957600080fd5b82018360208201111561028b57600080fd5b803590602001918460018302840111640100000000831117156102ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061104d565b005b6103e2600480360360a081101561031757600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561035c57600080fd5b82018360208201111561036e57600080fd5b8035906020019184600183028401116401000000008311171561039057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061141b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104906004803603606081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611435565b6040518082815260200191505060405180910390f35b6104ae6116e2565b005b6104b861177d565b6040518082815260200191505060405180910390f35b6104d6611783565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105206117a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61056a6117cf565b6040518082815260200191505060405180910390f35b6105886117d5565b6040518082815260200191505060405180910390f35b6105ca600480360360208110156105b457600080fd5b81019080803590602001909291905050506117e2565b6040518082815260200191505060405180910390f35b6105e86117fa565b6040518082815260200191505060405180910390f35b6106746004803603608081101561061457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611806565b005b61067e611c5e565b6040518082815260200191505060405180910390f35b61069c611c64565b6040518082815260200191505060405180910390f35b6106f4600480360360208110156106c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c88565b604051808215151515815260200191505060405180910390f35b6107706004803603604081101561072457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c9b565b6040518082815260200191505060405180910390f35b6107f26004803603606081101561079c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611edd565b6040518083815260200182600481111561080857fe5b60ff1681526020019250505060405180910390f35b610825611fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561086557808201518184015260208101905061084a565b50505050905090810190601f1680156108925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610902600480360360408110156108b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612009565b6040518082815260200191505060405180910390f35b6109c1600480360361012081101561092f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506120e8565b005b6109cb61260c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0b5780820151818401526020810190506109f0565b50505050905090810190601f168015610a385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a4e612645565b604051808215151515815260200191505060405180910390f35b610a70612658565b6040518082815260200191505060405180910390f35b610bfe600480360360c0811015610a9c57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ae157600080fd5b820183602082011115610af357600080fd5b80359060200191846001830284011164010000000083111715610b1557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b7857600080fd5b820183602082011115610b8a57600080fd5b80359060200191846001830284011164010000000083111715610bac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061265e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d41600480360360c0811015610c5657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cbb57600080fd5b820183602082011115610ccd57600080fd5b80359060200191846001830284011164010000000083111715610cef57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061267a565b005b610d6f60048036036020811015610d5957600080fd5b8101908080359060200190929190505050612836565b60405180838152602001826004811115610d8557fe5b60ff1681526020019250505060405180910390f35b610e0660048036036060811015610db057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612867565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610f7f6004803603610100811015610e6157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ee657600080fd5b820183602082011115610ef857600080fd5b80359060200191846001830284011164010000000083111715610f1a57600080fd5b909192939192939080359060200190640100000000811115610f3b57600080fd5b820183602082011115610f4d57600080fd5b80359060200191846001830284011164010000000083111715610f6f57600080fd5b909192939192939050505061293c565b005b610f89612bfa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61103760048036036060811015610fe157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c1f565b6040518082815260200191505060405180910390f35b6110578383612009565b841415151561106557600080fd5b6000600481111561107257fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff1660048111156110a157fe5b1415156110ad57600080fd5b600081511115156110bd57600080fd5b60008060008060006110ce86612d12565b80945081955050506110e189888a612c1f565b945060006009600087815260200190815260200160002090508060010154925084816000015414151561111357600080fd5b60008311151561112257600080fd5b61112c8484613027565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112e3576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b505050506040513d60208110156112c657600080fd5b810190808051906020019092919050505015156112e257600080fd5b5b60008211156113f7576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113b057600080fd5b505af11580156113c4573d6000803e3d6000fd5b505050506040513d60208110156113da57600080fd5b810190808051906020019092919050505015156113f657600080fd5b5b81831015151561140357fe5b83831015151561140f57fe5b50505050505050505050565b600061142a8686868686613040565b905095945050505050565b6000801515600660149054906101000a900460ff16151514151561145857600080fd5b81600354811015151561146a57600080fd5b600454811115151561147b57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561154257600080fd5b505afa158015611556573d6000803e3d6000fd5b505050506040513d602081101561156c57600080fd5b810190808051906020019092919050505010151561158957600080fd5b600160056000828254019250508190555060055490506115a98787611c9b565b9150600060086000848152602001908152602001600020541415156115cd57600080fd5b80600860008481526020019081526020016000208190555060006007600083815260200190815260200160002090506000816000015414151561160c57fe5b6000600481111561161957fe5b8160010160009054906101000a900460ff16600481111561163657fe5b14151561163f57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561166957fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600660149054906101000a900460ff16151514151561170457600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561176057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff16151514151561182857600080fd5b836001600481111561183657fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561186557fe5b14151561187157600080fd5b61187b8483612009565b8514151561188857600080fd5b60008311151561189757600080fd5b67010a741a4627800083111515156118ae57600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561196a57600080fd5b87851115151561197957600080fd5b878583600001540114151561198a57fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a4f57600080fd5b505afa158015611a63573d6000803e3d6000fd5b505050506040513d6020811015611a7957600080fd5b81019080805190602001909291905050500111151515611a9857600080fd5b8782600001819055508060000154826000015401935081600001548410151515611ac157600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b505050506040513d6020811015611c3657600080fd5b81019080805190602001909291905050501515611c5257600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611cd857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d1457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d4f57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611e2f578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611ed7565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f1d57fe5b816004811115611f2957fe5b148015611f365750600089115b8015611f4457506005548911155b15611fba5760039050611f58898989612c1f565b93506000600960008681526020019081526020016000209050611f7c8a898b612c1f565b9350600060096000868152602001908152602001600020905060008260010154148015611fad575060008160010154145b15611fb757600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561204657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561208257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120bd57600080fd5b60006120c98484611c9b565b9050600860008281526020019081526020016000205491505092915050565b6120f28885612009565b891415156120ff57600080fd5b600061210b8986611c9b565b90506000600760008c815260200190815260200160002090506002600481111561213157fe5b8160010160009054906101000a900460ff16600481111561214e57fe5b14151561215a57600080fd5b43816000015410151561216c57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612202828c8c8c613216565b151561220d57600080fd5b61221981888888613216565b151561222457600080fd5b612232828c8c848b8b61329f565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff0219169055505060086000858152602001908152602001600020600090556123888d8d8a8d8d6133ae565b6123958d898e89896133ae565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156124e9576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124a257600080fd5b505af11580156124b6573d6000803e3d6000fd5b505050506040513d60208110156124cc57600080fd5b810190808051906020019092919050505015156124e857600080fd5b5b60008711156125fd576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156125b657600080fd5b505af11580156125ca573d6000803e3d6000fd5b505050506040513d60208110156125e057600080fd5b810190808051906020019092919050505015156125fc57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b600061266e87878787878761340c565b90509695505050505050565b856001600481111561268857fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126b757fe5b1415156126c357600080fd5b6126cd3387612009565b871415156126da57600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561271357fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156127e65761279d8988888888613040565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156127d957600080fd5b6127e58183888a613638565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506128d58c8c8c612c1f565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6129468989612009565b8a14151561295357600080fd5b6000600102871415151561296657600080fd5b60008611151561297557600080fd5b6000806000600760008e815260200190815260200160002090506002600481111561299c57fe5b8160010160009054906101000a900460ff1660048111156129b957fe5b1415156129c557600080fd5b438160000154101515156129d857600080fd5b612a6e8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061340c565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612aaa57600080fd5b612afb8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613040565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612b3757600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612b9957600080fd5b612ba5828e8c8e613638565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612c5c57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612d2957fe5b06141515612d3657600080fd5b600080600080600060606001606088811515612d4e57fe5b0401604051908082528060200260200182016040528015612d7e5781602001602082028038833980820191505090505b509050602095505b86861015612dd957612d988a876136a8565b809550819450505083850194508281606088811515612db357fe5b04815181101515612dc057fe5b9060200190602002018181525050606086019550612d86565b606087811515612de557fe5b0496505b6001871115612ffa576000600288811515612e0057fe5b06141515612e46578060018803815181101515612e1957fe5b906020019060200201518188815181101515612e3157fe5b90602001906020020181815250506001870196505b600095505b60018703861015612fe6578060018701815181101515612e6757fe5b906020019060200201518187815181101515612e7f57fe5b906020019060200201511415612eae578086815181101515612e9d57fe5b906020019060200201519250612fb2565b8060018701815181101515612ebf57fe5b906020019060200201518187815181101515612ed757fe5b906020019060200201511015612f4e578086815181101515612ef557fe5b906020019060200201518160018801815181101515612f1057fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612fb1565b8060018701815181101515612f5f57fe5b906020019060200201518187815181101515612f7757fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612fc057fe5b04815181101515612fcd57fe5b9060200190602002018181525050600286019550612e4b565b600286811515612ff257fe5b049650612de9565b80600081518110151561300957fe5b90602001906020020151915081859850985050505050505050915091565b60008183116130365782613038565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160048111156130c657fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561310257805182526020820191506020810190506020830392506130dd565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156131555780518252602082019150602081019050602083039250613130565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613209818561381a565b9250505095945050505050565b600080600102856003015414801561322e5750600084145b801561323a5750600083145b80156132495750600060010282145b156132575760019050613297565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006132b2613a48565b6132ba613a48565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506133248f8d61392d565b9250613330828261394e565b945061333c8584613027565b9450848303935061334d858b6139e2565b809b50819650505061335f848e6139e2565b809e50819550505082851115151561337357fe5b82841115151561337f57fe5b898d85870101018314151561339057fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214806133c05750600060010281145b156133ca57613405565b60006133d7868686612c1f565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600481111561349257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156134cf57805182526020820191506020810190506020830392506134aa565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561352257805182526020820191506020810190506020830392506134fd565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156135da57805182526020820191506020810190506020830392506135b5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061362a818561381a565b925050509695505050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561368f57600080fd5b8281600401819055508181600301819055505050505050565b60008060008060008060008789511115156136d157806000809050965096505050505050613813565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156137b157600080fd5b505afa1580156137c5573d6000803e3d6000fd5b505050506040513d60208110156137db57600080fd5b8101908080519060200190929190505050925060008314806137fd5750828511155b1561380757600093505b80849650965050505050505b9250929050565b60006041825114151561382c57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561385c57601b810190505b601b8160ff1614806138715750601c8160ff16145b151561387c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156138d9573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561392157600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061396887604001518860600151613a07565b935061397c86604001518760600151613a07565b925083831015151561398d57600080fd5b8660400151841015151561399d57fe5b856040015183101515156139ad57fe5b83830391506139c0828860000151613a07565b90506139d08188602001516139e2565b50809150508094505050505092915050565b6000808284116139f7576000848191506139fc565b828403835b915091509250929050565b600080828401905083811015613a3d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613a3f565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820d8196e504c3d386c36983925009935c54ba9601b688dbc0439ea68788e1bc2ce0029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106101f7576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610121578063b8378f75116100bf578063ee4516d91161008e578063ee4516d914610d9a578063fadc554b14610e4a578063fc0c546a14610f81578063fe49ba1c14610fcb576101f7565b8063b8378f7514610a68578063baa172ee14610a86578063db45479b14610c40578063e5949b5d14610d43576101f7565b8063938bcd67116100fb578063938bcd67146108a05780639cadb15914610918578063b32c65c8146109c3578063b7506d7014610a46576101f7565b80637c4734f41461070e578063838d6e0514610786578063872342371461081d576101f7565b80633af973b11161019957806363ea01431161016857806363ea0143146105fe578063679b37631461067657806371e75992146106945780637709bc78146106b2576101f7565b80633af973b1146105625780634845be7614610580578063524bef8a1461059e5780635d6e441b146105e0576101f7565b80630fcc0c28116101d55780630fcc0c28146104a6578063224df42f146104b057806323aa8174146104ce57806324d73a9314610518576101f7565b806303d9d253146101fc57806305868687146103015780630a798f2414610424575b600080fd5b6102ff6004803603608081101561021257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561027957600080fd5b82018360208201111561028b57600080fd5b803590602001918460018302840111640100000000831117156102ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061104d565b005b6103e2600480360360a081101561031757600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561035c57600080fd5b82018360208201111561036e57600080fd5b8035906020019184600183028401116401000000008311171561039057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061141b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104906004803603606081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611435565b6040518082815260200191505060405180910390f35b6104ae6116e2565b005b6104b861177d565b6040518082815260200191505060405180910390f35b6104d6611783565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105206117a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61056a6117cf565b6040518082815260200191505060405180910390f35b6105886117d5565b6040518082815260200191505060405180910390f35b6105ca600480360360208110156105b457600080fd5b81019080803590602001909291905050506117e2565b6040518082815260200191505060405180910390f35b6105e86117fa565b6040518082815260200191505060405180910390f35b6106746004803603608081101561061457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611806565b005b61067e611c5e565b6040518082815260200191505060405180910390f35b61069c611c64565b6040518082815260200191505060405180910390f35b6106f4600480360360208110156106c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c88565b604051808215151515815260200191505060405180910390f35b6107706004803603604081101561072457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c9b565b6040518082815260200191505060405180910390f35b6107f26004803603606081101561079c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611edd565b6040518083815260200182600481111561080857fe5b60ff1681526020019250505060405180910390f35b610825611fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561086557808201518184015260208101905061084a565b50505050905090810190601f1680156108925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610902600480360360408110156108b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612009565b6040518082815260200191505060405180910390f35b6109c1600480360361012081101561092f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506120e8565b005b6109cb61260c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0b5780820151818401526020810190506109f0565b50505050905090810190601f168015610a385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a4e612645565b604051808215151515815260200191505060405180910390f35b610a70612658565b6040518082815260200191505060405180910390f35b610bfe600480360360c0811015610a9c57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ae157600080fd5b820183602082011115610af357600080fd5b80359060200191846001830284011164010000000083111715610b1557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b7857600080fd5b820183602082011115610b8a57600080fd5b80359060200191846001830284011164010000000083111715610bac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061265e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d41600480360360c0811015610c5657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cbb57600080fd5b820183602082011115610ccd57600080fd5b80359060200191846001830284011164010000000083111715610cef57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061267a565b005b610d6f60048036036020811015610d5957600080fd5b8101908080359060200190929190505050612836565b60405180838152602001826004811115610d8557fe5b60ff1681526020019250505060405180910390f35b610e0660048036036060811015610db057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612867565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610f7f6004803603610100811015610e6157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ee657600080fd5b820183602082011115610ef857600080fd5b80359060200191846001830284011164010000000083111715610f1a57600080fd5b909192939192939080359060200190640100000000811115610f3b57600080fd5b820183602082011115610f4d57600080fd5b80359060200191846001830284011164010000000083111715610f6f57600080fd5b909192939192939050505061293c565b005b610f89612bfa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61103760048036036060811015610fe157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c1f565b6040518082815260200191505060405180910390f35b6110578383612009565b841415151561106557600080fd5b6000600481111561107257fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff1660048111156110a157fe5b1415156110ad57600080fd5b600081511115156110bd57600080fd5b60008060008060006110ce86612d12565b80945081955050506110e189888a612c1f565b945060006009600087815260200190815260200160002090508060010154925084816000015414151561111357600080fd5b60008311151561112257600080fd5b61112c8484613027565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112e3576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b505050506040513d60208110156112c657600080fd5b810190808051906020019092919050505015156112e257600080fd5b5b60008211156113f7576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113b057600080fd5b505af11580156113c4573d6000803e3d6000fd5b505050506040513d60208110156113da57600080fd5b810190808051906020019092919050505015156113f657600080fd5b5b81831015151561140357fe5b83831015151561140f57fe5b50505050505050505050565b600061142a8686868686613040565b905095945050505050565b6000801515600660149054906101000a900460ff16151514151561145857600080fd5b81600354811015151561146a57600080fd5b600454811115151561147b57600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561154257600080fd5b505afa158015611556573d6000803e3d6000fd5b505050506040513d602081101561156c57600080fd5b810190808051906020019092919050505010151561158957600080fd5b600160056000828254019250508190555060055490506115a98787611c9b565b9150600060086000848152602001908152602001600020541415156115cd57600080fd5b80600860008481526020019081526020016000208190555060006007600083815260200190815260200160002090506000816000015414151561160c57fe5b6000600481111561161957fe5b8160010160009054906101000a900460ff16600481111561163657fe5b14151561163f57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561166957fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600660149054906101000a900460ff16151514151561170457600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561176057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff16151514151561182857600080fd5b836001600481111561183657fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561186557fe5b14151561187157600080fd5b61187b8483612009565b8514151561188857600080fd5b60008311151561189757600080fd5b67010a741a4627800083111515156118ae57600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561196a57600080fd5b87851115151561197957600080fd5b878583600001540114151561198a57fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a4f57600080fd5b505afa158015611a63573d6000803e3d6000fd5b505050506040513d6020811015611a7957600080fd5b81019080805190602001909291905050500111151515611a9857600080fd5b8782600001819055508060000154826000015401935081600001548410151515611ac157600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b505050506040513d6020811015611c3657600080fd5b81019080805190602001909291905050501515611c5257600080fd5b50505050505050505050565b60055481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611cd857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d1457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d4f57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611e2f578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611ed7565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f1d57fe5b816004811115611f2957fe5b148015611f365750600089115b8015611f4457506005548911155b15611fba5760039050611f58898989612c1f565b93506000600960008681526020019081526020016000209050611f7c8a898b612c1f565b9350600060096000868152602001908152602001600020905060008260010154148015611fad575060008160010154145b15611fb757600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561204657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561208257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120bd57600080fd5b60006120c98484611c9b565b9050600860008281526020019081526020016000205491505092915050565b6120f28885612009565b891415156120ff57600080fd5b600061210b8986611c9b565b90506000600760008c815260200190815260200160002090506002600481111561213157fe5b8160010160009054906101000a900460ff16600481111561214e57fe5b14151561215a57600080fd5b43816000015410151561216c57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612202828c8c8c613216565b151561220d57600080fd5b61221981888888613216565b151561222457600080fd5b612232828c8c848b8b61329f565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff0219169055505060086000858152602001908152602001600020600090556123888d8d8a8d8d6133ae565b6123958d898e89896133ae565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156124e9576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124a257600080fd5b505af11580156124b6573d6000803e3d6000fd5b505050506040513d60208110156124cc57600080fd5b810190808051906020019092919050505015156124e857600080fd5b5b60008711156125fd576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156125b657600080fd5b505af11580156125ca573d6000803e3d6000fd5b505050506040513d60208110156125e057600080fd5b810190808051906020019092919050505015156125fc57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b600061266e87878787878761340c565b90509695505050505050565b856001600481111561268857fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126b757fe5b1415156126c357600080fd5b6126cd3387612009565b871415156126da57600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561271357fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156127e65761279d8988888888613040565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156127d957600080fd5b6127e58183888a613638565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506128d58c8c8c612c1f565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6129468989612009565b8a14151561295357600080fd5b6000600102871415151561296657600080fd5b60008611151561297557600080fd5b6000806000600760008e815260200190815260200160002090506002600481111561299c57fe5b8160010160009054906101000a900460ff1660048111156129b957fe5b1415156129c557600080fd5b438160000154101515156129d857600080fd5b612a6e8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061340c565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612aaa57600080fd5b612afb8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613040565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612b3757600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612b9957600080fd5b612ba5828e8c8e613638565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612c5c57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612d2957fe5b06141515612d3657600080fd5b600080600080600060606001606088811515612d4e57fe5b0401604051908082528060200260200182016040528015612d7e5781602001602082028038833980820191505090505b509050602095505b86861015612dd957612d988a876136a8565b809550819450505083850194508281606088811515612db357fe5b04815181101515612dc057fe5b9060200190602002018181525050606086019550612d86565b606087811515612de557fe5b0496505b6001871115612ffa576000600288811515612e0057fe5b06141515612e46578060018803815181101515612e1957fe5b906020019060200201518188815181101515612e3157fe5b90602001906020020181815250506001870196505b600095505b60018703861015612fe6578060018701815181101515612e6757fe5b906020019060200201518187815181101515612e7f57fe5b906020019060200201511415612eae578086815181101515612e9d57fe5b906020019060200201519250612fb2565b8060018701815181101515612ebf57fe5b906020019060200201518187815181101515612ed757fe5b906020019060200201511015612f4e578086815181101515612ef557fe5b906020019060200201518160018801815181101515612f1057fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612fb1565b8060018701815181101515612f5f57fe5b906020019060200201518187815181101515612f7757fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612fc057fe5b04815181101515612fcd57fe5b9060200190602002018181525050600286019550612e4b565b600286811515612ff257fe5b049650612de9565b80600081518110151561300957fe5b90602001906020020151915081859850985050505050505050915091565b60008183116130365782613038565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160048111156130c657fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561310257805182526020820191506020810190506020830392506130dd565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156131555780518252602082019150602081019050602083039250613130565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613209818561381a565b9250505095945050505050565b600080600102856003015414801561322e5750600084145b801561323a5750600083145b80156132495750600060010282145b156132575760019050613297565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006132b2613a48565b6132ba613a48565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506133248f8d61392d565b9250613330828261394e565b945061333c8584613027565b9450848303935061334d858b6139e2565b809b50819650505061335f848e6139e2565b809e50819550505082851115151561337357fe5b82841115151561337f57fe5b898d85870101018314151561339057fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214806133c05750600060010281145b156133ca57613405565b60006133d7868686612c1f565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600481111561349257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156134cf57805182526020820191506020810190506020830392506134aa565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561352257805182526020820191506020810190506020830392506134fd565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156135da57805182526020820191506020810190506020830392506135b5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061362a818561381a565b925050509695505050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561368f57600080fd5b8281600401819055508181600301819055505050505050565b60008060008060008060008789511115156136d157806000809050965096505050505050613813565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156137b157600080fd5b505afa1580156137c5573d6000803e3d6000fd5b505050506040513d60208110156137db57600080fd5b8101908080519060200190929190505050925060008314806137fd5750828511155b1561380757600093505b80849650965050505050505b9250929050565b60006041825114151561382c57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561385c57601b810190505b601b8160ff1614806138715750601c8160ff16145b151561387c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156138d9573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561392157600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061396887604001518860600151613a07565b935061397c86604001518760600151613a07565b925083831015151561398d57600080fd5b8660400151841015151561399d57fe5b856040015183101515156139ad57fe5b83830391506139c0828860000151613a07565b90506139d08188602001516139e2565b50809150508094505050505092915050565b6000808284116139f7576000848191506139fc565b828403835b915091509250929050565b600080828401905083811015613a3d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613a3f565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820d8196e504c3d386c36983925009935c54ba9601b688dbc0439ea68788e1bc2ce0029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofPublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofUpdateMessagePublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkSignatureTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xd6a815ea4cc35ca8fbf9e64cae2d51bcad170cd242c3f6681d9c887d09e2b595\",\"urls\":[\"bzzr://61b2069b4a3ac87f37cf9f80db287817235e17f3833bd3dacbb95ef43353e5ce\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x71686981d22a38a532fe80a212d5801fe4b31b4eff1942b43d1186a7b25b3173\",\"urls\":[\"bzzr://b16b75506c7c7179656c010ed15fa5e1fb94d9e5a5f3f52f4dbfda3b4a0df5db\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a08062003e78833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b613a7c80620003fc6000396000f3fe608060405234801561001057600080fd5b50600436106101f7576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610121578063b8378f75116100bf578063ee4516d91161008e578063ee4516d914610d9a578063fadc554b14610e4a578063fc0c546a14610f81578063fe49ba1c14610fcb576101f7565b8063b8378f7514610a68578063baa172ee14610a86578063db45479b14610c40578063e5949b5d14610d43576101f7565b8063938bcd67116100fb578063938bcd67146108a05780639cadb15914610918578063b32c65c8146109c3578063b7506d7014610a46576101f7565b80637c4734f41461070e578063838d6e0514610786578063872342371461081d576101f7565b80633af973b11161019957806363ea01431161016857806363ea0143146105fe578063679b37631461067657806371e75992146106945780637709bc78146106b2576101f7565b80633af973b1146105625780634845be7614610580578063524bef8a1461059e5780635d6e441b146105e0576101f7565b80630fcc0c28116101d55780630fcc0c28146104a6578063224df42f146104b057806323aa8174146104ce57806324d73a9314610518576101f7565b806303d9d253146101fc57806305868687146103015780630a798f2414610424575b600080fd5b6102ff6004803603608081101561021257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561027957600080fd5b82018360208201111561028b57600080fd5b803590602001918460018302840111640100000000831117156102ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061104d565b005b6103e2600480360360a081101561031757600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561035c57600080fd5b82018360208201111561036e57600080fd5b8035906020019184600183028401116401000000008311171561039057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061141b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104906004803603606081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611435565b6040518082815260200191505060405180910390f35b6104ae6116db565b005b6104b8611776565b6040518082815260200191505060405180910390f35b6104d661177c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105206117a2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61056a6117c8565b6040518082815260200191505060405180910390f35b6105886117ce565b6040518082815260200191505060405180910390f35b6105ca600480360360208110156105b457600080fd5b81019080803590602001909291905050506117d4565b6040518082815260200191505060405180910390f35b6105e86117ec565b6040518082815260200191505060405180910390f35b6106746004803603608081101561061457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f2565b005b61067e611c3d565b6040518082815260200191505060405180910390f35b61069c611c43565b6040518082815260200191505060405180910390f35b6106f4600480360360208110156106c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c67565b604051808215151515815260200191505060405180910390f35b6107706004803603604081101561072457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7a565b6040518082815260200191505060405180910390f35b6107f26004803603606081101561079c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ebc565b6040518083815260200182600481111561080857fe5b60ff1681526020019250505060405180910390f35b610825611faf565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561086557808201518184015260208101905061084a565b50505050905090810190601f1680156108925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610902600480360360408110156108b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe8565b6040518082815260200191505060405180910390f35b6109c1600480360361012081101561092f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506120c7565b005b6109cb6125eb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0b5780820151818401526020810190506109f0565b50505050905090810190601f168015610a385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a4e612624565b604051808215151515815260200191505060405180910390f35b610a70612637565b6040518082815260200191505060405180910390f35b610bfe600480360360c0811015610a9c57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ae157600080fd5b820183602082011115610af357600080fd5b80359060200191846001830284011164010000000083111715610b1557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b7857600080fd5b820183602082011115610b8a57600080fd5b80359060200191846001830284011164010000000083111715610bac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061263d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d41600480360360c0811015610c5657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cbb57600080fd5b820183602082011115610ccd57600080fd5b80359060200191846001830284011164010000000083111715610cef57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612659565b005b610d6f60048036036020811015610d5957600080fd5b8101908080359060200190929190505050612815565b60405180838152602001826004811115610d8557fe5b60ff1681526020019250505060405180910390f35b610e0660048036036060811015610db057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612846565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610f7f6004803603610100811015610e6157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ee657600080fd5b820183602082011115610ef857600080fd5b80359060200191846001830284011164010000000083111715610f1a57600080fd5b909192939192939080359060200190640100000000811115610f3b57600080fd5b820183602082011115610f4d57600080fd5b80359060200191846001830284011164010000000083111715610f6f57600080fd5b909192939192939050505061291b565b005b610f89612bd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61103760048036036060811015610fe157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bfe565b6040518082815260200191505060405180910390f35b6110578383611fe8565b841415151561106557600080fd5b6000600481111561107257fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff1660048111156110a157fe5b1415156110ad57600080fd5b600081511115156110bd57600080fd5b60008060008060006110ce86612cf1565b80945081955050506110e189888a612bfe565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561111357600080fd5b60008311151561112257600080fd5b61112c8484613006565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112e3576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b505050506040513d60208110156112c657600080fd5b810190808051906020019092919050505015156112e257600080fd5b5b60008211156113f7576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113b057600080fd5b505af11580156113c4573d6000803e3d6000fd5b505050506040513d60208110156113da57600080fd5b810190808051906020019092919050505015156113f657600080fd5b5b81831015151561140357fe5b83831015151561140f57fe5b50505050505050505050565b600061142a868686868661301f565b905095945050505050565b6000801515600860149054906101000a900460ff16151514151561145857600080fd5b81600354811015151561146a57600080fd5b600454811115151561147b57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d602081101561156557600080fd5b810190808051906020019092919050505010151561158257600080fd5b600160076000828254019250508190555060075490506115a28787611c7a565b91506000600a6000848152602001908152602001600020541415156115c657600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561160557fe5b6000600481111561161257fe5b8160010160009054906101000a900460ff16600481111561162f57fe5b14151561163857fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561166257fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff1615151415156116fd57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175957600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561181457600080fd5b836001600481111561182257fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561185157fe5b14151561185d57600080fd5b6118678483611fe8565b8514151561187457600080fd5b60008311151561188357600080fd5b600554831115151561189457600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561195057600080fd5b87851115151561195f57600080fd5b878583600001540114151561197057fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a2e57600080fd5b505afa158015611a42573d6000803e3d6000fd5b505050506040513d6020811015611a5857600080fd5b81019080805190602001909291905050500111151515611a7757600080fd5b8782600001819055508060000154826000015401935081600001548410151515611aa057600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611beb57600080fd5b505af1158015611bff573d6000803e3d6000fd5b505050506040513d6020811015611c1557600080fd5b81019080805190602001909291905050501515611c3157600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611cb757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611cf357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d2e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611e0e578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611eb6565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611efc57fe5b816004811115611f0857fe5b148015611f155750600089115b8015611f2357506007548911155b15611f995760039050611f37898989612bfe565b93506000600b60008681526020019081526020016000209050611f5b8a898b612bfe565b93506000600b6000868152602001908152602001600020905060008260010154148015611f8c575060008160010154145b15611f9657600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561202557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561206157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561209c57600080fd5b60006120a88484611c7a565b9050600a60008281526020019081526020016000205491505092915050565b6120d18885611fe8565b891415156120de57600080fd5b60006120ea8986611c7a565b90506000600960008c815260200190815260200160002090506002600481111561211057fe5b8160010160009054906101000a900460ff16600481111561212d57fe5b14151561213957600080fd5b43816000015410151561214b57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506121e1828c8c8c6131f5565b15156121ec57600080fd5b6121f8818888886131f5565b151561220357600080fd5b612211828c8c848b8b61327e565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123678d8d8a8d8d61338d565b6123748d898e898961338d565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156124c8576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561248157600080fd5b505af1158015612495573d6000803e3d6000fd5b505050506040513d60208110156124ab57600080fd5b810190808051906020019092919050505015156124c757600080fd5b5b60008711156125dc576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561259557600080fd5b505af11580156125a9573d6000803e3d6000fd5b505050506040513d60208110156125bf57600080fd5b810190808051906020019092919050505015156125db57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b600061264d8787878787876133eb565b90509695505050505050565b856001600481111561266757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561269657fe5b1415156126a257600080fd5b6126ac3387611fe8565b871415156126b957600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156126f257fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156127c55761277c898888888861301f565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156127b857600080fd5b6127c48183888a613617565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506128b48c8c8c612bfe565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6129258989611fe8565b8a14151561293257600080fd5b6000600102871415151561294557600080fd5b60008611151561295457600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561297b57fe5b8160010160009054906101000a900460ff16600481111561299857fe5b1415156129a457600080fd5b438160000154101515156129b757600080fd5b612a4d8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506133eb565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612a8957600080fd5b612ada8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061301f565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612b1657600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612b7857600080fd5b612b84828e8c8e613617565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612c3b57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612d0857fe5b06141515612d1557600080fd5b600080600080600060606001606088811515612d2d57fe5b0401604051908082528060200260200182016040528015612d5d5781602001602082028038833980820191505090505b509050602095505b86861015612db857612d778a87613687565b809550819450505083850194508281606088811515612d9257fe5b04815181101515612d9f57fe5b9060200190602002018181525050606086019550612d65565b606087811515612dc457fe5b0496505b6001871115612fd9576000600288811515612ddf57fe5b06141515612e25578060018803815181101515612df857fe5b906020019060200201518188815181101515612e1057fe5b90602001906020020181815250506001870196505b600095505b60018703861015612fc5578060018701815181101515612e4657fe5b906020019060200201518187815181101515612e5e57fe5b906020019060200201511415612e8d578086815181101515612e7c57fe5b906020019060200201519250612f91565b8060018701815181101515612e9e57fe5b906020019060200201518187815181101515612eb657fe5b906020019060200201511015612f2d578086815181101515612ed457fe5b906020019060200201518160018801815181101515612eef57fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612f90565b8060018701815181101515612f3e57fe5b906020019060200201518187815181101515612f5657fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612f9f57fe5b04815181101515612fac57fe5b9060200190602002018181525050600286019550612e2a565b600286811515612fd157fe5b049650612dc8565b806000815181101515612fe857fe5b90602001906020020151915081859850985050505050505050915091565b60008183116130155782613017565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160048111156130a557fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156130e157805182526020820191506020810190506020830392506130bc565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613134578051825260208201915060208101905060208303925061310f565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506131e881856137f9565b9250505095945050505050565b600080600102856003015414801561320d5750600084145b80156132195750600083145b80156132285750600060010282145b156132365760019050613276565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613291613a27565b613299613a27565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506133038f8d61390c565b925061330f828261392d565b945061331b8584613006565b9450848303935061332c858b6139c1565b809b50819650505061333e848e6139c1565b809e50819550505082851115151561335257fe5b82841115151561335e57fe5b898d85870101018314151561336f57fe5b84848e8c985098509850985050505050509650965096509692505050565b600082148061339f5750600060010281145b156133a9576133e4565b60006133b6868686612bfe565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600481111561347157fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156134ae5780518252602082019150602081019050602083039250613489565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561350157805182526020820191506020810190506020830392506134dc565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156135b95780518252602082019150602081019050602083039250613594565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061360981856137f9565b925050509695505050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561366e57600080fd5b8281600401819055508181600301819055505050505050565b60008060008060008060008789511115156136b0578060008090509650965050505050506137f2565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561379057600080fd5b505afa1580156137a4573d6000803e3d6000fd5b505050506040513d60208110156137ba57600080fd5b8101908080519060200190929190505050925060008314806137dc5750828511155b156137e657600093505b80849650965050505050505b9250929050565b60006041825114151561380b57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561383b57601b810190505b601b8160ff1614806138505750601c8160ff16145b151561385b57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156138b8573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561390057600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613947876040015188606001516139e6565b935061395b866040015187606001516139e6565b925083831015151561396c57600080fd5b8660400151841015151561397c57fe5b8560400151831015151561398c57fe5b838303915061399f8288600001516139e6565b90506139af8188602001516139c1565b50809150508094505050505092915050565b6000808284116139d6576000848191506139db565b828403835b915091509250929050565b600080828401905083811015613a1c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613a1e565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820827d89a5c8abdaec8ba0225e93a77cdb8d98e48f7590ea413cfa15af6aa090790029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106101f7576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610121578063b8378f75116100bf578063ee4516d91161008e578063ee4516d914610d9a578063fadc554b14610e4a578063fc0c546a14610f81578063fe49ba1c14610fcb576101f7565b8063b8378f7514610a68578063baa172ee14610a86578063db45479b14610c40578063e5949b5d14610d43576101f7565b8063938bcd67116100fb578063938bcd67146108a05780639cadb15914610918578063b32c65c8146109c3578063b7506d7014610a46576101f7565b80637c4734f41461070e578063838d6e0514610786578063872342371461081d576101f7565b80633af973b11161019957806363ea01431161016857806363ea0143146105fe578063679b37631461067657806371e75992146106945780637709bc78146106b2576101f7565b80633af973b1146105625780634845be7614610580578063524bef8a1461059e5780635d6e441b146105e0576101f7565b80630fcc0c28116101d55780630fcc0c28146104a6578063224df42f146104b057806323aa8174146104ce57806324d73a9314610518576101f7565b806303d9d253146101fc57806305868687146103015780630a798f2414610424575b600080fd5b6102ff6004803603608081101561021257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561027957600080fd5b82018360208201111561028b57600080fd5b803590602001918460018302840111640100000000831117156102ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061104d565b005b6103e2600480360360a081101561031757600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561035c57600080fd5b82018360208201111561036e57600080fd5b8035906020019184600183028401116401000000008311171561039057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061141b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104906004803603606081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611435565b6040518082815260200191505060405180910390f35b6104ae6116db565b005b6104b8611776565b6040518082815260200191505060405180910390f35b6104d661177c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105206117a2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61056a6117c8565b6040518082815260200191505060405180910390f35b6105886117ce565b6040518082815260200191505060405180910390f35b6105ca600480360360208110156105b457600080fd5b81019080803590602001909291905050506117d4565b6040518082815260200191505060405180910390f35b6105e86117ec565b6040518082815260200191505060405180910390f35b6106746004803603608081101561061457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f2565b005b61067e611c3d565b6040518082815260200191505060405180910390f35b61069c611c43565b6040518082815260200191505060405180910390f35b6106f4600480360360208110156106c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c67565b604051808215151515815260200191505060405180910390f35b6107706004803603604081101561072457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7a565b6040518082815260200191505060405180910390f35b6107f26004803603606081101561079c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ebc565b6040518083815260200182600481111561080857fe5b60ff1681526020019250505060405180910390f35b610825611faf565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561086557808201518184015260208101905061084a565b50505050905090810190601f1680156108925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610902600480360360408110156108b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe8565b6040518082815260200191505060405180910390f35b6109c1600480360361012081101561092f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506120c7565b005b6109cb6125eb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0b5780820151818401526020810190506109f0565b50505050905090810190601f168015610a385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a4e612624565b604051808215151515815260200191505060405180910390f35b610a70612637565b6040518082815260200191505060405180910390f35b610bfe600480360360c0811015610a9c57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ae157600080fd5b820183602082011115610af357600080fd5b80359060200191846001830284011164010000000083111715610b1557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b7857600080fd5b820183602082011115610b8a57600080fd5b80359060200191846001830284011164010000000083111715610bac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061263d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d41600480360360c0811015610c5657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cbb57600080fd5b820183602082011115610ccd57600080fd5b80359060200191846001830284011164010000000083111715610cef57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612659565b005b610d6f60048036036020811015610d5957600080fd5b8101908080359060200190929190505050612815565b60405180838152602001826004811115610d8557fe5b60ff1681526020019250505060405180910390f35b610e0660048036036060811015610db057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612846565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610f7f6004803603610100811015610e6157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ee657600080fd5b820183602082011115610ef857600080fd5b80359060200191846001830284011164010000000083111715610f1a57600080fd5b909192939192939080359060200190640100000000811115610f3b57600080fd5b820183602082011115610f4d57600080fd5b80359060200191846001830284011164010000000083111715610f6f57600080fd5b909192939192939050505061291b565b005b610f89612bd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61103760048036036060811015610fe157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bfe565b6040518082815260200191505060405180910390f35b6110578383611fe8565b841415151561106557600080fd5b6000600481111561107257fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff1660048111156110a157fe5b1415156110ad57600080fd5b600081511115156110bd57600080fd5b60008060008060006110ce86612cf1565b80945081955050506110e189888a612bfe565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561111357600080fd5b60008311151561112257600080fd5b61112c8484613006565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156112e3576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b505050506040513d60208110156112c657600080fd5b810190808051906020019092919050505015156112e257600080fd5b5b60008211156113f7576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113b057600080fd5b505af11580156113c4573d6000803e3d6000fd5b505050506040513d60208110156113da57600080fd5b810190808051906020019092919050505015156113f657600080fd5b5b81831015151561140357fe5b83831015151561140f57fe5b50505050505050505050565b600061142a868686868661301f565b905095945050505050565b6000801515600860149054906101000a900460ff16151514151561145857600080fd5b81600354811015151561146a57600080fd5b600454811115151561147b57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d602081101561156557600080fd5b810190808051906020019092919050505010151561158257600080fd5b600160076000828254019250508190555060075490506115a28787611c7a565b91506000600a6000848152602001908152602001600020541415156115c657600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561160557fe5b6000600481111561161257fe5b8160010160009054906101000a900460ff16600481111561162f57fe5b14151561163857fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561166257fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff1615151415156116fd57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175957600080fd5b6001600860146101000a81548160ff021916908315150217905550565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561181457600080fd5b836001600481111561182257fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561185157fe5b14151561185d57600080fd5b6118678483611fe8565b8514151561187457600080fd5b60008311151561188357600080fd5b600554831115151561189457600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600001548803945060008511151561195057600080fd5b87851115151561195f57600080fd5b878583600001540114151561197057fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a2e57600080fd5b505afa158015611a42573d6000803e3d6000fd5b505050506040513d6020811015611a5857600080fd5b81019080805190602001909291905050500111151515611a7757600080fd5b8782600001819055508060000154826000015401935081600001548410151515611aa057600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611beb57600080fd5b505af1158015611bff573d6000803e3d6000fd5b505050506040513d6020811015611c1557600080fd5b81019080805190602001909291905050501515611c3157600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611cb757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611cf357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d2e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611e0e578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611eb6565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611efc57fe5b816004811115611f0857fe5b148015611f155750600089115b8015611f2357506007548911155b15611f995760039050611f37898989612bfe565b93506000600b60008681526020019081526020016000209050611f5b8a898b612bfe565b93506000600b6000868152602001908152602001600020905060008260010154148015611f8c575060008160010154145b15611f9657600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561202557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561206157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561209c57600080fd5b60006120a88484611c7a565b9050600a60008281526020019081526020016000205491505092915050565b6120d18885611fe8565b891415156120de57600080fd5b60006120ea8986611c7a565b90506000600960008c815260200190815260200160002090506002600481111561211057fe5b8160010160009054906101000a900460ff16600481111561212d57fe5b14151561213957600080fd5b43816000015410151561214b57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506121e1828c8c8c6131f5565b15156121ec57600080fd5b6121f8818888886131f5565b151561220357600080fd5b612211828c8c848b8b61327e565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123678d8d8a8d8d61338d565b6123748d898e898961338d565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156124c8576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561248157600080fd5b505af1158015612495573d6000803e3d6000fd5b505050506040513d60208110156124ab57600080fd5b810190808051906020019092919050505015156124c757600080fd5b5b60008711156125dc576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561259557600080fd5b505af11580156125a9573d6000803e3d6000fd5b505050506040513d60208110156125bf57600080fd5b810190808051906020019092919050505015156125db57600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b600061264d8787878787876133eb565b90509695505050505050565b856001600481111561266757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561269657fe5b1415156126a257600080fd5b6126ac3387611fe8565b871415156126b957600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156126f257fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156127c55761277c898888888861301f565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415156127b857600080fd5b6127c48183888a613617565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506128b48c8c8c612bfe565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6129258989611fe8565b8a14151561293257600080fd5b6000600102871415151561294557600080fd5b60008611151561295457600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561297b57fe5b8160010160009054906101000a900460ff16600481111561299857fe5b1415156129a457600080fd5b438160000154101515156129b757600080fd5b612a4d8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506133eb565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612a8957600080fd5b612ada8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061301f565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612b1657600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612b7857600080fd5b612b84828e8c8e613617565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612c3b57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612d0857fe5b06141515612d1557600080fd5b600080600080600060606001606088811515612d2d57fe5b0401604051908082528060200260200182016040528015612d5d5781602001602082028038833980820191505090505b509050602095505b86861015612db857612d778a87613687565b809550819450505083850194508281606088811515612d9257fe5b04815181101515612d9f57fe5b9060200190602002018181525050606086019550612d65565b606087811515612dc457fe5b0496505b6001871115612fd9576000600288811515612ddf57fe5b06141515612e25578060018803815181101515612df857fe5b906020019060200201518188815181101515612e1057fe5b90602001906020020181815250506001870196505b600095505b60018703861015612fc5578060018701815181101515612e4657fe5b906020019060200201518187815181101515612e5e57fe5b906020019060200201511415612e8d578086815181101515612e7c57fe5b906020019060200201519250612f91565b8060018701815181101515612e9e57fe5b906020019060200201518187815181101515612eb657fe5b906020019060200201511015612f2d578086815181101515612ed457fe5b906020019060200201518160018801815181101515612eef57fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612f90565b8060018701815181101515612f3e57fe5b906020019060200201518187815181101515612f5657fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b8281600288811515612f9f57fe5b04815181101515612fac57fe5b9060200190602002018181525050600286019550612e2a565b600286811515612fd157fe5b049650612dc8565b806000815181101515612fe857fe5b90602001906020020151915081859850985050505050505050915091565b60008183116130155782613017565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160048111156130a557fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156130e157805182526020820191506020810190506020830392506130bc565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613134578051825260208201915060208101905060208303925061310f565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506131e881856137f9565b9250505095945050505050565b600080600102856003015414801561320d5750600084145b80156132195750600083145b80156132285750600060010282145b156132365760019050613276565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613291613a27565b613299613a27565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506133038f8d61390c565b925061330f828261392d565b945061331b8584613006565b9450848303935061332c858b6139c1565b809b50819650505061333e848e6139c1565b809e50819550505082851115151561335257fe5b82841115151561335e57fe5b898d85870101018314151561336f57fe5b84848e8c985098509850985050505050509650965096509692505050565b600082148061339f5750600060010281145b156133a9576133e4565b60006133b6868686612bfe565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600481111561347157fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156134ae5780518252602082019150602081019050602083039250613489565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561350157805182526020820191506020810190506020830392506134dc565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156135b95780518252602082019150602081019050602083039250613594565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061360981856137f9565b925050509695505050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561366e57600080fd5b8281600401819055508181600301819055505050505050565b60008060008060008060008789511115156136b0578060008090509650965050505050506137f2565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561379057600080fd5b505afa1580156137a4573d6000803e3d6000fd5b505050506040513d60208110156137ba57600080fd5b8101908080519060200190929190505050925060008314806137dc5750828511155b156137e657600093505b80849650965050505050505b9250929050565b60006041825114151561380b57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561383b57601b810190505b601b8160ff1614806138505750601c8160ff16145b151561385b57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156138b8573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561390057600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613947876040015188606001516139e6565b935061395b866040015187606001516139e6565b925083831015151561396c57600080fd5b8660400151841015151561397c57fe5b8560400151831015151561398c57fe5b838303915061399f8288600001516139e6565b90506139af8188602001516139c1565b50809150508094505050505092915050565b6000808284116139d6576000848191506139db565b828403835b915091509250929050565b600080828401905083811015613a1c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613a1e565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820827d89a5c8abdaec8ba0225e93a77cdb8d98e48f7590ea413cfa15af6aa090790029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofPublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofUpdateMessagePublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkSignatureTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe1aa470a48d5224a00781700a8f73742de9381972eb9e00a610c6df29d38069d\",\"urls\":[\"bzzr://6d12abf81b55d71ccb9751e2ce82f1ec21d254634def365a5947483142ad7c6f\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x133ea61d9961f2fbe43a516105f2e32b083fcecc10b07dde5dc25586a3ec4970\",\"urls\":[\"bzzr://1084b4782124511572c6aa2dd59d4e7c3f5249d6affaa78005524f7f9fb173f2\"]}},\"version\":1}" }, "TokenNetworkUtilsTest": { "abi": [ @@ -5974,9 +5990,9 @@ "type": "event" } ], - "bin": "60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a08062003f28833981018060405260a08110156200004e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050848484848433600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515620000ca57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156200010757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200014457600080fd5b6000841115156200015457600080fd5b6000831115156200016457600080fd5b82821115156200017357600080fd5b6200018d8662000377640100000000026401000000009004565b15156200019957600080fd5b620001b38562000377640100000000026401000000009004565b1515620001bf57600080fd5b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600281905550826003819055508160048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d60208110156200030757600080fd5b81019080805190602001909291905050501115156200032557600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050506200038a565b600080823b905060008111915050919050565b613b8e806200039a6000396000f3fe608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc7811610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610da8578063ee4516d914610dff578063fadc554b14610eaf578063fc0c546a14610fe6578063fe49ba1c146110305761022e565b8063b8378f7514610c1d578063c6e2e7f914610c3b578063db45479b14610c87578063e3fc99ce14610d8a5761022e565b8063938bcd6711610111578063938bcd6714610a025780639548bcef14610a7a5780639cadb15914610acd578063b32c65c814610b78578063b7506d7014610bfb5761022e565b80637709bc78146108145780637c4734f414610870578063838d6e05146108e8578063872342371461097f5761022e565b806324d73a93116101c55780635d6e441b116101945780635d6e441b146106f657806363ea014314610714578063679b37631461078c5780636f5450c2146107aa57806371e75992146107f65761022e565b806324d73a931461062e5780633af973b1146106785780634845be7614610696578063524bef8a146106b45761022e565b80631d5d552c116102015780631d5d552c146104a45780631e6c80ad1461057a578063224df42f146105c657806323aa8174146105e45761022e565b806303d9d253146102335780630a798f24146103385780630c32fdc4146103ba5780630fcc0c281461049a575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b2565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611480565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061172d565b604051808381526020018281526020019250505060405180910390f35b6104a2611745565b005b61055d600480360360208110156104ba57600080fd5b81019080803590602001906401000000008111156104d757600080fd5b8201836020820111156104e957600080fd5b8035906020019184600183028401116401000000008311171561050b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117e0565b604051808381526020018281526020019250505060405180910390f35b6105b06004803603604081101561059057600080fd5b8101908080359060200190929190803590602001909291905050506117f5565b6040518082815260200191505060405180910390f35b6105ce611809565b6040518082815260200191505060405180910390f35b6105ec61180f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610636611835565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068061185b565b6040518082815260200191505060405180910390f35b61069e611861565b6040518082815260200191505060405180910390f35b6106e0600480360360208110156106ca57600080fd5b810190808035906020019092919050505061186e565b6040518082815260200191505060405180910390f35b6106fe611886565b6040518082815260200191505060405180910390f35b61078a6004803603608081101561072a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611892565b005b610794611cea565b6040518082815260200191505060405180910390f35b6107e0600480360360408110156107c057600080fd5b810190808035906020019092919080359060200190929190505050611cf0565b6040518082815260200191505060405180910390f35b6107fe611d04565b6040518082815260200191505060405180910390f35b6108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d28565b604051808215151515815260200191505060405180910390f35b6108d26004803603604081101561088657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d3b565b6040518082815260200191505060405180910390f35b610954600480360360608110156108fe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f7d565b6040518083815260200182600481111561096a57fe5b60ff1681526020019250505060405180910390f35b610987612070565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109c75780820151818401526020810190506109ac565b50505050905090810190601f1680156109f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a6460048036036040811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a9565b6040518082815260200191505060405180910390f35b610ab060048036036040811015610a9057600080fd5b810190808035906020019092919080359060200190929190505050612188565b604051808381526020018281526020019250505060405180910390f35b610b766004803603610120811015610ae457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506121a0565b005b610b806126c4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bc0578082015181840152602081019050610ba5565b50505050905090810190601f168015610bed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c036126fd565b604051808215151515815260200191505060405180910390f35b610c25612710565b6040518082815260200191505060405180910390f35b610c7160048036036040811015610c5157600080fd5b810190808035906020019092919080359060200190929190505050612716565b6040518082815260200191505060405180910390f35b610d88600480360360c0811015610c9d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d0257600080fd5b820183602082011115610d1457600080fd5b80359060200191846001830284011164010000000083111715610d3657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061272a565b005b610d926128e6565b6040518082815260200191505060405180910390f35b610dd460048036036020811015610dbe57600080fd5b810190808035906020019092919050505061290e565b60405180838152602001826004811115610dea57fe5b60ff1681526020019250505060405180910390f35b610e6b60048036036060811015610e1557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061293f565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610fe46004803603610100811015610ec657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610f4b57600080fd5b820183602082011115610f5d57600080fd5b80359060200191846001830284011164010000000083111715610f7f57600080fd5b909192939192939080359060200190640100000000811115610fa057600080fd5b820183602082011115610fb257600080fd5b80359060200191846001830284011164010000000083111715610fd457600080fd5b9091929391929390505050612a14565b005b610fee612cd2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61109c6004803603606081101561104657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf7565b6040518082815260200191505060405180910390f35b6110bc83836120a9565b84141515156110ca57600080fd5b600060048111156110d757fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff16600481111561110657fe5b14151561111257600080fd5b6000815111151561112257600080fd5b600080600080600061113386612dea565b809450819550505061114689888a612cf7565b945060006009600087815260200190815260200160002090508060010154925084816000015414151561117857600080fd5b60008311151561118757600080fd5b61119184846130ff565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611348576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b505050506040513d602081101561132b57600080fd5b8101908080519060200190929190505050151561134757600080fd5b5b600082111561145c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561141557600080fd5b505af1158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b8101908080519060200190929190505050151561145b57600080fd5b5b81831015151561146857fe5b83831015151561147457fe5b50505050505050505050565b6000801515600660149054906101000a900460ff1615151415156114a357600080fd5b8160035481101515156114b557600080fd5b60045481111515156114c657600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561158d57600080fd5b505afa1580156115a1573d6000803e3d6000fd5b505050506040513d60208110156115b757600080fd5b81019080805190602001909291905050501015156115d457600080fd5b600160056000828254019250508190555060055490506115f48787611d3b565b91506000600860008481526020019081526020016000205414151561161857600080fd5b80600860008481526020019081526020016000208190555060006007600083815260200190815260200160002090506000816000015414151561165757fe5b6000600481111561166457fe5b8160010160009054906101000a900460ff16600481111561168157fe5b14151561168a57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156116b457fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60008061173a8484613118565b915091509250929050565b60001515600660149054906101000a900460ff16151514151561176757600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117c357600080fd5b6001600660146101000a81548160ff021916908315150217905550565b6000806117ec83612dea565b91509150915091565b6000611801838361328a565b905092915050565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff1615151415156118b457600080fd5b83600160048111156118c257fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118f157fe5b1415156118fd57600080fd5b61190784836120a9565b8514151561191457600080fd5b60008311151561192357600080fd5b67010a741a46278000831115151561193a57600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156119f657600080fd5b878511151515611a0557600080fd5b8785836000015401141515611a1657fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611adb57600080fd5b505afa158015611aef573d6000803e3d6000fd5b505050506040513d6020811015611b0557600080fd5b81019080805190602001909291905050500111151515611b2457600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b4d57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c9857600080fd5b505af1158015611cac573d6000803e3d6000fd5b505050506040513d6020811015611cc257600080fd5b81019080805190602001909291905050501515611cde57600080fd5b50505050505050505050565b60055481565b6000611cfc83836132a3565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d7857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611db457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611def57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611ecf578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f77565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611fbd57fe5b816004811115611fc957fe5b148015611fd65750600089115b8015611fe457506005548911155b1561205a5760039050611ff8898989612cf7565b9350600060096000868152602001908152602001600020905061201c8a898b612cf7565b935060006009600086815260200190815260200160002090506000826001015414801561204d575060008160010154145b1561205757600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120e657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561212257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561215d57600080fd5b60006121698484611d3b565b9050600860008281526020019081526020016000205491505092915050565b60008061219584846132e4565b915091509250929050565b6121aa88856120a9565b891415156121b757600080fd5b60006121c38986611d3b565b90506000600760008c81526020019081526020016000209050600260048111156121e957fe5b8160010160009054906101000a900460ff16600481111561220657fe5b14151561221257600080fd5b43816000015410151561222457600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506122ba828c8c8c613309565b15156122c557600080fd5b6122d181888888613309565b15156122dc57600080fd5b6122ea828c8c848b8b613392565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff0219169055505060086000858152602001908152602001600020600090556124408d8d8a8d8d6134a1565b61244d8d898e89896134a1565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156125a1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561255a57600080fd5b505af115801561256e573d6000803e3d6000fd5b505050506040513d602081101561258457600080fd5b810190808051906020019092919050505015156125a057600080fd5b5b60008711156126b5576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050506040513d602081101561269857600080fd5b810190808051906020019092919050505015156126b457600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b600061272283836130ff565b905092915050565b856001600481111561273857fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561276757fe5b14151561277357600080fd5b61277d33876120a9565b8714151561278a57600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156127c357fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128965761284d89888888886134ff565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561288957600080fd5b6128958183888a6136d5565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506129ad8c8c8c612cf7565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612a1e89896120a9565b8a141515612a2b57600080fd5b60006001028714151515612a3e57600080fd5b600086111515612a4d57600080fd5b6000806000600760008e8152602001908152602001600020905060026004811115612a7457fe5b8160010160009054906101000a900460ff166004811115612a9157fe5b141515612a9d57600080fd5b43816000015410151515612ab057600080fd5b612b468d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613745565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b8257600080fd5b612bd38d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134ff565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612c0f57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612c7157600080fd5b612c7d828e8c8e6136d5565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612d3457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612e0157fe5b06141515612e0e57600080fd5b600080600080600060606001606088811515612e2657fe5b0401604051908082528060200260200182016040528015612e565781602001602082028038833980820191505090505b509050602095505b86861015612eb157612e708a87613118565b809550819450505083850194508281606088811515612e8b57fe5b04815181101515612e9857fe5b9060200190602002018181525050606086019550612e5e565b606087811515612ebd57fe5b0496505b60018711156130d2576000600288811515612ed857fe5b06141515612f1e578060018803815181101515612ef157fe5b906020019060200201518188815181101515612f0957fe5b90602001906020020181815250506001870196505b600095505b600187038610156130be578060018701815181101515612f3f57fe5b906020019060200201518187815181101515612f5757fe5b906020019060200201511415612f86578086815181101515612f7557fe5b90602001906020020151925061308a565b8060018701815181101515612f9757fe5b906020019060200201518187815181101515612faf57fe5b906020019060200201511015613026578086815181101515612fcd57fe5b906020019060200201518160018801815181101515612fe857fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250613089565b806001870181518110151561303757fe5b90602001906020020151818781518110151561304f57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561309857fe5b048151811015156130a557fe5b9060200190602002018181525050600286019550612f23565b6002868115156130ca57fe5b049650612ec1565b8060008151811015156130e157fe5b90602001906020020151915081859850985050505050505050915091565b600081831161310e5782613110565b815b905092915050565b600080600080600080600087895111151561314157806000809050965096505050505050613283565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561322157600080fd5b505afa158015613235573d6000803e3d6000fd5b505050506040513d602081101561324b57600080fd5b81019080805190602001909291905050509250600083148061326d5750828511155b1561327757600093505b80849650965050505050505b9250929050565b6000818311613299578161329b565b825b905092915050565b6000808284019050838110156132d9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132db565b805b91505092915050565b6000808284116132f9576000848191506132fe565b828403835b915091509250929050565b60008060010285600301541480156133215750600084145b801561332d5750600083145b801561333c5750600060010282145b1561334a576001905061338a565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006133a5613b39565b6133ad613b39565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506134178f8d613971565b92506134238282613992565b945061342f85846130ff565b94508483039350613440858b6132e4565b809b508196505050613452848e6132e4565b809e50819550505082851115151561346657fe5b82841115151561347257fe5b898d85870101018314151561348357fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214806134b35750600060010281145b156134bd576134f8565b60006134ca868686612cf7565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561358557fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156135c1578051825260208201915060208101905060208303925061359c565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561361457805182526020820191506020810190506020830392506135ef565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136c88185613a26565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561372c57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156137cb57fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561380857805182526020820191506020810190506020830392506137e3565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561385b5780518252602082019150602081019050602083039250613836565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561391357805182526020820191506020810190506020830392506138ee565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139638185613a26565b925050509695505050505050565b60008160010154836001015483600001548560000154010303905092915050565b60008060008060006139ac876040015188606001516132a3565b93506139c0866040015187606001516132a3565b92508383101515156139d157600080fd5b866040015184101515156139e157fe5b856040015183101515156139f157fe5b8383039150613a048288600001516132a3565b9050613a148188602001516132e4565b50809150508094505050505092915050565b600060418251141515613a3857600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613a6857601b810190505b601b8160ff161480613a7d5750601c8160ff16145b1515613a8857600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ae5573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613b2d57600080fd5b83935050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058204858b4ce6136f3129b6a9a4e91078f9e5e87fa0792c3faf8c82ccc324d7cbe000029", - "bin-runtime": "608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc7811610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610da8578063ee4516d914610dff578063fadc554b14610eaf578063fc0c546a14610fe6578063fe49ba1c146110305761022e565b8063b8378f7514610c1d578063c6e2e7f914610c3b578063db45479b14610c87578063e3fc99ce14610d8a5761022e565b8063938bcd6711610111578063938bcd6714610a025780639548bcef14610a7a5780639cadb15914610acd578063b32c65c814610b78578063b7506d7014610bfb5761022e565b80637709bc78146108145780637c4734f414610870578063838d6e05146108e8578063872342371461097f5761022e565b806324d73a93116101c55780635d6e441b116101945780635d6e441b146106f657806363ea014314610714578063679b37631461078c5780636f5450c2146107aa57806371e75992146107f65761022e565b806324d73a931461062e5780633af973b1146106785780634845be7614610696578063524bef8a146106b45761022e565b80631d5d552c116102015780631d5d552c146104a45780631e6c80ad1461057a578063224df42f146105c657806323aa8174146105e45761022e565b806303d9d253146102335780630a798f24146103385780630c32fdc4146103ba5780630fcc0c281461049a575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b2565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611480565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061172d565b604051808381526020018281526020019250505060405180910390f35b6104a2611745565b005b61055d600480360360208110156104ba57600080fd5b81019080803590602001906401000000008111156104d757600080fd5b8201836020820111156104e957600080fd5b8035906020019184600183028401116401000000008311171561050b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117e0565b604051808381526020018281526020019250505060405180910390f35b6105b06004803603604081101561059057600080fd5b8101908080359060200190929190803590602001909291905050506117f5565b6040518082815260200191505060405180910390f35b6105ce611809565b6040518082815260200191505060405180910390f35b6105ec61180f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610636611835565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068061185b565b6040518082815260200191505060405180910390f35b61069e611861565b6040518082815260200191505060405180910390f35b6106e0600480360360208110156106ca57600080fd5b810190808035906020019092919050505061186e565b6040518082815260200191505060405180910390f35b6106fe611886565b6040518082815260200191505060405180910390f35b61078a6004803603608081101561072a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611892565b005b610794611cea565b6040518082815260200191505060405180910390f35b6107e0600480360360408110156107c057600080fd5b810190808035906020019092919080359060200190929190505050611cf0565b6040518082815260200191505060405180910390f35b6107fe611d04565b6040518082815260200191505060405180910390f35b6108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d28565b604051808215151515815260200191505060405180910390f35b6108d26004803603604081101561088657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d3b565b6040518082815260200191505060405180910390f35b610954600480360360608110156108fe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f7d565b6040518083815260200182600481111561096a57fe5b60ff1681526020019250505060405180910390f35b610987612070565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109c75780820151818401526020810190506109ac565b50505050905090810190601f1680156109f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a6460048036036040811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a9565b6040518082815260200191505060405180910390f35b610ab060048036036040811015610a9057600080fd5b810190808035906020019092919080359060200190929190505050612188565b604051808381526020018281526020019250505060405180910390f35b610b766004803603610120811015610ae457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506121a0565b005b610b806126c4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bc0578082015181840152602081019050610ba5565b50505050905090810190601f168015610bed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c036126fd565b604051808215151515815260200191505060405180910390f35b610c25612710565b6040518082815260200191505060405180910390f35b610c7160048036036040811015610c5157600080fd5b810190808035906020019092919080359060200190929190505050612716565b6040518082815260200191505060405180910390f35b610d88600480360360c0811015610c9d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d0257600080fd5b820183602082011115610d1457600080fd5b80359060200191846001830284011164010000000083111715610d3657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061272a565b005b610d926128e6565b6040518082815260200191505060405180910390f35b610dd460048036036020811015610dbe57600080fd5b810190808035906020019092919050505061290e565b60405180838152602001826004811115610dea57fe5b60ff1681526020019250505060405180910390f35b610e6b60048036036060811015610e1557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061293f565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610fe46004803603610100811015610ec657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610f4b57600080fd5b820183602082011115610f5d57600080fd5b80359060200191846001830284011164010000000083111715610f7f57600080fd5b909192939192939080359060200190640100000000811115610fa057600080fd5b820183602082011115610fb257600080fd5b80359060200191846001830284011164010000000083111715610fd457600080fd5b9091929391929390505050612a14565b005b610fee612cd2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61109c6004803603606081101561104657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf7565b6040518082815260200191505060405180910390f35b6110bc83836120a9565b84141515156110ca57600080fd5b600060048111156110d757fe5b6007600086815260200190815260200160002060010160009054906101000a900460ff16600481111561110657fe5b14151561111257600080fd5b6000815111151561112257600080fd5b600080600080600061113386612dea565b809450819550505061114689888a612cf7565b945060006009600087815260200190815260200160002090508060010154925084816000015414151561117857600080fd5b60008311151561118757600080fd5b61119184846130ff565b9350838303915060096000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611348576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b505050506040513d602081101561132b57600080fd5b8101908080519060200190929190505050151561134757600080fd5b5b600082111561145c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561141557600080fd5b505af1158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b8101908080519060200190929190505050151561145b57600080fd5b5b81831015151561146857fe5b83831015151561147457fe5b50505050505050505050565b6000801515600660149054906101000a900460ff1615151415156114a357600080fd5b8160035481101515156114b557600080fd5b60045481111515156114c657600080fd5b600080680d8d726b7177a800006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561158d57600080fd5b505afa1580156115a1573d6000803e3d6000fd5b505050506040513d60208110156115b757600080fd5b81019080805190602001909291905050501015156115d457600080fd5b600160056000828254019250508190555060055490506115f48787611d3b565b91506000600860008481526020019081526020016000205414151561161857600080fd5b80600860008481526020019081526020016000208190555060006007600083815260200190815260200160002090506000816000015414151561165757fe5b6000600481111561166457fe5b8160010160009054906101000a900460ff16600481111561168157fe5b14151561168a57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156116b457fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60008061173a8484613118565b915091509250929050565b60001515600660149054906101000a900460ff16151514151561176757600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117c357600080fd5b6001600660146101000a81548160ff021916908315150217905550565b6000806117ec83612dea565b91509150915091565b6000611801838361328a565b905092915050565b60045481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b680d8d726b7177a8000081565b60086020528060005260406000206000915090505481565b67010a741a4627800081565b60001515600660149054906101000a900460ff1615151415156118b457600080fd5b83600160048111156118c257fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118f157fe5b1415156118fd57600080fd5b61190784836120a9565b8514151561191457600080fd5b60008311151561192357600080fd5b67010a741a46278000831115151561193a57600080fd5b600080600060076000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156119f657600080fd5b878511151515611a0557600080fd5b8785836000015401141515611a1657fe5b680d8d726b7177a80000856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611adb57600080fd5b505afa158015611aef573d6000803e3d6000fd5b505050506040513d6020811015611b0557600080fd5b81019080805190602001909291905050500111151515611b2457600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b4d57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c9857600080fd5b505af1158015611cac573d6000803e3d6000fd5b505050506040513d6020811015611cc257600080fd5b81019080805190602001909291905050501515611cde57600080fd5b50505050505050505050565b60055481565b6000611cfc83836132a3565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d7857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611db457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611def57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611ecf578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f77565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060076000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611fbd57fe5b816004811115611fc957fe5b148015611fd65750600089115b8015611fe457506005548911155b1561205a5760039050611ff8898989612cf7565b9350600060096000868152602001908152602001600020905061201c8a898b612cf7565b935060006009600086815260200190815260200160002090506000826001015414801561204d575060008160010154145b1561205757600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120e657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561212257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561215d57600080fd5b60006121698484611d3b565b9050600860008281526020019081526020016000205491505092915050565b60008061219584846132e4565b915091509250929050565b6121aa88856120a9565b891415156121b757600080fd5b60006121c38986611d3b565b90506000600760008c81526020019081526020016000209050600260048111156121e957fe5b8160010160009054906101000a900460ff16600481111561220657fe5b14151561221257600080fd5b43816000015410151561222457600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506122ba828c8c8c613309565b15156122c557600080fd5b6122d181888888613309565b15156122dc57600080fd5b6122ea828c8c848b8b613392565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600760008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff0219169055505060086000858152602001908152602001600020600090556124408d8d8a8d8d6134a1565b61244d8d898e89896134a1565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b11156125a1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561255a57600080fd5b505af115801561256e573d6000803e3d6000fd5b505050506040513d602081101561258457600080fd5b810190808051906020019092919050505015156125a057600080fd5b5b60008711156126b5576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050506040513d602081101561269857600080fd5b810190808051906020019092919050505015156126b457600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600660149054906101000a900460ff1681565b60035481565b600061272283836130ff565b905092915050565b856001600481111561273857fe5b6007600083815260200190815260200160002060010160009054906101000a900460ff16600481111561276757fe5b14151561277357600080fd5b61277d33876120a9565b8714151561278a57600080fd5b600080600760008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156127c357fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128965761284d89888888886134ff565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561288957600080fd5b6128958183888a6136d5565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600760008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506129ad8c8c8c612cf7565b91506000600960008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612a1e89896120a9565b8a141515612a2b57600080fd5b60006001028714151515612a3e57600080fd5b600086111515612a4d57600080fd5b6000806000600760008e8152602001908152602001600020905060026004811115612a7457fe5b8160010160009054906101000a900460ff166004811115612a9157fe5b141515612a9d57600080fd5b43816000015410151515612ab057600080fd5b612b468d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613745565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b8257600080fd5b612bd38d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134ff565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612c0f57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612c7157600080fd5b612c7d828e8c8e6136d5565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612d3457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612e0157fe5b06141515612e0e57600080fd5b600080600080600060606001606088811515612e2657fe5b0401604051908082528060200260200182016040528015612e565781602001602082028038833980820191505090505b509050602095505b86861015612eb157612e708a87613118565b809550819450505083850194508281606088811515612e8b57fe5b04815181101515612e9857fe5b9060200190602002018181525050606086019550612e5e565b606087811515612ebd57fe5b0496505b60018711156130d2576000600288811515612ed857fe5b06141515612f1e578060018803815181101515612ef157fe5b906020019060200201518188815181101515612f0957fe5b90602001906020020181815250506001870196505b600095505b600187038610156130be578060018701815181101515612f3f57fe5b906020019060200201518187815181101515612f5757fe5b906020019060200201511415612f86578086815181101515612f7557fe5b90602001906020020151925061308a565b8060018701815181101515612f9757fe5b906020019060200201518187815181101515612faf57fe5b906020019060200201511015613026578086815181101515612fcd57fe5b906020019060200201518160018801815181101515612fe857fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250613089565b806001870181518110151561303757fe5b90602001906020020151818781518110151561304f57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561309857fe5b048151811015156130a557fe5b9060200190602002018181525050600286019550612f23565b6002868115156130ca57fe5b049650612ec1565b8060008151811015156130e157fe5b90602001906020020151915081859850985050505050505050915091565b600081831161310e5782613110565b815b905092915050565b600080600080600080600087895111151561314157806000809050965096505050505050613283565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561322157600080fd5b505afa158015613235573d6000803e3d6000fd5b505050506040513d602081101561324b57600080fd5b81019080805190602001909291905050509250600083148061326d5750828511155b1561327757600093505b80849650965050505050505b9250929050565b6000818311613299578161329b565b825b905092915050565b6000808284019050838110156132d9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132db565b805b91505092915050565b6000808284116132f9576000848191506132fe565b828403835b915091509250929050565b60008060010285600301541480156133215750600084145b801561332d5750600083145b801561333c5750600060010282145b1561334a576001905061338a565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b60008060008060008060006133a5613b39565b6133ad613b39565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506134178f8d613971565b92506134238282613992565b945061342f85846130ff565b94508483039350613440858b6132e4565b809b508196505050613452848e6132e4565b809e50819550505082851115151561346657fe5b82841115151561347257fe5b898d85870101018314151561348357fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214806134b35750600060010281145b156134bd576134f8565b60006134ca868686612cf7565b9050600060096000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561358557fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156135c1578051825260208201915060208101905060208303925061359c565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561361457805182526020820191506020810190506020830392506135ef565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136c88185613a26565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561372c57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156137cb57fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561380857805182526020820191506020810190506020830392506137e3565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561385b5780518252602082019150602081019050602083039250613836565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b60208310151561391357805182526020820191506020810190506020830392506138ee565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139638185613a26565b925050509695505050505050565b60008160010154836001015483600001548560000154010303905092915050565b60008060008060006139ac876040015188606001516132a3565b93506139c0866040015187606001516132a3565b92508383101515156139d157600080fd5b866040015184101515156139e157fe5b856040015183101515156139f157fe5b8383039150613a048288600001516132a3565b9050613a148188602001516132e4565b50809150508094505050505092915050565b600060418251141515613a3857600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613a6857601b810190505b601b8160ff161480613a7d5750601c8160ff16145b1515613a8857600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ae5573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613b2d57600080fd5b83935050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058204858b4ce6136f3129b6a9a4e91078f9e5e87fa0792c3faf8c82ccc324d7cbe000029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"uint256\"}],\"name\":\"getLockDataFromMerkleTreePublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"getMerkleRootAndUnlockedAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"maxPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_additionPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_subtractPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"minPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get_max_safe_uint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkUtilsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xd6a815ea4cc35ca8fbf9e64cae2d51bcad170cd242c3f6681d9c887d09e2b595\",\"urls\":[\"bzzr://61b2069b4a3ac87f37cf9f80db287817235e17f3833bd3dacbb95ef43353e5ce\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x71686981d22a38a532fe80a212d5801fe4b31b4eff1942b43d1186a7b25b3173\",\"urls\":[\"bzzr://b16b75506c7c7179656c010ed15fa5e1fb94d9e5a5f3f52f4dbfda3b4a0df5db\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a08062003f69833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b613b6d80620003fc6000396000f3fe608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc7811610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610da8578063ee4516d914610dff578063fadc554b14610eaf578063fc0c546a14610fe6578063fe49ba1c146110305761022e565b8063b8378f7514610c1d578063c6e2e7f914610c3b578063db45479b14610c87578063e3fc99ce14610d8a5761022e565b8063938bcd6711610111578063938bcd6714610a025780639548bcef14610a7a5780639cadb15914610acd578063b32c65c814610b78578063b7506d7014610bfb5761022e565b80637709bc78146108145780637c4734f414610870578063838d6e05146108e8578063872342371461097f5761022e565b806324d73a93116101c55780635d6e441b116101945780635d6e441b146106f657806363ea014314610714578063679b37631461078c5780636f5450c2146107aa57806371e75992146107f65761022e565b806324d73a931461062e5780633af973b1146106785780634845be7614610696578063524bef8a146106b45761022e565b80631d5d552c116102015780631d5d552c146104a45780631e6c80ad1461057a578063224df42f146105c657806323aa8174146105e45761022e565b806303d9d253146102335780630a798f24146103385780630c32fdc4146103ba5780630fcc0c281461049a575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b2565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611480565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611726565b604051808381526020018281526020019250505060405180910390f35b6104a261173e565b005b61055d600480360360208110156104ba57600080fd5b81019080803590602001906401000000008111156104d757600080fd5b8201836020820111156104e957600080fd5b8035906020019184600183028401116401000000008311171561050b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117d9565b604051808381526020018281526020019250505060405180910390f35b6105b06004803603604081101561059057600080fd5b8101908080359060200190929190803590602001909291905050506117ee565b6040518082815260200191505060405180910390f35b6105ce611802565b6040518082815260200191505060405180910390f35b6105ec611808565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61063661182e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610680611854565b6040518082815260200191505060405180910390f35b61069e61185a565b6040518082815260200191505060405180910390f35b6106e0600480360360208110156106ca57600080fd5b8101908080359060200190929190505050611860565b6040518082815260200191505060405180910390f35b6106fe611878565b6040518082815260200191505060405180910390f35b61078a6004803603608081101561072a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061187e565b005b610794611cc9565b6040518082815260200191505060405180910390f35b6107e0600480360360408110156107c057600080fd5b810190808035906020019092919080359060200190929190505050611ccf565b6040518082815260200191505060405180910390f35b6107fe611ce3565b6040518082815260200191505060405180910390f35b6108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d07565b604051808215151515815260200191505060405180910390f35b6108d26004803603604081101561088657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d1a565b6040518082815260200191505060405180910390f35b610954600480360360608110156108fe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f5c565b6040518083815260200182600481111561096a57fe5b60ff1681526020019250505060405180910390f35b61098761204f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109c75780820151818401526020810190506109ac565b50505050905090810190601f1680156109f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a6460048036036040811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612088565b6040518082815260200191505060405180910390f35b610ab060048036036040811015610a9057600080fd5b810190808035906020019092919080359060200190929190505050612167565b604051808381526020018281526020019250505060405180910390f35b610b766004803603610120811015610ae457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061217f565b005b610b806126a3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bc0578082015181840152602081019050610ba5565b50505050905090810190601f168015610bed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c036126dc565b604051808215151515815260200191505060405180910390f35b610c256126ef565b6040518082815260200191505060405180910390f35b610c7160048036036040811015610c5157600080fd5b8101908080359060200190929190803590602001909291905050506126f5565b6040518082815260200191505060405180910390f35b610d88600480360360c0811015610c9d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d0257600080fd5b820183602082011115610d1457600080fd5b80359060200191846001830284011164010000000083111715610d3657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612709565b005b610d926128c5565b6040518082815260200191505060405180910390f35b610dd460048036036020811015610dbe57600080fd5b81019080803590602001909291905050506128ed565b60405180838152602001826004811115610dea57fe5b60ff1681526020019250505060405180910390f35b610e6b60048036036060811015610e1557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061291e565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610fe46004803603610100811015610ec657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610f4b57600080fd5b820183602082011115610f5d57600080fd5b80359060200191846001830284011164010000000083111715610f7f57600080fd5b909192939192939080359060200190640100000000811115610fa057600080fd5b820183602082011115610fb257600080fd5b80359060200191846001830284011164010000000083111715610fd457600080fd5b90919293919293905050506129f3565b005b610fee612cb1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61109c6004803603606081101561104657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd6565b6040518082815260200191505060405180910390f35b6110bc8383612088565b84141515156110ca57600080fd5b600060048111156110d757fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561110657fe5b14151561111257600080fd5b6000815111151561112257600080fd5b600080600080600061113386612dc9565b809450819550505061114689888a612cd6565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561117857600080fd5b60008311151561118757600080fd5b61119184846130de565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611348576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b505050506040513d602081101561132b57600080fd5b8101908080519060200190929190505050151561134757600080fd5b5b600082111561145c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561141557600080fd5b505af1158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b8101908080519060200190929190505050151561145b57600080fd5b5b81831015151561146857fe5b83831015151561147457fe5b50505050505050505050565b6000801515600860149054906101000a900460ff1615151415156114a357600080fd5b8160035481101515156114b557600080fd5b60045481111515156114c657600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561158657600080fd5b505afa15801561159a573d6000803e3d6000fd5b505050506040513d60208110156115b057600080fd5b81019080805190602001909291905050501015156115cd57600080fd5b600160076000828254019250508190555060075490506115ed8787611d1a565b91506000600a60008481526020019081526020016000205414151561161157600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561165057fe5b6000600481111561165d57fe5b8160010160009054906101000a900460ff16600481111561167a57fe5b14151561168357fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156116ad57fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60008061173384846130f7565b915091509250929050565b60001515600860149054906101000a900460ff16151514151561176057600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117bc57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b6000806117e583612dc9565b91509150915091565b60006117fa8383613269565b905092915050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff1615151415156118a057600080fd5b83600160048111156118ae57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118dd57fe5b1415156118e957600080fd5b6118f38483612088565b8514151561190057600080fd5b60008311151561190f57600080fd5b600554831115151561192057600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156119dc57600080fd5b8785111515156119eb57600080fd5b87858360000154011415156119fc57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611aba57600080fd5b505afa158015611ace573d6000803e3d6000fd5b505050506040513d6020811015611ae457600080fd5b81019080805190602001909291905050500111151515611b0357600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b2c57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c7757600080fd5b505af1158015611c8b573d6000803e3d6000fd5b505050506040513d6020811015611ca157600080fd5b81019080805190602001909291905050501515611cbd57600080fd5b50505050505050505050565b60075481565b6000611cdb8383613282565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d5757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d9357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611dce57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611eae578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f56565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f9c57fe5b816004811115611fa857fe5b148015611fb55750600089115b8015611fc357506007548911155b156120395760039050611fd7898989612cd6565b93506000600b60008681526020019081526020016000209050611ffb8a898b612cd6565b93506000600b600086815260200190815260200160002090506000826001015414801561202c575060008160010154145b1561203657600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120c557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561210157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561213c57600080fd5b60006121488484611d1a565b9050600a60008281526020019081526020016000205491505092915050565b60008061217484846132c3565b915091509250929050565b6121898885612088565b8914151561219657600080fd5b60006121a28986611d1a565b90506000600960008c81526020019081526020016000209050600260048111156121c857fe5b8160010160009054906101000a900460ff1660048111156121e557fe5b1415156121f157600080fd5b43816000015410151561220357600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612299828c8c8c6132e8565b15156122a457600080fd5b6122b0818888886132e8565b15156122bb57600080fd5b6122c9828c8c848b8b613371565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a60008581526020019081526020016000206000905561241f8d8d8a8d8d613480565b61242c8d898e8989613480565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b1115612580576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b8101908080519060200190929190505050151561257f57600080fd5b5b6000871115612694576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561264d57600080fd5b505af1158015612661573d6000803e3d6000fd5b505050506040513d602081101561267757600080fd5b8101908080519060200190929190505050151561269357600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b600061270183836130de565b905092915050565b856001600481111561271757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561274657fe5b14151561275257600080fd5b61275c3387612088565b8714151561276957600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156127a257fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128755761282c89888888886134de565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561286857600080fd5b6128748183888a6136b4565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061298c8c8c8c612cd6565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6129fd8989612088565b8a141515612a0a57600080fd5b60006001028714151515612a1d57600080fd5b600086111515612a2c57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612a5357fe5b8160010160009054906101000a900460ff166004811115612a7057fe5b141515612a7c57600080fd5b43816000015410151515612a8f57600080fd5b612b258d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613724565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b6157600080fd5b612bb28d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134de565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612bee57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612c5057600080fd5b612c5c828e8c8e6136b4565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612d1357600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612de057fe5b06141515612ded57600080fd5b600080600080600060606001606088811515612e0557fe5b0401604051908082528060200260200182016040528015612e355781602001602082028038833980820191505090505b509050602095505b86861015612e9057612e4f8a876130f7565b809550819450505083850194508281606088811515612e6a57fe5b04815181101515612e7757fe5b9060200190602002018181525050606086019550612e3d565b606087811515612e9c57fe5b0496505b60018711156130b1576000600288811515612eb757fe5b06141515612efd578060018803815181101515612ed057fe5b906020019060200201518188815181101515612ee857fe5b90602001906020020181815250506001870196505b600095505b6001870386101561309d578060018701815181101515612f1e57fe5b906020019060200201518187815181101515612f3657fe5b906020019060200201511415612f65578086815181101515612f5457fe5b906020019060200201519250613069565b8060018701815181101515612f7657fe5b906020019060200201518187815181101515612f8e57fe5b906020019060200201511015613005578086815181101515612fac57fe5b906020019060200201518160018801815181101515612fc757fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250613068565b806001870181518110151561301657fe5b90602001906020020151818781518110151561302e57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561307757fe5b0481518110151561308457fe5b9060200190602002018181525050600286019550612f02565b6002868115156130a957fe5b049650612ea0565b8060008151811015156130c057fe5b90602001906020020151915081859850985050505050505050915091565b60008183116130ed57826130ef565b815b905092915050565b600080600080600080600087895111151561312057806000809050965096505050505050613262565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561320057600080fd5b505afa158015613214573d6000803e3d6000fd5b505050506040513d602081101561322a57600080fd5b81019080805190602001909291905050509250600083148061324c5750828511155b1561325657600093505b80849650965050505050505b9250929050565b6000818311613278578161327a565b825b905092915050565b6000808284019050838110156132b8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132ba565b805b91505092915050565b6000808284116132d8576000848191506132dd565b828403835b915091509250929050565b60008060010285600301541480156133005750600084145b801561330c5750600083145b801561331b5750600060010282145b156133295760019050613369565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613384613b18565b61338c613b18565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506133f68f8d613950565b92506134028282613971565b945061340e85846130de565b9450848303935061341f858b6132c3565b809b508196505050613431848e6132c3565b809e50819550505082851115151561344557fe5b82841115151561345157fe5b898d85870101018314151561346257fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214806134925750600060010281145b1561349c576134d7565b60006134a9868686612cd6565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561356457fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156135a0578051825260208201915060208101905060208303925061357b565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135f357805182526020820191506020810190506020830392506135ce565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136a78185613a05565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561370b57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156137aa57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156137e757805182526020820191506020810190506020830392506137c2565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561383a5780518252602082019150602081019050602083039250613815565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156138f257805182526020820191506020810190506020830392506138cd565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139428185613a05565b925050509695505050505050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061398b87604001518860600151613282565b935061399f86604001518760600151613282565b92508383101515156139b057600080fd5b866040015184101515156139c057fe5b856040015183101515156139d057fe5b83830391506139e3828860000151613282565b90506139f38188602001516132c3565b50809150508094505050505092915050565b600060418251141515613a1757600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613a4757601b810190505b601b8160ff161480613a5c5750601c8160ff16145b1515613a6757600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ac4573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613b0c57600080fd5b83935050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820bfb8c37aef605805b8fa6a714864e59d2355853b79ce56f84de3b66938c7a3490029", + "bin-runtime": "608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc7811610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610da8578063ee4516d914610dff578063fadc554b14610eaf578063fc0c546a14610fe6578063fe49ba1c146110305761022e565b8063b8378f7514610c1d578063c6e2e7f914610c3b578063db45479b14610c87578063e3fc99ce14610d8a5761022e565b8063938bcd6711610111578063938bcd6714610a025780639548bcef14610a7a5780639cadb15914610acd578063b32c65c814610b78578063b7506d7014610bfb5761022e565b80637709bc78146108145780637c4734f414610870578063838d6e05146108e8578063872342371461097f5761022e565b806324d73a93116101c55780635d6e441b116101945780635d6e441b146106f657806363ea014314610714578063679b37631461078c5780636f5450c2146107aa57806371e75992146107f65761022e565b806324d73a931461062e5780633af973b1146106785780634845be7614610696578063524bef8a146106b45761022e565b80631d5d552c116102015780631d5d552c146104a45780631e6c80ad1461057a578063224df42f146105c657806323aa8174146105e45761022e565b806303d9d253146102335780630a798f24146103385780630c32fdc4146103ba5780630fcc0c281461049a575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b2565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611480565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611726565b604051808381526020018281526020019250505060405180910390f35b6104a261173e565b005b61055d600480360360208110156104ba57600080fd5b81019080803590602001906401000000008111156104d757600080fd5b8201836020820111156104e957600080fd5b8035906020019184600183028401116401000000008311171561050b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117d9565b604051808381526020018281526020019250505060405180910390f35b6105b06004803603604081101561059057600080fd5b8101908080359060200190929190803590602001909291905050506117ee565b6040518082815260200191505060405180910390f35b6105ce611802565b6040518082815260200191505060405180910390f35b6105ec611808565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61063661182e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610680611854565b6040518082815260200191505060405180910390f35b61069e61185a565b6040518082815260200191505060405180910390f35b6106e0600480360360208110156106ca57600080fd5b8101908080359060200190929190505050611860565b6040518082815260200191505060405180910390f35b6106fe611878565b6040518082815260200191505060405180910390f35b61078a6004803603608081101561072a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061187e565b005b610794611cc9565b6040518082815260200191505060405180910390f35b6107e0600480360360408110156107c057600080fd5b810190808035906020019092919080359060200190929190505050611ccf565b6040518082815260200191505060405180910390f35b6107fe611ce3565b6040518082815260200191505060405180910390f35b6108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d07565b604051808215151515815260200191505060405180910390f35b6108d26004803603604081101561088657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d1a565b6040518082815260200191505060405180910390f35b610954600480360360608110156108fe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f5c565b6040518083815260200182600481111561096a57fe5b60ff1681526020019250505060405180910390f35b61098761204f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109c75780820151818401526020810190506109ac565b50505050905090810190601f1680156109f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a6460048036036040811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612088565b6040518082815260200191505060405180910390f35b610ab060048036036040811015610a9057600080fd5b810190808035906020019092919080359060200190929190505050612167565b604051808381526020018281526020019250505060405180910390f35b610b766004803603610120811015610ae457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061217f565b005b610b806126a3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bc0578082015181840152602081019050610ba5565b50505050905090810190601f168015610bed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c036126dc565b604051808215151515815260200191505060405180910390f35b610c256126ef565b6040518082815260200191505060405180910390f35b610c7160048036036040811015610c5157600080fd5b8101908080359060200190929190803590602001909291905050506126f5565b6040518082815260200191505060405180910390f35b610d88600480360360c0811015610c9d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d0257600080fd5b820183602082011115610d1457600080fd5b80359060200191846001830284011164010000000083111715610d3657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612709565b005b610d926128c5565b6040518082815260200191505060405180910390f35b610dd460048036036020811015610dbe57600080fd5b81019080803590602001909291905050506128ed565b60405180838152602001826004811115610dea57fe5b60ff1681526020019250505060405180910390f35b610e6b60048036036060811015610e1557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061291e565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610fe46004803603610100811015610ec657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610f4b57600080fd5b820183602082011115610f5d57600080fd5b80359060200191846001830284011164010000000083111715610f7f57600080fd5b909192939192939080359060200190640100000000811115610fa057600080fd5b820183602082011115610fb257600080fd5b80359060200191846001830284011164010000000083111715610fd457600080fd5b90919293919293905050506129f3565b005b610fee612cb1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61109c6004803603606081101561104657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd6565b6040518082815260200191505060405180910390f35b6110bc8383612088565b84141515156110ca57600080fd5b600060048111156110d757fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561110657fe5b14151561111257600080fd5b6000815111151561112257600080fd5b600080600080600061113386612dc9565b809450819550505061114689888a612cd6565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561117857600080fd5b60008311151561118757600080fd5b61119184846130de565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611348576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b505050506040513d602081101561132b57600080fd5b8101908080519060200190929190505050151561134757600080fd5b5b600082111561145c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561141557600080fd5b505af1158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b8101908080519060200190929190505050151561145b57600080fd5b5b81831015151561146857fe5b83831015151561147457fe5b50505050505050505050565b6000801515600860149054906101000a900460ff1615151415156114a357600080fd5b8160035481101515156114b557600080fd5b60045481111515156114c657600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561158657600080fd5b505afa15801561159a573d6000803e3d6000fd5b505050506040513d60208110156115b057600080fd5b81019080805190602001909291905050501015156115cd57600080fd5b600160076000828254019250508190555060075490506115ed8787611d1a565b91506000600a60008481526020019081526020016000205414151561161157600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561165057fe5b6000600481111561165d57fe5b8160010160009054906101000a900460ff16600481111561167a57fe5b14151561168357fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156116ad57fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60008061173384846130f7565b915091509250929050565b60001515600860149054906101000a900460ff16151514151561176057600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117bc57600080fd5b6001600860146101000a81548160ff021916908315150217905550565b6000806117e583612dc9565b91509150915091565b60006117fa8383613269565b905092915050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff1615151415156118a057600080fd5b83600160048111156118ae57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156118dd57fe5b1415156118e957600080fd5b6118f38483612088565b8514151561190057600080fd5b60008311151561190f57600080fd5b600554831115151561192057600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156119dc57600080fd5b8785111515156119eb57600080fd5b87858360000154011415156119fc57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611aba57600080fd5b505afa158015611ace573d6000803e3d6000fd5b505050506040513d6020811015611ae457600080fd5b81019080805190602001909291905050500111151515611b0357600080fd5b8782600001819055508060000154826000015401935081600001548410151515611b2c57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c7757600080fd5b505af1158015611c8b573d6000803e3d6000fd5b505050506040513d6020811015611ca157600080fd5b81019080805190602001909291905050501515611cbd57600080fd5b50505050505050505050565b60075481565b6000611cdb8383613282565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d5757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d9357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611dce57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611eae578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611f56565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f9c57fe5b816004811115611fa857fe5b148015611fb55750600089115b8015611fc357506007548911155b156120395760039050611fd7898989612cd6565b93506000600b60008681526020019081526020016000209050611ffb8a898b612cd6565b93506000600b600086815260200190815260200160002090506000826001015414801561202c575060008160010154145b1561203657600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120c557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561210157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561213c57600080fd5b60006121488484611d1a565b9050600a60008281526020019081526020016000205491505092915050565b60008061217484846132c3565b915091509250929050565b6121898885612088565b8914151561219657600080fd5b60006121a28986611d1a565b90506000600960008c81526020019081526020016000209050600260048111156121c857fe5b8160010160009054906101000a900460ff1660048111156121e557fe5b1415156121f157600080fd5b43816000015410151561220357600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612299828c8c8c6132e8565b15156122a457600080fd5b6122b0818888886132e8565b15156122bb57600080fd5b6122c9828c8c848b8b613371565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a60008581526020019081526020016000206000905561241f8d8d8a8d8d613480565b61242c8d898e8989613480565b8c7f0e239ef20c651bd0bc45e6f6a5fd46252d77d39d6602103e347add00cabdb0b48c89604051808381526020018281526020019250505060405180910390a260008b1115612580576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b8101908080519060200190929190505050151561257f57600080fd5b5b6000871115612694576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561264d57600080fd5b505af1158015612661573d6000803e3d6000fd5b505050506040513d602081101561267757600080fd5b8101908080519060200190929190505050151561269357600080fd5b5b50505050505050505050505050565b6040805190810160405280600581526020017f302e382e3000000000000000000000000000000000000000000000000000000081525081565b600860149054906101000a900460ff1681565b60035481565b600061270183836130de565b905092915050565b856001600481111561271757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561274657fe5b14151561275257600080fd5b61275c3387612088565b8714151561276957600080fd5b600080600960008a8152602001908152602001600020905060028160010160006101000a81548160ff021916908360048111156127a257fe5b021790555060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060008611156128755761282c89888888886134de565b91508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561286857600080fd5b6128748183888a6136b4565b5b853373ffffffffffffffffffffffffffffffffffffffff168a7f5fe3d4a343010393184843ef4873386b572e844e89f6b41c9f60f5ab912fbdfe60405160405180910390a4505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061298c8c8c8c612cd6565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6129fd8989612088565b8a141515612a0a57600080fd5b60006001028714151515612a1d57600080fd5b600086111515612a2c57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612a5357fe5b8160010160009054906101000a900460ff166004811115612a7057fe5b141515612a7c57600080fd5b43816000015410151515612a8f57600080fd5b612b258d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613724565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b6157600080fd5b612bb28d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134de565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612bee57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612c5057600080fd5b612c5c828e8c8e6136b4565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f09bd10d8ee6f30d654401133d6eac60e091a0d8e13f54005754de9394c11fbd360405160405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612d1357600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612de057fe5b06141515612ded57600080fd5b600080600080600060606001606088811515612e0557fe5b0401604051908082528060200260200182016040528015612e355781602001602082028038833980820191505090505b509050602095505b86861015612e9057612e4f8a876130f7565b809550819450505083850194508281606088811515612e6a57fe5b04815181101515612e7757fe5b9060200190602002018181525050606086019550612e3d565b606087811515612e9c57fe5b0496505b60018711156130b1576000600288811515612eb757fe5b06141515612efd578060018803815181101515612ed057fe5b906020019060200201518188815181101515612ee857fe5b90602001906020020181815250506001870196505b600095505b6001870386101561309d578060018701815181101515612f1e57fe5b906020019060200201518187815181101515612f3657fe5b906020019060200201511415612f65578086815181101515612f5457fe5b906020019060200201519250613069565b8060018701815181101515612f7657fe5b906020019060200201518187815181101515612f8e57fe5b906020019060200201511015613005578086815181101515612fac57fe5b906020019060200201518160018801815181101515612fc757fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250613068565b806001870181518110151561301657fe5b90602001906020020151818781518110151561302e57fe5b9060200190602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b5b828160028881151561307757fe5b0481518110151561308457fe5b9060200190602002018181525050600286019550612f02565b6002868115156130a957fe5b049650612ea0565b8060008151811015156130c057fe5b90602001906020020151915081859850985050505050505050915091565b60008183116130ed57826130ef565b815b905092915050565b600080600080600080600087895111151561312057806000809050965096505050505050613262565b878901519450602088018901519350604088018901519150848483604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561320057600080fd5b505afa158015613214573d6000803e3d6000fd5b505050506040513d602081101561322a57600080fd5b81019080805190602001909291905050509250600083148061324c5750828511155b1561325657600093505b80849650965050505050505b9250929050565b6000818311613278578161327a565b825b905092915050565b6000808284019050838110156132b8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132ba565b805b91505092915050565b6000808284116132d8576000848191506132dd565b828403835b915091509250929050565b60008060010285600301541480156133005750600084145b801561330c5750600083145b801561331b5750600060010282145b156133295760019050613369565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613384613b18565b61338c613b18565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a816040018181525050898160600181815250506133f68f8d613950565b92506134028282613971565b945061340e85846130de565b9450848303935061341f858b6132c3565b809b508196505050613431848e6132c3565b809e50819550505082851115151561344557fe5b82841115151561345157fe5b898d85870101018314151561346257fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214806134925750600060010281145b1561349c576134d7565b60006134a9868686612cd6565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600481111561356457fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156135a0578051825260208201915060208101905060208303925061357b565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135f357805182526020820191506020810190506020830392506135ce565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136a78185613a05565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561370b57600080fd5b8281600401819055508181600301819055505050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260048111156137aa57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156137e757805182526020820191506020810190506020830392506137c2565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561383a5780518252602082019150602081019050602083039250613815565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156138f257805182526020820191506020810190506020830392506138cd565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506139428185613a05565b925050509695505050505050565b60008160010154836001015483600001548560000154010303905092915050565b600080600080600061398b87604001518860600151613282565b935061399f86604001518760600151613282565b92508383101515156139b057600080fd5b866040015184101515156139c057fe5b856040015183101515156139d057fe5b83830391506139e3828860000151613282565b90506139f38188602001516132c3565b50809150508094505050505092915050565b600060418251141515613a1757600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613a4757601b810190505b601b8160ff161480613a5c5750601c8160ff16145b1515613a6757600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ac4573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613b0c57600080fd5b83935050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820bfb8c37aef605805b8fa6a714864e59d2355853b79ce56f84de3b66938c7a3490029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"uint256\"}],\"name\":\"getLockDataFromMerkleTreePublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"merkle_tree_leaves\",\"type\":\"bytes\"}],\"name\":\"getMerkleRootAndUnlockedAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"maxPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_additionPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_subtractPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contract_version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"minPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get_max_safe_uint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"partner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"nonce\":\"Strictly monotonic value used to order transfers.\",\"partner\":\"Channel partner of the `msg.sender`, who provided the signature.\",\"signature\":\"Partner's signature of the balance proof data.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the partner to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"participant\":\"Sender of the pending transfers that the UnlockData represents.\",\"partner\":\"Receiver of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant1`, used to validate the unlocked proofs.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known merkle root of the pending hash-time locks of `participant2`, used to validate the unlocked proofs.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"merkle_tree_leaves\":\"The entire merkle tree of pending transfers that `partner` sent to `participant`.\",\"participant\":\"Address who will receive the claimable unlocked tokens.\",\"partner\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Only a participant may close the channel, providing a balance proof signed by its partner. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `partner` to `participant` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `participant`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `partner`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkUtilsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=contracts/lib\",\":raiden=contracts/raiden\",\":services=contracts/services\",\":test=contracts/test\"]},\"sources\":{\"contracts/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"contracts/raiden/SecretRegistry.sol\":{\"keccak256\":\"0x7bb84c5560050622a736c57af231a2cd3172eb27771bffb1114ef75ad27baf71\",\"urls\":[\"bzzr://544c37e9b500d65320980e74e30d0ab4f75a8ce28f76396d7bd5422f51bdef3d\"]},\"contracts/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"contracts/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe1aa470a48d5224a00781700a8f73742de9381972eb9e00a610c6df29d38069d\",\"urls\":[\"bzzr://6d12abf81b55d71ccb9751e2ce82f1ec21d254634def365a5947483142ad7c6f\"]},\"contracts/raiden/Utils.sol\":{\"keccak256\":\"0x44a5b458227196e3633ec4534fe9d31009171a5230a67ecd5ce5545a796d3959\",\"urls\":[\"bzzr://bc5a8b1ca4d4845fca2d59e9587b23503be8f0d7613280d0311a5f4de8d17099\"]},\"contracts/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x133ea61d9961f2fbe43a516105f2e32b083fcecc10b07dde5dc25586a3ec4970\",\"urls\":[\"bzzr://1084b4782124511572c6aa2dd59d4e7c3f5249d6affaa78005524f7f9fb173f2\"]}},\"version\":1}" }, "UDCTransfer": { "abi": [ @@ -6389,13 +6405,13 @@ "SignatureVerifyTest.sol": "8239fc41d7513746ffe81da226943db404884e4148fe4ce64cc0a1e0130e7108", "StandardToken.sol": "3dcb1cc738bd525c27a00afdcec0b177e47be2e622906d210001995ab99141ab", "Token.sol": "1a73cc2b96ad17dca1b5ba83d943e4576764862c56037905daea0544277d4cd4", - "TokenNetwork.sol": "73ab66e826789ff6a18b98ea92f01619c15e97b3f4b03d93fb2754fff058f4f3", - "TokenNetworkInternalsTest.sol": "7cd4d054af428de7a1c157f42cd44402e3e1e0bea706ede87d722fd4cb4fbf7c", - "TokenNetworkRegistry.sol": "36dff9d9d0a027e8eecc989c4e24b2bb2727aea59e02e01755e4f16b6d018ccf", + "TokenNetwork.sol": "9fdfb659b18ca2192948de6df4a686393045c5d25aa04133bd0d8df4fe2a4c1f", + "TokenNetworkInternalsTest.sol": "95ea1cf72b2ea7725070082e01e1896edf903c497b778740024b755841d03f6d", + "TokenNetworkRegistry.sol": "dc501d84d79801072fab5ee54a90530ce1182280331fb5d9154de93c81e36f64", "UDCTransfer.sol": "99ba67c9fdb62ab01998ca9ac6aed2be40e2e86eba021f35f6a15621cc49bfbf", "UserDeposit.sol": "e51bd069efc655631c82f14b4f4b68361729d21d02b4d2da8c1244a1e7349ca6", "Utils.sol": "68ef4cb42233e9ec38d7558112eb554114d4c4d56b78d00071110d14a565d15c" }, "contracts_version": "0.8.0", - "overall_checksum": "28df258db7a76c179d1eee90657733bba7178b08559702be2ef935957fd7d6c9" + "overall_checksum": "b335b22b27e2ced279708886adb791d2851933cbc64d6d5a225050eff9fab7a6" } \ No newline at end of file diff --git a/raiden_contracts/data/gas.json b/raiden_contracts/data/gas.json index 2c6e19cee..29e8ff077 100644 --- a/raiden_contracts/data/gas.json +++ b/raiden_contracts/data/gas.json @@ -1,11 +1,21 @@ { "EndpointRegistry.registerEndpoint": 48408, + "MonitoringService.claimReward": 42679, + "MonitoringService.monitor": 203858, + "OneToN.claim": 90847, "SecretRegistry.registerSecret": 45757, - "TokenNetwork.closeChannel": 111155, - "TokenNetwork.openChannel": 97555, - "TokenNetwork.setTotalDeposit": 44509, - "TokenNetwork.settleChannel": 123370, - "TokenNetwork.unlock 1 locks": 32192, - "TokenNetwork.unlock 6 locks": 66009, - "TokenNetwork.updateNonClosingBalanceProof": 93786 + "TokenNetwork DEPLOYMENT": 4031224, + "TokenNetwork.closeChannel": 111162, + "TokenNetwork.openChannel": 97745, + "TokenNetwork.setTotalDeposit": 44919, + "TokenNetwork.settleChannel": 123380, + "TokenNetwork.unlock 1 locks": 32118, + "TokenNetwork.unlock 6 locks": 66029, + "TokenNetwork.updateNonClosingBalanceProof": 93759, + "TokenNetworkRegistry DEPLOYMENT": 4753616, + "TokenNetworkRegistry createERC20TokenNetwork": 3110454, + "UserDeposit.deposit": 101311, + "UserDeposit.deposit (increase balance)": 28156, + "UserDeposit.planWithdraw": 64021, + "UserDeposit.withdraw": 40079 } \ No newline at end of file diff --git a/raiden_contracts/data/source/raiden/TokenNetwork.sol b/raiden_contracts/data/source/raiden/TokenNetwork.sol index 993972c87..50bb84b63 100644 --- a/raiden_contracts/data/source/raiden/TokenNetwork.sol +++ b/raiden_contracts/data/source/raiden/TokenNetwork.sol @@ -31,13 +31,10 @@ contract TokenNetwork is Utils { 115792089237316195423570985008687907853269984665640564039457584007913129639935 ); - // Red Eyes release deposit limits - // The combined deposit of one channel is limited to 0.15 ETH. - // So 0.075 ETH per participant. - uint256 constant public channel_participant_deposit_limit = 75000000000000000 wei; - // The total combined deposit of all channels across the whole network is - // limited to 250 ETH. - uint256 constant public token_network_deposit_limit = 250000000000000000000 wei; + // The deposit limit per channel per participant. + uint256 public channel_participant_deposit_limit; + // The total combined deposit of all channels across the whole network + uint256 public token_network_deposit_limit; // Global, monotonically increasing counter that keeps track of all the // opened channels in this contract @@ -214,7 +211,9 @@ contract TokenNetwork is Utils { uint256 _chain_id, uint256 _settlement_timeout_min, uint256 _settlement_timeout_max, - address _deprecation_executor + address _deprecation_executor, + uint256 _channel_participant_deposit_limit, + uint256 _token_network_deposit_limit ) public { @@ -226,6 +225,9 @@ contract TokenNetwork is Utils { require(_settlement_timeout_max > _settlement_timeout_min); require(contractExists(_token_address)); require(contractExists(_secret_registry)); + require(_channel_participant_deposit_limit > 0); + require(_token_network_deposit_limit > 0); + require(_token_network_deposit_limit >= _channel_participant_deposit_limit); token = Token(_token_address); @@ -238,6 +240,8 @@ contract TokenNetwork is Utils { require(token.totalSupply() > 0); deprecation_executor = _deprecation_executor; + channel_participant_deposit_limit = _channel_participant_deposit_limit; + token_network_deposit_limit = _token_network_deposit_limit; } function deprecate() isSafe onlyDeprecationExecutor public { diff --git a/raiden_contracts/data/source/raiden/TokenNetworkRegistry.sol b/raiden_contracts/data/source/raiden/TokenNetworkRegistry.sol index ca1c41491..650ca4b0c 100644 --- a/raiden_contracts/data/source/raiden/TokenNetworkRegistry.sol +++ b/raiden_contracts/data/source/raiden/TokenNetworkRegistry.sol @@ -60,7 +60,11 @@ contract TokenNetworkRegistry is Utils { /// `_token_address`. /// @param _token_address Ethereum address of an already deployed token, to /// be used in the new TokenNetwork contract. - function createERC20TokenNetwork(address _token_address) + function createERC20TokenNetwork( + address _token_address, + uint256 _channel_participant_deposit_limit, + uint256 _token_network_deposit_limit + ) canCreateTokenNetwork external returns (address token_network_address) @@ -79,7 +83,9 @@ contract TokenNetworkRegistry is Utils { chain_id, settlement_timeout_min, settlement_timeout_max, - deprecation_executor + deprecation_executor, + _channel_participant_deposit_limit, + _token_network_deposit_limit ); token_network_address = address(token_network); diff --git a/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol b/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol index a2a411aab..ae240c1d6 100644 --- a/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol +++ b/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol @@ -16,7 +16,9 @@ contract TokenNetworkInternalStorageTest is TokenNetwork { _chain_id, _settlement_timeout_min, _settlement_timeout_max, - msg.sender + msg.sender, + MAX_SAFE_UINT256, + MAX_SAFE_UINT256 ) public { @@ -152,7 +154,9 @@ contract TokenNetworkSignatureTest is TokenNetwork { _chain_id, _settlement_timeout_min, _settlement_timeout_max, - msg.sender + msg.sender, + MAX_SAFE_UINT256, + MAX_SAFE_UINT256 ) public { @@ -256,7 +260,9 @@ contract TokenNetworkUtilsTest is TokenNetwork { _chain_id, _settlement_timeout_min, _settlement_timeout_max, - msg.sender + msg.sender, + MAX_SAFE_UINT256, + MAX_SAFE_UINT256 ) public { diff --git a/raiden_contracts/tests/fixtures/token_network_fixtures.py b/raiden_contracts/tests/fixtures/token_network_fixtures.py index b8a7e3525..60e09b03b 100644 --- a/raiden_contracts/tests/fixtures/token_network_fixtures.py +++ b/raiden_contracts/tests/fixtures/token_network_fixtures.py @@ -6,6 +6,8 @@ EVENT_TOKEN_NETWORK_CREATED, TEST_SETTLE_TIMEOUT_MIN, TEST_SETTLE_TIMEOUT_MAX, + MAX_ETH_CHANNEL_PARTICIPANT, + MAX_ETH_TOKEN_NETWORK, ) from web3.contract import get_event_data @@ -31,9 +33,15 @@ def register_token_network( ): """Returns a function that uses token_network_registry fixture to register and deploy a new token network""" - def get(token_address): + def get( + token_address, + channel_participant_deposit_limit: int, + token_network_deposit_limit: int, + ): tx_hash = token_network_registry_contract.functions.createERC20TokenNetwork( token_address, + channel_participant_deposit_limit, + token_network_deposit_limit, ).transact({'from': contract_deployer_address}) tx_receipt = web3.eth.getTransactionReceipt(tx_hash) event_abi = contracts_manager.get_event_abi( @@ -50,13 +58,29 @@ def get(token_address): return get +@pytest.fixture +def channel_participant_deposit_limit(): + return MAX_ETH_CHANNEL_PARTICIPANT + + +@pytest.fixture +def token_network_deposit_limit(): + return MAX_ETH_TOKEN_NETWORK + + @pytest.fixture def token_network( - register_token_network, - custom_token, + register_token_network, + custom_token, + channel_participant_deposit_limit, + token_network_deposit_limit, ): """Register a new token network for a custom token""" - return register_token_network(custom_token.address) + return register_token_network( + custom_token.address, + channel_participant_deposit_limit, + token_network_deposit_limit, + ) @pytest.fixture diff --git a/raiden_contracts/tests/fixtures/token_network_registry.py b/raiden_contracts/tests/fixtures/token_network_registry.py index e5dd79cb4..eaa10de89 100644 --- a/raiden_contracts/tests/fixtures/token_network_registry.py +++ b/raiden_contracts/tests/fixtures/token_network_registry.py @@ -57,12 +57,16 @@ def add_and_register_token( deploy_token_contract, contract_deployer_address, contracts_manager, + channel_participant_deposit_limit, + token_network_deposit_limit, ): """Deploy a token and register it in TokenNetworkRegistry""" def f(initial_amount: int, decimals: int, token_name: str, token_symbol: str): token_contract = deploy_token_contract(initial_amount, decimals, token_name, token_symbol) txid = token_network_registry_contract.functions.createERC20TokenNetwork( token_contract.address, + channel_participant_deposit_limit, + token_network_deposit_limit, ).transact({'from': contract_deployer_address}) (tx_receipt, _) = check_succesful_tx(web3, txid) assert len(tx_receipt['logs']) == 1 diff --git a/raiden_contracts/tests/property/test_tokennetwork.py b/raiden_contracts/tests/property/test_tokennetwork.py index abaab96a3..fe64e82ce 100644 --- a/raiden_contracts/tests/property/test_tokennetwork.py +++ b/raiden_contracts/tests/property/test_tokennetwork.py @@ -24,6 +24,8 @@ from raiden_contracts.constants import ( CONTRACT_SECRET_REGISTRY, CONTRACT_TOKEN_NETWORK_REGISTRY, + MAX_ETH_CHANNEL_PARTICIPANT, + MAX_ETH_TOKEN_NETWORK, TEST_SETTLE_TIMEOUT_MAX, TEST_SETTLE_TIMEOUT_MIN, ) @@ -147,6 +149,8 @@ def __init__(self): self.token_network_registry.functions.createERC20TokenNetwork( self.token.address, + MAX_ETH_CHANNEL_PARTICIPANT, + MAX_ETH_TOKEN_NETWORK, ).transact() token_network_address = self.token_network_registry.functions.token_to_token_networks( diff --git a/raiden_contracts/tests/test_contract_limits.py b/raiden_contracts/tests/test_contract_limits.py index fba99e59f..d8e28b1f7 100644 --- a/raiden_contracts/tests/test_contract_limits.py +++ b/raiden_contracts/tests/test_contract_limits.py @@ -14,6 +14,8 @@ def test_register_three_but_not_four( get_token_network_registry, secret_registry_contract, custom_token_factory, + channel_participant_deposit_limit, + token_network_deposit_limit, ): """ Check that TokenNetworkRegistry observes the max number of tokens """ token_network_registry = get_token_network_registry([ @@ -28,11 +30,27 @@ def test_register_three_but_not_four( token1 = custom_token_factory() token2 = custom_token_factory() token3 = custom_token_factory() - token_network_registry.functions.createERC20TokenNetwork(token0.address).transact() - token_network_registry.functions.createERC20TokenNetwork(token1.address).transact() - token_network_registry.functions.createERC20TokenNetwork(token2.address).transact() + token_network_registry.functions.createERC20TokenNetwork( + token0.address, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() + token_network_registry.functions.createERC20TokenNetwork( + token1.address, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() + token_network_registry.functions.createERC20TokenNetwork( + token2.address, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() with pytest.raises(TransactionFailed): - token_network_registry.functions.createERC20TokenNetwork(token3.address).transact() + token_network_registry.functions.createERC20TokenNetwork( + token3.address, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() def test_channel_participant_deposit_limit_value(token_network): diff --git a/raiden_contracts/tests/test_print_gas.py b/raiden_contracts/tests/test_print_gas.py index 25014e40f..a9bc7c7bd 100644 --- a/raiden_contracts/tests/test_print_gas.py +++ b/raiden_contracts/tests/test_print_gas.py @@ -44,6 +44,8 @@ def test_token_network_deployment( custom_token, secret_registry_contract, deploy_tester_contract_txhash, + channel_participant_deposit_limit, + token_network_deposit_limit, ): """ Abusing pytest to print the deployment gas cost of TokenNetwork """ deprecation_executor = get_accounts(1)[0] @@ -57,6 +59,8 @@ def test_token_network_deployment( TEST_SETTLE_TIMEOUT_MIN, TEST_SETTLE_TIMEOUT_MAX, deprecation_executor, + channel_participant_deposit_limit, + token_network_deposit_limit, ], ) print_gas(txhash, CONTRACT_TOKEN_NETWORK + ' DEPLOYMENT') @@ -68,10 +72,14 @@ def test_token_network_create( secret_registry_contract, token_network_registry_contract, contract_deployer_address, + channel_participant_deposit_limit, + token_network_deposit_limit, ): """ Abusing pytest to print gas cost of TokenNetworkRegistry's createERC20TokenNetwork() """ txn_hash = token_network_registry_contract.functions.createERC20TokenNetwork( custom_token.address, + channel_participant_deposit_limit, + token_network_deposit_limit, ).transact({'from': contract_deployer_address}) print_gas(txn_hash, CONTRACT_TOKEN_NETWORK_REGISTRY + ' createERC20TokenNetwork') diff --git a/raiden_contracts/tests/test_token_network_registry.py b/raiden_contracts/tests/test_token_network_registry.py index cced0d97b..e3b20ffb9 100644 --- a/raiden_contracts/tests/test_token_network_registry.py +++ b/raiden_contracts/tests/test_token_network_registry.py @@ -212,6 +212,8 @@ def test_create_erc20_token_network_call( contract_deployer_address, custom_token, get_accounts, + channel_participant_deposit_limit, + token_network_deposit_limit, ): """ Calling createERC20TokenNetwork() with various wrong arguments """ @@ -224,29 +226,57 @@ def test_create_erc20_token_network_call( # failures with integers instead of a Token contract address with pytest.raises(ValidationError): - token_network_registry_contract.functions.createERC20TokenNetwork(3).transact() + token_network_registry_contract.functions.createERC20TokenNetwork( + 3, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() with pytest.raises(ValidationError): - token_network_registry_contract.functions.createERC20TokenNetwork(0).transact() + token_network_registry_contract.functions.createERC20TokenNetwork( + 0, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() # failures with strings that are not addresses with pytest.raises(ValidationError): - token_network_registry_contract.functions.createERC20TokenNetwork('').transact() + token_network_registry_contract.functions.createERC20TokenNetwork( + '', + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() with pytest.raises(ValidationError): - token_network_registry_contract.functions.createERC20TokenNetwork(FAKE_ADDRESS).transact() + token_network_registry_contract.functions.createERC20TokenNetwork( + FAKE_ADDRESS, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() # failures with addresses where no Token contract can be found with pytest.raises(TransactionFailed): - token_network_registry_contract.functions.createERC20TokenNetwork(EMPTY_ADDRESS).transact() + token_network_registry_contract.functions.createERC20TokenNetwork( + EMPTY_ADDRESS, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() with pytest.raises(TransactionFailed): - token_network_registry_contract.functions.createERC20TokenNetwork(A).transact() + token_network_registry_contract.functions.createERC20TokenNetwork( + A, + channel_participant_deposit_limit, + token_network_deposit_limit, + ).transact() with pytest.raises(TransactionFailed): token_network_registry_contract.functions.createERC20TokenNetwork( fake_token_contract, + channel_participant_deposit_limit, + token_network_deposit_limit, ).transact() # see a success to make sure above tests were meaningful token_network_registry_contract.functions.createERC20TokenNetwork( custom_token.address, + channel_participant_deposit_limit, + token_network_deposit_limit, ).transact({'from': contract_deployer_address}) @@ -285,7 +315,8 @@ def test_create_erc20_token_network_twice_fails( contract_deployer_address, token_network_registry_contract, custom_token, - + channel_participant_deposit_limit, + token_network_deposit_limit, ): """ Only one TokenNetwork should be creatable from a TokenNetworkRegistry """ @@ -293,6 +324,8 @@ def test_create_erc20_token_network_twice_fails( {'from': contract_deployer_address}, ).createERC20TokenNetwork( custom_token.address, + channel_participant_deposit_limit, + token_network_deposit_limit, ) with pytest.raises(TransactionFailed): @@ -300,6 +333,8 @@ def test_create_erc20_token_network_twice_fails( {'from': contract_deployer_address}, ).createERC20TokenNetwork( custom_token.address, + channel_participant_deposit_limit, + token_network_deposit_limit, )