From 03b5374b84de659d28f050f70dfe63e786fda8a0 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Wed, 15 Dec 2021 13:34:04 +0100 Subject: [PATCH 01/12] adding cancel withdraw request plus events --- contracts/RenPool.sol | 62 +++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/contracts/RenPool.sol b/contracts/RenPool.sol index 05a0d13..be9732a 100644 --- a/contracts/RenPool.sol +++ b/contracts/RenPool.sol @@ -21,6 +21,7 @@ contract RenPool { uint256 public bond; uint256 public totalPooled; + uint256 public totalWithdrawalRequested; uint256 public ownerFee; // Percentage uint256 public nodeOperatorFee; // Percentage @@ -39,6 +40,9 @@ contract RenPool { event RenDeposited(address indexed _from, uint256 _amount); event RenWithdrawn(address indexed _from, uint256 _amount); + event RenWithdrawalRequested(address indexed _from, uint256 _amount); + event RenWithdrawalRequestFulfilled(address indexed _from, uint256 _amount); + event RenWithdrawalRequestCancelled(address indexed _from, uint256 _amount); event EthDeposited(address indexed _from, uint256 _amount); event EthWithdrawn(address indexed _from, uint256 _amount); event PoolLocked(); @@ -79,6 +83,7 @@ contract RenPool { bond = _bond; isLocked = false; totalPooled = 0; + totalWithdrawalRequested = 0; ownerFee = 5; nodeOperatorFee = 5; } @@ -117,7 +122,7 @@ contract RenPool { } function unlockPool() external onlyOwnerNodeOperator { - require(renToken.balanceOf(address(this)) > 0, "Pool balance is zero"); + require(renToken.balanceOf(address(this)) > 0, "RenPool: Pool balance is zero"); isLocked = false; emit PoolUnlocked(); } @@ -159,24 +164,25 @@ contract RenPool { address sender = msg.sender; uint256 senderBalance = balances[sender]; - require(senderBalance > 0 && senderBalance >= _amount, "Insufficient funds"); - require(!isLocked, "Pool is locked"); + require(_amount > 0, "RenPool: Invalid amount"); + require(senderBalance > 0 && senderBalance >= _amount, "RenPool: Insufficient funds"); + require(!isLocked, "RenPool: Pool is locked"); totalPooled -= _amount; balances[sender] -= _amount; require( renToken.transfer(sender, _amount), - "Withdraw failed" + "RenPool: Withdraw failed" ); emit RenWithdrawn(sender, _amount); } /** - * @notice Requesting a withdraw in case the pool is locked. The amount - * that needs to be withdrawn will be replaced by another user using the - * fulfillWithdrawRequest method. + * @notice Requesting a withdraw in case the pool is locked. The amount + * that needs to be withdrawn will be replaced by another user using the + * fulfillWithdrawRequest method. * * @param _amount The amount of REN to be withdrawn. * @@ -187,16 +193,18 @@ contract RenPool { address sender = msg.sender; uint256 senderBalance = balances[sender]; - require(senderBalance > 0 && senderBalance >= _amount, "Insufficient funds"); - require(isLocked, "Pool is not locked"); + require(_amount > 0, "RenPool: Invalid amount"); + require(senderBalance > 0 && senderBalance >= _amount, "RenPool: Insufficient funds"); + require(isLocked, "RenPool: Pool is not locked"); withdrawRequests[sender] = _amount; + totalWithdrawalRequested += _amount; - // TODO emit event + emit RenWithdrawalRequested(sender, _amount); } /** - * @notice User wanting to fullill the withdraw request will pay the amount + * @notice User wanting to fulfill the withdraw request will pay the amount * the user wanting to withdraw his money. * * @param _target The amount of REN to be withdrawn. @@ -204,31 +212,39 @@ contract RenPool { function fulfillWithdrawRequest(address _target) external { address sender = msg.sender; uint256 amount = withdrawRequests[_target]; - // ^ This could not be defined plus make sure amount > 0 - // TODO: make sure user cannot fullfil his own request - // TODO: add test for when _target doesn't have an associated withdrawRequest - require(isLocked, "Pool is not locked"); + require(amount > 0, "RenPool: invalid amount"); + require(isLocked, "RenPool: Pool is not locked"); balances[sender] += amount; balances[_target] -= amount; + totalWithdrawalRequested -= amount; + delete withdrawRequests[_target]; // Transfer funds from sender to _target require( renToken.transferFrom(sender, address(this), amount), - "Deposit failed" + "RenPool: Deposit failed" ); require( renToken.transfer(_target, amount), - "Refund failed" + "RenPool: Refund failed" ); - // TODO emit event + emit RenWithdrawalRequestFulfilled(sender, amount); } - // TODO: cancelWithdrawRequest - // TODO: getWithdrawRequests + function cancelWithdrawRequest() external { + address sender = msg.sender; + uint256 amount = withdrawRequests[sender]; + + totalWithdrawalRequested -= amount; + + delete withdrawRequests[sender]; + + emit RenWithdrawalRequestCancelled(sender, amount); + } /** * @notice Return REN balance for the given address. @@ -244,11 +260,11 @@ contract RenPool { * registering the darknode. */ function approveBondTransfer() external onlyNodeOperator { - require(isLocked, "Pool is not locked"); + require(isLocked, "RenPool: Pool is not locked"); require( renToken.approve(address(darknodeRegistry), bond), - "Bond transfer failed" + "RenPool: Bond transfer failed" ); } @@ -266,7 +282,7 @@ contract RenPool { * other darknodes and traders to encrypt messages to the trader. */ function registerDarknode(address _darknodeID, bytes calldata _publicKey) external onlyNodeOperator { - require(isLocked, "Pool is not locked"); + require(isLocked, "RenPool: Pool is not locked"); darknodeRegistry.register(_darknodeID, _publicKey); From 3f9c39171ab42328fc1a5a68ea582b584c2a502d Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Wed, 15 Dec 2021 19:53:23 +0100 Subject: [PATCH 02/12] introducing _registerDarknode --- contracts/RenPool.sol | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/contracts/RenPool.sol b/contracts/RenPool.sol index be9732a..36951da 100644 --- a/contracts/RenPool.sol +++ b/contracts/RenPool.sol @@ -121,6 +121,10 @@ contract RenPool { emit PoolLocked(); } + function _deregisterDarknode() private { + darknodeRegistry.deregister(darknodeID); + } + function unlockPool() external onlyOwnerNodeOperator { require(renToken.balanceOf(address(this)) > 0, "RenPool: Pool balance is zero"); isLocked = false; @@ -200,6 +204,10 @@ contract RenPool { withdrawRequests[sender] = _amount; totalWithdrawalRequested += _amount; + if(totalWithdrawalRequested > bond / 2) { + _deregisterDarknode(); + } + emit RenWithdrawalRequested(sender, _amount); } @@ -299,7 +307,7 @@ contract RenPool { * to being able to call refund. */ function deregisterDarknode() external onlyOwnerNodeOperator { - darknodeRegistry.deregister(darknodeID); + _deregisterDarknode(); } /** From a112d08f9c28462ce25721084e0380bcece12d80 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Fri, 17 Dec 2021 18:36:22 +0100 Subject: [PATCH 03/12] adding tests for requestWithdraw and cancelWithdrawRequest --- artifacts/contracts/RenPool.sol/RenPool.json | 81 +++++++++++++++++++- contracts/RenPool.sol | 8 +- test/RenPool.test.js | 35 ++++++++- 3 files changed, 118 insertions(+), 6 deletions(-) diff --git a/artifacts/contracts/RenPool.sol/RenPool.json b/artifacts/contracts/RenPool.sol/RenPool.json index 31873fe..aa16d7d 100644 --- a/artifacts/contracts/RenPool.sol/RenPool.json +++ b/artifacts/contracts/RenPool.sol/RenPool.json @@ -118,6 +118,63 @@ "name": "RenDeposited", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "RenWithdrawalRequestCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "RenWithdrawalRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "RenWithdrawalRequested", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -252,6 +309,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "cancelWithdrawRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "claimRewards", @@ -592,6 +656,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "totalWithdrawalRequested", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "unlockPool", @@ -643,8 +720,8 @@ "type": "receive" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162003b2e38038062003b2e833981810160405281019062000037919062000273565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600860006101000a81548160ff0219169083151502179055506000600581905550600560068190555060056007819055505050505050505050620003b3565b60008151905062000256816200037f565b92915050565b6000815190506200026d8162000399565b92915050565b600080600080600080600080610100898b0312156200029757620002966200037a565b5b6000620002a78b828c0162000245565b9850506020620002ba8b828c0162000245565b9750506040620002cd8b828c0162000245565b9650506060620002e08b828c0162000245565b9550506080620002f38b828c0162000245565b94505060a0620003068b828c0162000245565b93505060c0620003198b828c0162000245565b92505060e06200032c8b828c016200025c565b9150509295985092959890939650565b6000620003498262000350565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b6200038a816200033c565b81146200039657600080fd5b50565b620003a48162000370565b8114620003b057600080fd5b50565b61376b80620003c36000396000f3fe6080604052600436106101e75760003560e01c80637ecebe0011610102578063b6b34c6711610095578063d693452e11610064578063d693452e14610707578063e39f610114610732578063e438a77d1461075d578063e7585aea146107745761023c565b8063b6b34c6714610671578063b6b55f251461069c578063b7eb85c4146106c5578063d5b2a01a146106dc5761023c565b80639e45e0d0116100d15780639e45e0d0146105b5578063a4e2d634146105e0578063ac3479871461060b578063b46ff3c3146106485761023c565b80637ecebe001461050b57806389026538146105485780638da5cb5b1461055f578063901a64981461058a5761023c565b806352df49ec1161017a5780636ec21cc8116101495780636ec21cc81461043d57806370a082311461046857806371bbef36146104a5578063745400c9146104e25761023c565b806352df49ec1461038157806363ffab31146103be57806364c9ec6f146103e95780636664e42e146104145761023c565b80632e0f2625116101b65780632e0f2625146102d75780632e1a7d4d1461030257806334246f9b1461032b578063372500ab146103565761023c565b8063023c5b08146102415780631261795d1461026c57806313a0ae2b1461028357806327e235e31461029a5761023c565b3661023c573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102329190612ff7565b60405180910390a2005b600080fd5b34801561024d57600080fd5b5061025661079d565b6040516102639190612bba565b60405180910390f35b34801561027857600080fd5b506102816107c3565b005b34801561028f57600080fd5b50610298610934565b005b3480156102a657600080fd5b506102c160048036038101906102bc91906125c2565b6109e5565b6040516102ce9190612ff7565b60405180910390f35b3480156102e357600080fd5b506102ec6109fd565b6040516102f99190613072565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612841565b610a02565b005b34801561033757600080fd5b50610340610c9a565b60405161034d9190612d41565b60405180910390f35b34801561036257600080fd5b5061036b610cc0565b6040516103789190612cf0565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906125c2565b610ce6565b6040516103b59190612ff7565b60405180910390f35b3480156103ca57600080fd5b506103d3610cfe565b6040516103e09190612cce565b60405180910390f35b3480156103f557600080fd5b506103fe610d8c565b60405161040b9190612ff7565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061278e565b610d92565b005b34801561044957600080fd5b50610452610fc4565b60405161045f9190612ff7565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906125c2565b610fca565b60405161049c9190612ff7565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c7919061271f565b611013565b6040516104d99190612ff7565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612841565b611176565b005b34801561051757600080fd5b50610532600480360381019061052d91906125c2565b6112a6565b60405161053f9190612ff7565b60405180910390f35b34801561055457600080fd5b5061055d6112be565b005b34801561056b57600080fd5b506105746114da565b6040516105819190612bba565b60405180910390f35b34801561059657600080fd5b5061059f6114fe565b6040516105ac9190612bba565b60405180910390f35b3480156105c157600080fd5b506105ca611524565b6040516105d79190612d26565b60405180910390f35b3480156105ec57600080fd5b506105f561154a565b6040516106029190612c67565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d91906126d6565b61155d565b60405161063f9190612ff7565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a91906125c2565b611699565b005b34801561067d57600080fd5b50610686611a03565b6040516106939190612d0b565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612841565b611a29565b005b3480156106d157600080fd5b506106da611cd9565b005b3480156106e857600080fd5b506106f1611ecc565b6040516106fe9190612ff7565b60405180910390f35b34801561071357600080fd5b5061071c611ed2565b6040516107299190612d5c565b60405180910390f35b34801561073e57600080fd5b50610747611ef8565b6040516107549190612ff7565b60405180910390f35b34801561076957600080fd5b50610772611efe565b005b34801561078057600080fd5b5061079b600480360381019061079691906125ef565b612095565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a90612f77565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108c0573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109299190612ff7565b60405180910390a250565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016109b19190612bba565b600060405180830381600087803b1580156109cb57600080fd5b505af11580156109df573d6000803e3d6000fd5b50505050565b60096020528060005260406000206000915090505481565b601281565b60003390506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081118015610a5b5750828110155b610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9190612ef7565b60405180910390fd5b600860009054906101000a900460ff1615610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190612e37565b60405180910390fd5b8260056000828254610afc91906131a2565b9250508190555082600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b5291906131a2565b92505081905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610bb6929190612c3e565b602060405180830381600087803b158015610bd057600080fd5b505af1158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c08919061264f565b610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612e77565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610c8d9190612ff7565b60405180910390a2505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b60038054610d0b90613319565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3790613319565b8015610d845780601f10610d5957610100808354040283529160200191610d84565b820191906000526020600020905b815481529060010190602001808311610d6757829003601f168201915b505050505081565b60045481565b60008585604051602001610da7929190612d99565b6040516020818303038152906040528051906020012090506000838583604051602001610dd69392919061303b565b6040516020818303038152906040528051906020012090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610e4b9190612d77565b60206040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9b91906126a9565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610ed99493929190612c82565b602060405180830381600087803b158015610ef357600080fd5b505af1158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b919061286e565b9050610f6c6040518060400160405280600a81526020017f6d696e74416d6f756e74000000000000000000000000000000000000000000008152508261225d565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d597282604051610fb29190612ff7565b60405180910390a25050505050505050565b60055481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161108193929190612dc9565b602060405180830381600087803b15801561109b57600080fd5b505af11580156110af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d3919061286e565b905080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3258683604051611161929190613012565b60405180910390a28093505050509392505050565b60003390506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811180156111cf5750828110155b61120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590612ef7565b60405180910390fd5b600860009054906101000a900460ff1661125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490612fd7565b60405180910390fd5b82600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113655750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90612eb7565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114019190612bba565b60206040518083038186803b15801561141957600080fd5b505afa15801561142d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611451919061286e565b11611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890612e97565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff1681565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016115ba9190612d77565b60206040518083038186803b1580156115d257600080fd5b505afa1580156115e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160a919061267c565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116429190612bba565b60206040518083038186803b15801561165a57600080fd5b505afa15801561166e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611692919061286e565b9050919050565b60003390506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600860009054906101000a900460ff16611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890612fd7565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611780919061314c565b9250508190555080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d691906131a2565b92505081905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b815260040161187f93929190612bd5565b602060405180830381600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d1919061264f565b611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790612e57565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161196d929190612c3e565b602060405180830381600087803b15801561198757600080fd5b505af115801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bf919061264f565b6119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590612f37565b60405180910390fd5b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600860009054906101000a900460ff1615611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590612f57565b60405180910390fd5b60008211611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab890612fb7565b60405180910390fd5b60045460055483611ad2919061314c565b1115611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90612f17565b60405180910390fd5b81600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b62919061314c565b925050819055508160056000828254611b7b919061314c565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611bc89190612ff7565b60405180910390a26004546005541415611be557611be46122f9565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611c4493929190612bd5565b602060405180830381600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c96919061264f565b611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90612ed7565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090612f77565b60405180910390fd5b600860009054906101000a900460ff16611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90612fd7565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b8152600401611e39929190612c3e565b602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b919061264f565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190612f97565b60405180910390fd5b565b60065481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611fa55750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90612eb7565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120619190612bba565b600060405180830381600087803b15801561207b57600080fd5b505af115801561208f573d6000803e3d6000fd5b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211c90612f77565b60405180910390fd5b600860009054906101000a900460ff16612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90612fd7565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016121d393929190612c0c565b600060405180830381600087803b1580156121ed57600080fd5b505af1158015612201573d6000803e3d6000fd5b5050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061225792919061236b565b50505050565b6122f58282604051602401612273929190612e07565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612342565b5050565b6001600860006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b82805461237790613319565b90600052602060002090601f01602090048101928261239957600085556123e0565b82601f106123b257803560ff19168380011785556123e0565b828001600101855582156123e0579182015b828111156123df5782358255916020019190600101906123c4565b5b5090506123ed91906123f1565b5090565b5b8082111561240a5760008160009055506001016123f2565b5090565b600061242161241c846130b2565b61308d565b90508281526020810184848401111561243d5761243c613418565b5b6124488482856132d7565b509392505050565b600061246361245e846130e3565b61308d565b90508281526020810184848401111561247f5761247e613418565b5b61248a8482856132d7565b509392505050565b6000813590506124a1816136c2565b92915050565b6000815190506124b6816136d9565b92915050565b60008083601f8401126124d2576124d161340e565b5b8235905067ffffffffffffffff8111156124ef576124ee613409565b5b60208301915083600182028301111561250b5761250a613413565b5b9250929050565b600082601f8301126125275761252661340e565b5b813561253784826020860161240e565b91505092915050565b60008151905061254f816136f0565b92915050565b60008151905061256481613707565b92915050565b600082601f83011261257f5761257e61340e565b5b813561258f848260208601612450565b91505092915050565b6000813590506125a78161371e565b92915050565b6000815190506125bc8161371e565b92915050565b6000602082840312156125d8576125d7613422565b5b60006125e684828501612492565b91505092915050565b60008060006040848603121561260857612607613422565b5b600061261686828701612492565b935050602084013567ffffffffffffffff8111156126375761263661341d565b5b612643868287016124bc565b92509250509250925092565b60006020828403121561266557612664613422565b5b6000612673848285016124a7565b91505092915050565b60006020828403121561269257612691613422565b5b60006126a084828501612540565b91505092915050565b6000602082840312156126bf576126be613422565b5b60006126cd84828501612555565b91505092915050565b6000602082840312156126ec576126eb613422565b5b600082013567ffffffffffffffff81111561270a5761270961341d565b5b6127168482850161256a565b91505092915050565b60008060006060848603121561273857612737613422565b5b600084013567ffffffffffffffff8111156127565761275561341d565b5b6127628682870161256a565b935050602061277386828701612492565b925050604061278486828701612598565b9150509250925092565b600080600080600060a086880312156127aa576127a9613422565b5b600086013567ffffffffffffffff8111156127c8576127c761341d565b5b6127d48882890161256a565b95505060206127e588828901612492565b94505060406127f688828901612598565b935050606061280788828901612598565b925050608086013567ffffffffffffffff8111156128285761282761341d565b5b61283488828901612512565b9150509295509295909350565b60006020828403121561285757612856613422565b5b600061286584828501612598565b91505092915050565b60006020828403121561288457612883613422565b5b6000612892848285016125ad565b91505092915050565b6128a4816131d6565b82525050565b6128b3816131e8565b82525050565b6128c2816131f4565b82525050565b60006128d4838561312a565b93506128e18385846132d7565b6128ea83613427565b840190509392505050565b600061290082613114565b61290a818561312a565b935061291a8185602086016132e6565b61292381613427565b840191505092915050565b61293781613259565b82525050565b6129468161326b565b82525050565b6129558161327d565b82525050565b6129648161328f565b82525050565b612973816132a1565b82525050565b60006129848261311f565b61298e818561313b565b935061299e8185602086016132e6565b6129a781613427565b840191505092915050565b60006129bf600e8361313b565b91506129ca82613438565b602082019050919050565b60006129e2600e8361313b565b91506129ed82613461565b602082019050919050565b6000612a05600f8361313b565b9150612a108261348a565b602082019050919050565b6000612a2860148361313b565b9150612a33826134b3565b602082019050919050565b6000612a4b602e8361313b565b9150612a56826134dc565b604082019050919050565b6000612a6e60178361313b565b9150612a798261352b565b602082019050919050565b6000612a9160128361313b565b9150612a9c82613554565b602082019050919050565b6000612ab4601e8361313b565b9150612abf8261357d565b602082019050919050565b6000612ad7600d8361313b565b9150612ae2826135a6565b602082019050919050565b6000612afa60178361313b565b9150612b05826135cf565b602082019050919050565b6000612b1d60248361313b565b9150612b28826135f8565b604082019050919050565b6000612b4060148361313b565b9150612b4b82613647565b602082019050919050565b6000612b6360178361313b565b9150612b6e82613670565b602082019050919050565b6000612b8660128361313b565b9150612b9182613699565b602082019050919050565b612ba581613242565b82525050565b612bb48161324c565b82525050565b6000602082019050612bcf600083018461289b565b92915050565b6000606082019050612bea600083018661289b565b612bf7602083018561289b565b612c046040830184612b9c565b949350505050565b6000604082019050612c21600083018661289b565b8181036020830152612c348184866128c8565b9050949350505050565b6000604082019050612c53600083018561289b565b612c606020830184612b9c565b9392505050565b6000602082019050612c7c60008301846128aa565b92915050565b6000608082019050612c9760008301876128b9565b612ca46020830186612b9c565b612cb160408301856128b9565b8181036060830152612cc381846128f5565b905095945050505050565b60006020820190508181036000830152612ce881846128f5565b905092915050565b6000602082019050612d05600083018461292e565b92915050565b6000602082019050612d20600083018461293d565b92915050565b6000602082019050612d3b600083018461294c565b92915050565b6000602082019050612d56600083018461295b565b92915050565b6000602082019050612d71600083018461296a565b92915050565b60006020820190508181036000830152612d918184612979565b905092915050565b60006040820190508181036000830152612db38185612979565b9050612dc2602083018461289b565b9392505050565b60006060820190508181036000830152612de38186612979565b9050612df2602083018561289b565b612dff6040830184612b9c565b949350505050565b60006040820190508181036000830152612e218185612979565b9050612e306020830184612b9c565b9392505050565b60006020820190508181036000830152612e50816129b2565b9050919050565b60006020820190508181036000830152612e70816129d5565b9050919050565b60006020820190508181036000830152612e90816129f8565b9050919050565b60006020820190508181036000830152612eb081612a1b565b9050919050565b60006020820190508181036000830152612ed081612a3e565b9050919050565b60006020820190508181036000830152612ef081612a61565b9050919050565b60006020820190508181036000830152612f1081612a84565b9050919050565b60006020820190508181036000830152612f3081612aa7565b9050919050565b60006020820190508181036000830152612f5081612aca565b9050919050565b60006020820190508181036000830152612f7081612aed565b9050919050565b60006020820190508181036000830152612f9081612b10565b9050919050565b60006020820190508181036000830152612fb081612b33565b9050919050565b60006020820190508181036000830152612fd081612b56565b9050919050565b60006020820190508181036000830152612ff081612b79565b9050919050565b600060208201905061300c6000830184612b9c565b92915050565b60006040820190506130276000830185612b9c565b6130346020830184612b9c565b9392505050565b60006060820190506130506000830186612b9c565b61305d6020830185612b9c565b61306a60408301846128b9565b949350505050565b60006020820190506130876000830184612bab565b92915050565b60006130976130a8565b90506130a3828261334b565b919050565b6000604051905090565b600067ffffffffffffffff8211156130cd576130cc6133da565b5b6130d682613427565b9050602081019050919050565b600067ffffffffffffffff8211156130fe576130fd6133da565b5b61310782613427565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061315782613242565b915061316283613242565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131975761319661337c565b5b828201905092915050565b60006131ad82613242565b91506131b883613242565b9250828210156131cb576131ca61337c565b5b828203905092915050565b60006131e182613222565b9050919050565b60008115159050919050565b6000819050919050565b6000613209826131d6565b9050919050565b600061321b826131d6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613264826132b3565b9050919050565b6000613276826132b3565b9050919050565b6000613288826132b3565b9050919050565b600061329a826132b3565b9050919050565b60006132ac826132b3565b9050919050565b60006132be826132c5565b9050919050565b60006132d082613222565b9050919050565b82818337600083830152505050565b60005b838110156133045780820151818401526020810190506132e9565b83811115613313576000848401525b50505050565b6000600282049050600182168061333157607f821691505b60208210811415613345576133446133ab565b5b50919050565b61335482613427565b810181811067ffffffffffffffff82111715613373576133726133da565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f506f6f6c206973206c6f636b6564000000000000000000000000000000000000600082015250565b7f4465706f736974206661696c6564000000000000000000000000000000000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f506f6f6c2062616c616e6365206973207a65726f000000000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f526566756e64206661696c656400000000000000000000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f426f6e64207472616e73666572206661696c6564000000000000000000000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b7f506f6f6c206973206e6f74206c6f636b65640000000000000000000000000000600082015250565b6136cb816131d6565b81146136d657600080fd5b50565b6136e2816131e8565b81146136ed57600080fd5b50565b6136f9816131fe565b811461370457600080fd5b50565b61371081613210565b811461371b57600080fd5b50565b61372781613242565b811461373257600080fd5b5056fea2646970667358221220b0d239bd9fe04d0230d54cf2c6df16857e519ea8e0f4b0c4eb56909278c44d2764736f6c63430008070033", - "deployedBytecode": "0x6080604052600436106101e75760003560e01c80637ecebe0011610102578063b6b34c6711610095578063d693452e11610064578063d693452e14610707578063e39f610114610732578063e438a77d1461075d578063e7585aea146107745761023c565b8063b6b34c6714610671578063b6b55f251461069c578063b7eb85c4146106c5578063d5b2a01a146106dc5761023c565b80639e45e0d0116100d15780639e45e0d0146105b5578063a4e2d634146105e0578063ac3479871461060b578063b46ff3c3146106485761023c565b80637ecebe001461050b57806389026538146105485780638da5cb5b1461055f578063901a64981461058a5761023c565b806352df49ec1161017a5780636ec21cc8116101495780636ec21cc81461043d57806370a082311461046857806371bbef36146104a5578063745400c9146104e25761023c565b806352df49ec1461038157806363ffab31146103be57806364c9ec6f146103e95780636664e42e146104145761023c565b80632e0f2625116101b65780632e0f2625146102d75780632e1a7d4d1461030257806334246f9b1461032b578063372500ab146103565761023c565b8063023c5b08146102415780631261795d1461026c57806313a0ae2b1461028357806327e235e31461029a5761023c565b3661023c573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102329190612ff7565b60405180910390a2005b600080fd5b34801561024d57600080fd5b5061025661079d565b6040516102639190612bba565b60405180910390f35b34801561027857600080fd5b506102816107c3565b005b34801561028f57600080fd5b50610298610934565b005b3480156102a657600080fd5b506102c160048036038101906102bc91906125c2565b6109e5565b6040516102ce9190612ff7565b60405180910390f35b3480156102e357600080fd5b506102ec6109fd565b6040516102f99190613072565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612841565b610a02565b005b34801561033757600080fd5b50610340610c9a565b60405161034d9190612d41565b60405180910390f35b34801561036257600080fd5b5061036b610cc0565b6040516103789190612cf0565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906125c2565b610ce6565b6040516103b59190612ff7565b60405180910390f35b3480156103ca57600080fd5b506103d3610cfe565b6040516103e09190612cce565b60405180910390f35b3480156103f557600080fd5b506103fe610d8c565b60405161040b9190612ff7565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061278e565b610d92565b005b34801561044957600080fd5b50610452610fc4565b60405161045f9190612ff7565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906125c2565b610fca565b60405161049c9190612ff7565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c7919061271f565b611013565b6040516104d99190612ff7565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612841565b611176565b005b34801561051757600080fd5b50610532600480360381019061052d91906125c2565b6112a6565b60405161053f9190612ff7565b60405180910390f35b34801561055457600080fd5b5061055d6112be565b005b34801561056b57600080fd5b506105746114da565b6040516105819190612bba565b60405180910390f35b34801561059657600080fd5b5061059f6114fe565b6040516105ac9190612bba565b60405180910390f35b3480156105c157600080fd5b506105ca611524565b6040516105d79190612d26565b60405180910390f35b3480156105ec57600080fd5b506105f561154a565b6040516106029190612c67565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d91906126d6565b61155d565b60405161063f9190612ff7565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a91906125c2565b611699565b005b34801561067d57600080fd5b50610686611a03565b6040516106939190612d0b565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612841565b611a29565b005b3480156106d157600080fd5b506106da611cd9565b005b3480156106e857600080fd5b506106f1611ecc565b6040516106fe9190612ff7565b60405180910390f35b34801561071357600080fd5b5061071c611ed2565b6040516107299190612d5c565b60405180910390f35b34801561073e57600080fd5b50610747611ef8565b6040516107549190612ff7565b60405180910390f35b34801561076957600080fd5b50610772611efe565b005b34801561078057600080fd5b5061079b600480360381019061079691906125ef565b612095565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a90612f77565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108c0573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109299190612ff7565b60405180910390a250565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016109b19190612bba565b600060405180830381600087803b1580156109cb57600080fd5b505af11580156109df573d6000803e3d6000fd5b50505050565b60096020528060005260406000206000915090505481565b601281565b60003390506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081118015610a5b5750828110155b610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9190612ef7565b60405180910390fd5b600860009054906101000a900460ff1615610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190612e37565b60405180910390fd5b8260056000828254610afc91906131a2565b9250508190555082600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b5291906131a2565b92505081905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610bb6929190612c3e565b602060405180830381600087803b158015610bd057600080fd5b505af1158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c08919061264f565b610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612e77565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610c8d9190612ff7565b60405180910390a2505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b60038054610d0b90613319565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3790613319565b8015610d845780601f10610d5957610100808354040283529160200191610d84565b820191906000526020600020905b815481529060010190602001808311610d6757829003601f168201915b505050505081565b60045481565b60008585604051602001610da7929190612d99565b6040516020818303038152906040528051906020012090506000838583604051602001610dd69392919061303b565b6040516020818303038152906040528051906020012090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610e4b9190612d77565b60206040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9b91906126a9565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610ed99493929190612c82565b602060405180830381600087803b158015610ef357600080fd5b505af1158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b919061286e565b9050610f6c6040518060400160405280600a81526020017f6d696e74416d6f756e74000000000000000000000000000000000000000000008152508261225d565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d597282604051610fb29190612ff7565b60405180910390a25050505050505050565b60055481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161108193929190612dc9565b602060405180830381600087803b15801561109b57600080fd5b505af11580156110af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d3919061286e565b905080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3258683604051611161929190613012565b60405180910390a28093505050509392505050565b60003390506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811180156111cf5750828110155b61120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590612ef7565b60405180910390fd5b600860009054906101000a900460ff1661125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490612fd7565b60405180910390fd5b82600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113655750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90612eb7565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114019190612bba565b60206040518083038186803b15801561141957600080fd5b505afa15801561142d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611451919061286e565b11611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890612e97565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff1681565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016115ba9190612d77565b60206040518083038186803b1580156115d257600080fd5b505afa1580156115e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160a919061267c565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116429190612bba565b60206040518083038186803b15801561165a57600080fd5b505afa15801561166e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611692919061286e565b9050919050565b60003390506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600860009054906101000a900460ff16611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890612fd7565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611780919061314c565b9250508190555080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d691906131a2565b92505081905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b815260040161187f93929190612bd5565b602060405180830381600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d1919061264f565b611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790612e57565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161196d929190612c3e565b602060405180830381600087803b15801561198757600080fd5b505af115801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bf919061264f565b6119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590612f37565b60405180910390fd5b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600860009054906101000a900460ff1615611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590612f57565b60405180910390fd5b60008211611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab890612fb7565b60405180910390fd5b60045460055483611ad2919061314c565b1115611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90612f17565b60405180910390fd5b81600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b62919061314c565b925050819055508160056000828254611b7b919061314c565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611bc89190612ff7565b60405180910390a26004546005541415611be557611be46122f9565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611c4493929190612bd5565b602060405180830381600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c96919061264f565b611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90612ed7565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090612f77565b60405180910390fd5b600860009054906101000a900460ff16611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90612fd7565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b8152600401611e39929190612c3e565b602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b919061264f565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190612f97565b60405180910390fd5b565b60065481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611fa55750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90612eb7565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120619190612bba565b600060405180830381600087803b15801561207b57600080fd5b505af115801561208f573d6000803e3d6000fd5b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211c90612f77565b60405180910390fd5b600860009054906101000a900460ff16612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90612fd7565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016121d393929190612c0c565b600060405180830381600087803b1580156121ed57600080fd5b505af1158015612201573d6000803e3d6000fd5b5050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061225792919061236b565b50505050565b6122f58282604051602401612273929190612e07565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612342565b5050565b6001600860006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b82805461237790613319565b90600052602060002090601f01602090048101928261239957600085556123e0565b82601f106123b257803560ff19168380011785556123e0565b828001600101855582156123e0579182015b828111156123df5782358255916020019190600101906123c4565b5b5090506123ed91906123f1565b5090565b5b8082111561240a5760008160009055506001016123f2565b5090565b600061242161241c846130b2565b61308d565b90508281526020810184848401111561243d5761243c613418565b5b6124488482856132d7565b509392505050565b600061246361245e846130e3565b61308d565b90508281526020810184848401111561247f5761247e613418565b5b61248a8482856132d7565b509392505050565b6000813590506124a1816136c2565b92915050565b6000815190506124b6816136d9565b92915050565b60008083601f8401126124d2576124d161340e565b5b8235905067ffffffffffffffff8111156124ef576124ee613409565b5b60208301915083600182028301111561250b5761250a613413565b5b9250929050565b600082601f8301126125275761252661340e565b5b813561253784826020860161240e565b91505092915050565b60008151905061254f816136f0565b92915050565b60008151905061256481613707565b92915050565b600082601f83011261257f5761257e61340e565b5b813561258f848260208601612450565b91505092915050565b6000813590506125a78161371e565b92915050565b6000815190506125bc8161371e565b92915050565b6000602082840312156125d8576125d7613422565b5b60006125e684828501612492565b91505092915050565b60008060006040848603121561260857612607613422565b5b600061261686828701612492565b935050602084013567ffffffffffffffff8111156126375761263661341d565b5b612643868287016124bc565b92509250509250925092565b60006020828403121561266557612664613422565b5b6000612673848285016124a7565b91505092915050565b60006020828403121561269257612691613422565b5b60006126a084828501612540565b91505092915050565b6000602082840312156126bf576126be613422565b5b60006126cd84828501612555565b91505092915050565b6000602082840312156126ec576126eb613422565b5b600082013567ffffffffffffffff81111561270a5761270961341d565b5b6127168482850161256a565b91505092915050565b60008060006060848603121561273857612737613422565b5b600084013567ffffffffffffffff8111156127565761275561341d565b5b6127628682870161256a565b935050602061277386828701612492565b925050604061278486828701612598565b9150509250925092565b600080600080600060a086880312156127aa576127a9613422565b5b600086013567ffffffffffffffff8111156127c8576127c761341d565b5b6127d48882890161256a565b95505060206127e588828901612492565b94505060406127f688828901612598565b935050606061280788828901612598565b925050608086013567ffffffffffffffff8111156128285761282761341d565b5b61283488828901612512565b9150509295509295909350565b60006020828403121561285757612856613422565b5b600061286584828501612598565b91505092915050565b60006020828403121561288457612883613422565b5b6000612892848285016125ad565b91505092915050565b6128a4816131d6565b82525050565b6128b3816131e8565b82525050565b6128c2816131f4565b82525050565b60006128d4838561312a565b93506128e18385846132d7565b6128ea83613427565b840190509392505050565b600061290082613114565b61290a818561312a565b935061291a8185602086016132e6565b61292381613427565b840191505092915050565b61293781613259565b82525050565b6129468161326b565b82525050565b6129558161327d565b82525050565b6129648161328f565b82525050565b612973816132a1565b82525050565b60006129848261311f565b61298e818561313b565b935061299e8185602086016132e6565b6129a781613427565b840191505092915050565b60006129bf600e8361313b565b91506129ca82613438565b602082019050919050565b60006129e2600e8361313b565b91506129ed82613461565b602082019050919050565b6000612a05600f8361313b565b9150612a108261348a565b602082019050919050565b6000612a2860148361313b565b9150612a33826134b3565b602082019050919050565b6000612a4b602e8361313b565b9150612a56826134dc565b604082019050919050565b6000612a6e60178361313b565b9150612a798261352b565b602082019050919050565b6000612a9160128361313b565b9150612a9c82613554565b602082019050919050565b6000612ab4601e8361313b565b9150612abf8261357d565b602082019050919050565b6000612ad7600d8361313b565b9150612ae2826135a6565b602082019050919050565b6000612afa60178361313b565b9150612b05826135cf565b602082019050919050565b6000612b1d60248361313b565b9150612b28826135f8565b604082019050919050565b6000612b4060148361313b565b9150612b4b82613647565b602082019050919050565b6000612b6360178361313b565b9150612b6e82613670565b602082019050919050565b6000612b8660128361313b565b9150612b9182613699565b602082019050919050565b612ba581613242565b82525050565b612bb48161324c565b82525050565b6000602082019050612bcf600083018461289b565b92915050565b6000606082019050612bea600083018661289b565b612bf7602083018561289b565b612c046040830184612b9c565b949350505050565b6000604082019050612c21600083018661289b565b8181036020830152612c348184866128c8565b9050949350505050565b6000604082019050612c53600083018561289b565b612c606020830184612b9c565b9392505050565b6000602082019050612c7c60008301846128aa565b92915050565b6000608082019050612c9760008301876128b9565b612ca46020830186612b9c565b612cb160408301856128b9565b8181036060830152612cc381846128f5565b905095945050505050565b60006020820190508181036000830152612ce881846128f5565b905092915050565b6000602082019050612d05600083018461292e565b92915050565b6000602082019050612d20600083018461293d565b92915050565b6000602082019050612d3b600083018461294c565b92915050565b6000602082019050612d56600083018461295b565b92915050565b6000602082019050612d71600083018461296a565b92915050565b60006020820190508181036000830152612d918184612979565b905092915050565b60006040820190508181036000830152612db38185612979565b9050612dc2602083018461289b565b9392505050565b60006060820190508181036000830152612de38186612979565b9050612df2602083018561289b565b612dff6040830184612b9c565b949350505050565b60006040820190508181036000830152612e218185612979565b9050612e306020830184612b9c565b9392505050565b60006020820190508181036000830152612e50816129b2565b9050919050565b60006020820190508181036000830152612e70816129d5565b9050919050565b60006020820190508181036000830152612e90816129f8565b9050919050565b60006020820190508181036000830152612eb081612a1b565b9050919050565b60006020820190508181036000830152612ed081612a3e565b9050919050565b60006020820190508181036000830152612ef081612a61565b9050919050565b60006020820190508181036000830152612f1081612a84565b9050919050565b60006020820190508181036000830152612f3081612aa7565b9050919050565b60006020820190508181036000830152612f5081612aca565b9050919050565b60006020820190508181036000830152612f7081612aed565b9050919050565b60006020820190508181036000830152612f9081612b10565b9050919050565b60006020820190508181036000830152612fb081612b33565b9050919050565b60006020820190508181036000830152612fd081612b56565b9050919050565b60006020820190508181036000830152612ff081612b79565b9050919050565b600060208201905061300c6000830184612b9c565b92915050565b60006040820190506130276000830185612b9c565b6130346020830184612b9c565b9392505050565b60006060820190506130506000830186612b9c565b61305d6020830185612b9c565b61306a60408301846128b9565b949350505050565b60006020820190506130876000830184612bab565b92915050565b60006130976130a8565b90506130a3828261334b565b919050565b6000604051905090565b600067ffffffffffffffff8211156130cd576130cc6133da565b5b6130d682613427565b9050602081019050919050565b600067ffffffffffffffff8211156130fe576130fd6133da565b5b61310782613427565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061315782613242565b915061316283613242565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131975761319661337c565b5b828201905092915050565b60006131ad82613242565b91506131b883613242565b9250828210156131cb576131ca61337c565b5b828203905092915050565b60006131e182613222565b9050919050565b60008115159050919050565b6000819050919050565b6000613209826131d6565b9050919050565b600061321b826131d6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613264826132b3565b9050919050565b6000613276826132b3565b9050919050565b6000613288826132b3565b9050919050565b600061329a826132b3565b9050919050565b60006132ac826132b3565b9050919050565b60006132be826132c5565b9050919050565b60006132d082613222565b9050919050565b82818337600083830152505050565b60005b838110156133045780820151818401526020810190506132e9565b83811115613313576000848401525b50505050565b6000600282049050600182168061333157607f821691505b60208210811415613345576133446133ab565b5b50919050565b61335482613427565b810181811067ffffffffffffffff82111715613373576133726133da565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f506f6f6c206973206c6f636b6564000000000000000000000000000000000000600082015250565b7f4465706f736974206661696c6564000000000000000000000000000000000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f506f6f6c2062616c616e6365206973207a65726f000000000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f526566756e64206661696c656400000000000000000000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f426f6e64207472616e73666572206661696c6564000000000000000000000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b7f506f6f6c206973206e6f74206c6f636b65640000000000000000000000000000600082015250565b6136cb816131d6565b81146136d657600080fd5b50565b6136e2816131e8565b81146136ed57600080fd5b50565b6136f9816131fe565b811461370457600080fd5b50565b61371081613210565b811461371b57600080fd5b50565b61372781613242565b811461373257600080fd5b5056fea2646970667358221220b0d239bd9fe04d0230d54cf2c6df16857e519ea8e0f4b0c4eb56909278c44d2764736f6c63430008070033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162003f5e38038062003f5e83398181016040528101906200003791906200027b565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003bb565b6000815190506200025e8162000387565b92915050565b6000815190506200027581620003a1565b92915050565b600080600080600080600080610100898b0312156200029f576200029e62000382565b5b6000620002af8b828c016200024d565b9850506020620002c28b828c016200024d565b9750506040620002d58b828c016200024d565b9650506060620002e88b828c016200024d565b9550506080620002fb8b828c016200024d565b94505060a06200030e8b828c016200024d565b93505060c0620003218b828c016200024d565b92505060e0620003348b828c0162000264565b9150509295985092959890939650565b6000620003518262000358565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003928162000344565b81146200039e57600080fd5b50565b620003ac8162000378565b8114620003b857600080fd5b50565b613b9380620003cb6000396000f3fe6080604052600436106101fd5760003560e01c8063890265381161010d578063b6b34c67116100a0578063d693452e1161006f578063d693452e14610748578063e19e716814610773578063e39f61011461078a578063e438a77d146107b5578063e7585aea146107cc57610252565b8063b6b34c67146106b2578063b6b55f25146106dd578063b7eb85c414610706578063d5b2a01a1461071d57610252565b8063a4e2d634116100dc578063a4e2d634146105f6578063aaaa0c4b14610621578063ac3479871461064c578063b46ff3c31461068957610252565b8063890265381461055e5780638da5cb5b14610575578063901a6498146105a05780639e45e0d0146105cb57610252565b806352df49ec116101905780636ec21cc81161015f5780636ec21cc81461045357806370a082311461047e57806371bbef36146104bb578063745400c9146104f85780637ecebe001461052157610252565b806352df49ec1461039757806363ffab31146103d457806364c9ec6f146103ff5780636664e42e1461042a57610252565b80632e0f2625116101cc5780632e0f2625146102ed5780632e1a7d4d1461031857806334246f9b14610341578063372500ab1461036c57610252565b8063023c5b08146102575780631261795d1461028257806313a0ae2b1461029957806327e235e3146102b057610252565b36610252573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102489190613448565b60405180910390a2005b600080fd5b34801561026357600080fd5b5061026c6107f5565b604051610279919061302b565b60405180910390f35b34801561028e57600080fd5b5061029761081b565b005b3480156102a557600080fd5b506102ae61098c565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190612a56565b610a3d565b6040516102e49190613448565b60405180910390f35b3480156102f957600080fd5b50610302610a55565b60405161030f91906134c3565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612cd5565b610a5a565b005b34801561034d57600080fd5b50610356610d35565b60405161036391906131b2565b60405180910390f35b34801561037857600080fd5b50610381610d5b565b60405161038e9190613161565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612a56565b610d81565b6040516103cb9190613448565b60405180910390f35b3480156103e057600080fd5b506103e9610d99565b6040516103f6919061313f565b60405180910390f35b34801561040b57600080fd5b50610414610e27565b6040516104219190613448565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190612c22565b610e2d565b005b34801561045f57600080fd5b5061046861105f565b6040516104759190613448565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612a56565b611065565b6040516104b29190613448565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190612bb3565b6110ae565b6040516104ef9190613448565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190612cd5565b611211565b005b34801561052d57600080fd5b5061054860048036038101906105439190612a56565b6113eb565b6040516105559190613448565b60405180910390f35b34801561056a57600080fd5b50610573611403565b005b34801561058157600080fd5b5061058a61161f565b604051610597919061302b565b60405180910390f35b3480156105ac57600080fd5b506105b5611643565b6040516105c2919061302b565b60405180910390f35b3480156105d757600080fd5b506105e0611669565b6040516105ed9190613197565b60405180910390f35b34801561060257600080fd5b5061060b61168f565b60405161061891906130d8565b60405180910390f35b34801561062d57600080fd5b506106366116a2565b6040516106439190613448565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612b6a565b6116a8565b6040516106809190613448565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190612a56565b6117e4565b005b3480156106be57600080fd5b506106c7611bf8565b6040516106d4919061317c565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612cd5565b611c1e565b005b34801561071257600080fd5b5061071b611ece565b005b34801561072957600080fd5b506107326120c1565b60405161073f9190613448565b60405180910390f35b34801561075457600080fd5b5061075d6120c7565b60405161076a91906131cd565b60405180910390f35b34801561077f57600080fd5b506107886120ed565b005b34801561079657600080fd5b5061079f6122e6565b6040516107ac9190613448565b60405180910390f35b3480156107c157600080fd5b506107ca6122ec565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612a83565b6123dc565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a2906133c8565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610918573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109819190613448565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a09919061302b565b600060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b50505050565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613428565b60405180910390fd5b600081118015610af65750828110155b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613348565b60405180910390fd5b600960009054906101000a900460ff1615610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906133a8565b60405180910390fd5b8260056000828254610b9791906135f3565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bed91906135f3565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c519291906130af565b602060405180830381600087803b158015610c6b57600080fd5b505af1158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca39190612ae3565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906132c8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d289190613448565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610da69061376a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd29061376a565b8015610e1f5780601f10610df457610100808354040283529160200191610e1f565b820191906000526020600020905b815481529060010190602001808311610e0257829003601f168201915b505050505081565b60045481565b60008585604051602001610e4292919061320a565b6040516020818303038152906040528051906020012090506000838583604051602001610e719392919061348c565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610ee691906131e8565b60206040518083038186803b158015610efe57600080fd5b505afa158015610f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f369190612b3d565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610f7494939291906130f3565b602060405180830381600087803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190612d02565b90506110076040518060400160405280600a81526020017f6d696e74416d6f756e7400000000000000000000000000000000000000000000815250826125a4565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161104d9190613448565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161111c9392919061323a565b602060405180830381600087803b15801561113657600080fd5b505af115801561114a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116e9190612d02565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516111fc929190613463565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613428565b60405180910390fd5b6000811180156112ad5750828110155b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613348565b60405180910390fd5b600960009054906101000a900460ff1661133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290613388565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611391919061359d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516113de9190613448565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114aa5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906132a8565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611546919061302b565b60206040518083038186803b15801561155e57600080fd5b505afa158015611572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115969190612d02565b116115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613408565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b815260040161170591906131e8565b60206040518083038186803b15801561171d57600080fd5b505afa158015611731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117559190612b10565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178d919061302b565b60206040518083038186803b1580156117a557600080fd5b505afa1580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190612d02565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613328565b60405180910390fd5b600960009054906101000a900460ff166118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690613388565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461190e919061359d565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196491906135f3565b92505081905550806006600082825461197d91906135f3565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611a2693929190613046565b602060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612ae3565b611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906132e8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b149291906130af565b602060405180830381600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190612ae3565b611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c906133e8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611beb9190613448565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906133a8565b60405180910390fd5b60008211611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613428565b60405180910390fd5b60045460055483611cc7919061359d565b1115611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90613308565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d57919061359d565b925050819055508160056000828254611d70919061359d565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611dbd9190613448565b60405180910390a26004546005541415611dda57611dd9612640565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611e3993929190613046565b602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b9190612ae3565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec1906132e8565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f55906133c8565b60405180910390fd5b600960009054906101000a900460ff16611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490613388565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161202e9291906130af565b602060405180830381600087803b15801561204857600080fd5b505af115801561205c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120809190612ae3565b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613368565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613328565b60405180910390fd5b806006600082825461218b91906135f3565b925050819055506121d16040518060400160405280600681526020017f73656e646572000000000000000000000000000000000000000000000000000081525083612689565b6122106040518060400160405280600681526020017f616d6f756e740000000000000000000000000000000000000000000000000000815250826125a4565b6122516040518060400160405280600581526020017f746f74616c0000000000000000000000000000000000000000000000000000008152506006546125a4565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516122da9190613448565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c9906132a8565b60405180910390fd5b6123da612725565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906133c8565b60405180910390fd5b600960009054906101000a900460ff166124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290613388565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b815260040161251a9392919061307d565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b5050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061259e9291906127ff565b50505050565b61263c82826040516024016125ba929190613278565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b612721828260405160240161269f92919061320a565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016127a2919061302b565b600060405180830381600087803b1580156127bc57600080fd5b505af11580156127d0573d6000803e3d6000fd5b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b82805461280b9061376a565b90600052602060002090601f01602090048101928261282d5760008555612874565b82601f1061284657803560ff1916838001178555612874565b82800160010185558215612874579182015b82811115612873578235825591602001919060010190612858565b5b5090506128819190612885565b5090565b5b8082111561289e576000816000905550600101612886565b5090565b60006128b56128b084613503565b6134de565b9050828152602081018484840111156128d1576128d0613869565b5b6128dc848285613728565b509392505050565b60006128f76128f284613534565b6134de565b90508281526020810184848401111561291357612912613869565b5b61291e848285613728565b509392505050565b60008135905061293581613aea565b92915050565b60008151905061294a81613b01565b92915050565b60008083601f8401126129665761296561385f565b5b8235905067ffffffffffffffff8111156129835761298261385a565b5b60208301915083600182028301111561299f5761299e613864565b5b9250929050565b600082601f8301126129bb576129ba61385f565b5b81356129cb8482602086016128a2565b91505092915050565b6000815190506129e381613b18565b92915050565b6000815190506129f881613b2f565b92915050565b600082601f830112612a1357612a1261385f565b5b8135612a238482602086016128e4565b91505092915050565b600081359050612a3b81613b46565b92915050565b600081519050612a5081613b46565b92915050565b600060208284031215612a6c57612a6b613873565b5b6000612a7a84828501612926565b91505092915050565b600080600060408486031215612a9c57612a9b613873565b5b6000612aaa86828701612926565b935050602084013567ffffffffffffffff811115612acb57612aca61386e565b5b612ad786828701612950565b92509250509250925092565b600060208284031215612af957612af8613873565b5b6000612b078482850161293b565b91505092915050565b600060208284031215612b2657612b25613873565b5b6000612b34848285016129d4565b91505092915050565b600060208284031215612b5357612b52613873565b5b6000612b61848285016129e9565b91505092915050565b600060208284031215612b8057612b7f613873565b5b600082013567ffffffffffffffff811115612b9e57612b9d61386e565b5b612baa848285016129fe565b91505092915050565b600080600060608486031215612bcc57612bcb613873565b5b600084013567ffffffffffffffff811115612bea57612be961386e565b5b612bf6868287016129fe565b9350506020612c0786828701612926565b9250506040612c1886828701612a2c565b9150509250925092565b600080600080600060a08688031215612c3e57612c3d613873565b5b600086013567ffffffffffffffff811115612c5c57612c5b61386e565b5b612c68888289016129fe565b9550506020612c7988828901612926565b9450506040612c8a88828901612a2c565b9350506060612c9b88828901612a2c565b925050608086013567ffffffffffffffff811115612cbc57612cbb61386e565b5b612cc8888289016129a6565b9150509295509295909350565b600060208284031215612ceb57612cea613873565b5b6000612cf984828501612a2c565b91505092915050565b600060208284031215612d1857612d17613873565b5b6000612d2684828501612a41565b91505092915050565b612d3881613627565b82525050565b612d4781613639565b82525050565b612d5681613645565b82525050565b6000612d68838561357b565b9350612d75838584613728565b612d7e83613878565b840190509392505050565b6000612d9482613565565b612d9e818561357b565b9350612dae818560208601613737565b612db781613878565b840191505092915050565b612dcb816136aa565b82525050565b612dda816136bc565b82525050565b612de9816136ce565b82525050565b612df8816136e0565b82525050565b612e07816136f2565b82525050565b6000612e1882613570565b612e22818561358c565b9350612e32818560208601613737565b612e3b81613878565b840191505092915050565b6000612e53602e8361358c565b9150612e5e82613889565b604082019050919050565b6000612e7660188361358c565b9150612e81826138d8565b602082019050919050565b6000612e9960178361358c565b9150612ea482613901565b602082019050919050565b6000612ebc601e8361358c565b9150612ec78261392a565b602082019050919050565b6000612edf60178361358c565b9150612eea82613953565b602082019050919050565b6000612f02601b8361358c565b9150612f0d8261397c565b602082019050919050565b6000612f25601d8361358c565b9150612f30826139a5565b602082019050919050565b6000612f48601b8361358c565b9150612f53826139ce565b602082019050919050565b6000612f6b60178361358c565b9150612f76826139f7565b602082019050919050565b6000612f8e60248361358c565b9150612f9982613a20565b604082019050919050565b6000612fb160168361358c565b9150612fbc82613a6f565b602082019050919050565b6000612fd4601d8361358c565b9150612fdf82613a98565b602082019050919050565b6000612ff760178361358c565b915061300282613ac1565b602082019050919050565b61301681613693565b82525050565b6130258161369d565b82525050565b60006020820190506130406000830184612d2f565b92915050565b600060608201905061305b6000830186612d2f565b6130686020830185612d2f565b613075604083018461300d565b949350505050565b60006040820190506130926000830186612d2f565b81810360208301526130a5818486612d5c565b9050949350505050565b60006040820190506130c46000830185612d2f565b6130d1602083018461300d565b9392505050565b60006020820190506130ed6000830184612d3e565b92915050565b60006080820190506131086000830187612d4d565b613115602083018661300d565b6131226040830185612d4d565b81810360608301526131348184612d89565b905095945050505050565b600060208201905081810360008301526131598184612d89565b905092915050565b60006020820190506131766000830184612dc2565b92915050565b60006020820190506131916000830184612dd1565b92915050565b60006020820190506131ac6000830184612de0565b92915050565b60006020820190506131c76000830184612def565b92915050565b60006020820190506131e26000830184612dfe565b92915050565b600060208201905081810360008301526132028184612e0d565b905092915050565b600060408201905081810360008301526132248185612e0d565b90506132336020830184612d2f565b9392505050565b600060608201905081810360008301526132548186612e0d565b90506132636020830185612d2f565b613270604083018461300d565b949350505050565b600060408201905081810360008301526132928185612e0d565b90506132a1602083018461300d565b9392505050565b600060208201905081810360008301526132c181612e46565b9050919050565b600060208201905081810360008301526132e181612e69565b9050919050565b6000602082019050818103600083015261330181612e8c565b9050919050565b6000602082019050818103600083015261332181612eaf565b9050919050565b6000602082019050818103600083015261334181612ed2565b9050919050565b6000602082019050818103600083015261336181612ef5565b9050919050565b6000602082019050818103600083015261338181612f18565b9050919050565b600060208201905081810360008301526133a181612f3b565b9050919050565b600060208201905081810360008301526133c181612f5e565b9050919050565b600060208201905081810360008301526133e181612f81565b9050919050565b6000602082019050818103600083015261340181612fa4565b9050919050565b6000602082019050818103600083015261342181612fc7565b9050919050565b6000602082019050818103600083015261344181612fea565b9050919050565b600060208201905061345d600083018461300d565b92915050565b6000604082019050613478600083018561300d565b613485602083018461300d565b9392505050565b60006060820190506134a1600083018661300d565b6134ae602083018561300d565b6134bb6040830184612d4d565b949350505050565b60006020820190506134d8600083018461301c565b92915050565b60006134e86134f9565b90506134f4828261379c565b919050565b6000604051905090565b600067ffffffffffffffff82111561351e5761351d61382b565b5b61352782613878565b9050602081019050919050565b600067ffffffffffffffff82111561354f5761354e61382b565b5b61355882613878565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135a882613693565b91506135b383613693565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135e8576135e76137cd565b5b828201905092915050565b60006135fe82613693565b915061360983613693565b92508282101561361c5761361b6137cd565b5b828203905092915050565b600061363282613673565b9050919050565b60008115159050919050565b6000819050919050565b600061365a82613627565b9050919050565b600061366c82613627565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136b582613704565b9050919050565b60006136c782613704565b9050919050565b60006136d982613704565b9050919050565b60006136eb82613704565b9050919050565b60006136fd82613704565b9050919050565b600061370f82613716565b9050919050565b600061372182613673565b9050919050565b82818337600083830152505050565b60005b8381101561375557808201518184015260208101905061373a565b83811115613764576000848401525b50505050565b6000600282049050600182168061378257607f821691505b60208210811415613796576137956137fc565b5b50919050565b6137a582613878565b810181811067ffffffffffffffff821117156137c4576137c361382b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613af381613627565b8114613afe57600080fd5b50565b613b0a81613639565b8114613b1557600080fd5b50565b613b218161364f565b8114613b2c57600080fd5b50565b613b3881613661565b8114613b4357600080fd5b50565b613b4f81613693565b8114613b5a57600080fd5b5056fea26469706673582212207d96ebaeb478f332f3658c962f9ed8850fd5cd0779d6164b29c57fefbfa9668364736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106101fd5760003560e01c8063890265381161010d578063b6b34c67116100a0578063d693452e1161006f578063d693452e14610748578063e19e716814610773578063e39f61011461078a578063e438a77d146107b5578063e7585aea146107cc57610252565b8063b6b34c67146106b2578063b6b55f25146106dd578063b7eb85c414610706578063d5b2a01a1461071d57610252565b8063a4e2d634116100dc578063a4e2d634146105f6578063aaaa0c4b14610621578063ac3479871461064c578063b46ff3c31461068957610252565b8063890265381461055e5780638da5cb5b14610575578063901a6498146105a05780639e45e0d0146105cb57610252565b806352df49ec116101905780636ec21cc81161015f5780636ec21cc81461045357806370a082311461047e57806371bbef36146104bb578063745400c9146104f85780637ecebe001461052157610252565b806352df49ec1461039757806363ffab31146103d457806364c9ec6f146103ff5780636664e42e1461042a57610252565b80632e0f2625116101cc5780632e0f2625146102ed5780632e1a7d4d1461031857806334246f9b14610341578063372500ab1461036c57610252565b8063023c5b08146102575780631261795d1461028257806313a0ae2b1461029957806327e235e3146102b057610252565b36610252573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102489190613448565b60405180910390a2005b600080fd5b34801561026357600080fd5b5061026c6107f5565b604051610279919061302b565b60405180910390f35b34801561028e57600080fd5b5061029761081b565b005b3480156102a557600080fd5b506102ae61098c565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190612a56565b610a3d565b6040516102e49190613448565b60405180910390f35b3480156102f957600080fd5b50610302610a55565b60405161030f91906134c3565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612cd5565b610a5a565b005b34801561034d57600080fd5b50610356610d35565b60405161036391906131b2565b60405180910390f35b34801561037857600080fd5b50610381610d5b565b60405161038e9190613161565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612a56565b610d81565b6040516103cb9190613448565b60405180910390f35b3480156103e057600080fd5b506103e9610d99565b6040516103f6919061313f565b60405180910390f35b34801561040b57600080fd5b50610414610e27565b6040516104219190613448565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190612c22565b610e2d565b005b34801561045f57600080fd5b5061046861105f565b6040516104759190613448565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612a56565b611065565b6040516104b29190613448565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190612bb3565b6110ae565b6040516104ef9190613448565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190612cd5565b611211565b005b34801561052d57600080fd5b5061054860048036038101906105439190612a56565b6113eb565b6040516105559190613448565b60405180910390f35b34801561056a57600080fd5b50610573611403565b005b34801561058157600080fd5b5061058a61161f565b604051610597919061302b565b60405180910390f35b3480156105ac57600080fd5b506105b5611643565b6040516105c2919061302b565b60405180910390f35b3480156105d757600080fd5b506105e0611669565b6040516105ed9190613197565b60405180910390f35b34801561060257600080fd5b5061060b61168f565b60405161061891906130d8565b60405180910390f35b34801561062d57600080fd5b506106366116a2565b6040516106439190613448565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612b6a565b6116a8565b6040516106809190613448565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190612a56565b6117e4565b005b3480156106be57600080fd5b506106c7611bf8565b6040516106d4919061317c565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612cd5565b611c1e565b005b34801561071257600080fd5b5061071b611ece565b005b34801561072957600080fd5b506107326120c1565b60405161073f9190613448565b60405180910390f35b34801561075457600080fd5b5061075d6120c7565b60405161076a91906131cd565b60405180910390f35b34801561077f57600080fd5b506107886120ed565b005b34801561079657600080fd5b5061079f6122e6565b6040516107ac9190613448565b60405180910390f35b3480156107c157600080fd5b506107ca6122ec565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612a83565b6123dc565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a2906133c8565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610918573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109819190613448565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a09919061302b565b600060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b50505050565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613428565b60405180910390fd5b600081118015610af65750828110155b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613348565b60405180910390fd5b600960009054906101000a900460ff1615610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906133a8565b60405180910390fd5b8260056000828254610b9791906135f3565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bed91906135f3565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c519291906130af565b602060405180830381600087803b158015610c6b57600080fd5b505af1158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca39190612ae3565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906132c8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d289190613448565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610da69061376a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd29061376a565b8015610e1f5780601f10610df457610100808354040283529160200191610e1f565b820191906000526020600020905b815481529060010190602001808311610e0257829003601f168201915b505050505081565b60045481565b60008585604051602001610e4292919061320a565b6040516020818303038152906040528051906020012090506000838583604051602001610e719392919061348c565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610ee691906131e8565b60206040518083038186803b158015610efe57600080fd5b505afa158015610f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f369190612b3d565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610f7494939291906130f3565b602060405180830381600087803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190612d02565b90506110076040518060400160405280600a81526020017f6d696e74416d6f756e7400000000000000000000000000000000000000000000815250826125a4565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161104d9190613448565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161111c9392919061323a565b602060405180830381600087803b15801561113657600080fd5b505af115801561114a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116e9190612d02565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516111fc929190613463565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613428565b60405180910390fd5b6000811180156112ad5750828110155b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613348565b60405180910390fd5b600960009054906101000a900460ff1661133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290613388565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611391919061359d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516113de9190613448565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114aa5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906132a8565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611546919061302b565b60206040518083038186803b15801561155e57600080fd5b505afa158015611572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115969190612d02565b116115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613408565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b815260040161170591906131e8565b60206040518083038186803b15801561171d57600080fd5b505afa158015611731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117559190612b10565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178d919061302b565b60206040518083038186803b1580156117a557600080fd5b505afa1580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190612d02565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613328565b60405180910390fd5b600960009054906101000a900460ff166118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690613388565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461190e919061359d565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196491906135f3565b92505081905550806006600082825461197d91906135f3565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611a2693929190613046565b602060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612ae3565b611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906132e8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b149291906130af565b602060405180830381600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190612ae3565b611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c906133e8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611beb9190613448565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906133a8565b60405180910390fd5b60008211611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613428565b60405180910390fd5b60045460055483611cc7919061359d565b1115611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90613308565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d57919061359d565b925050819055508160056000828254611d70919061359d565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611dbd9190613448565b60405180910390a26004546005541415611dda57611dd9612640565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611e3993929190613046565b602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b9190612ae3565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec1906132e8565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f55906133c8565b60405180910390fd5b600960009054906101000a900460ff16611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490613388565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161202e9291906130af565b602060405180830381600087803b15801561204857600080fd5b505af115801561205c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120809190612ae3565b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613368565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613328565b60405180910390fd5b806006600082825461218b91906135f3565b925050819055506121d16040518060400160405280600681526020017f73656e646572000000000000000000000000000000000000000000000000000081525083612689565b6122106040518060400160405280600681526020017f616d6f756e740000000000000000000000000000000000000000000000000000815250826125a4565b6122516040518060400160405280600581526020017f746f74616c0000000000000000000000000000000000000000000000000000008152506006546125a4565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516122da9190613448565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c9906132a8565b60405180910390fd5b6123da612725565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906133c8565b60405180910390fd5b600960009054906101000a900460ff166124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290613388565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b815260040161251a9392919061307d565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b5050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061259e9291906127ff565b50505050565b61263c82826040516024016125ba929190613278565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b612721828260405160240161269f92919061320a565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016127a2919061302b565b600060405180830381600087803b1580156127bc57600080fd5b505af11580156127d0573d6000803e3d6000fd5b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b82805461280b9061376a565b90600052602060002090601f01602090048101928261282d5760008555612874565b82601f1061284657803560ff1916838001178555612874565b82800160010185558215612874579182015b82811115612873578235825591602001919060010190612858565b5b5090506128819190612885565b5090565b5b8082111561289e576000816000905550600101612886565b5090565b60006128b56128b084613503565b6134de565b9050828152602081018484840111156128d1576128d0613869565b5b6128dc848285613728565b509392505050565b60006128f76128f284613534565b6134de565b90508281526020810184848401111561291357612912613869565b5b61291e848285613728565b509392505050565b60008135905061293581613aea565b92915050565b60008151905061294a81613b01565b92915050565b60008083601f8401126129665761296561385f565b5b8235905067ffffffffffffffff8111156129835761298261385a565b5b60208301915083600182028301111561299f5761299e613864565b5b9250929050565b600082601f8301126129bb576129ba61385f565b5b81356129cb8482602086016128a2565b91505092915050565b6000815190506129e381613b18565b92915050565b6000815190506129f881613b2f565b92915050565b600082601f830112612a1357612a1261385f565b5b8135612a238482602086016128e4565b91505092915050565b600081359050612a3b81613b46565b92915050565b600081519050612a5081613b46565b92915050565b600060208284031215612a6c57612a6b613873565b5b6000612a7a84828501612926565b91505092915050565b600080600060408486031215612a9c57612a9b613873565b5b6000612aaa86828701612926565b935050602084013567ffffffffffffffff811115612acb57612aca61386e565b5b612ad786828701612950565b92509250509250925092565b600060208284031215612af957612af8613873565b5b6000612b078482850161293b565b91505092915050565b600060208284031215612b2657612b25613873565b5b6000612b34848285016129d4565b91505092915050565b600060208284031215612b5357612b52613873565b5b6000612b61848285016129e9565b91505092915050565b600060208284031215612b8057612b7f613873565b5b600082013567ffffffffffffffff811115612b9e57612b9d61386e565b5b612baa848285016129fe565b91505092915050565b600080600060608486031215612bcc57612bcb613873565b5b600084013567ffffffffffffffff811115612bea57612be961386e565b5b612bf6868287016129fe565b9350506020612c0786828701612926565b9250506040612c1886828701612a2c565b9150509250925092565b600080600080600060a08688031215612c3e57612c3d613873565b5b600086013567ffffffffffffffff811115612c5c57612c5b61386e565b5b612c68888289016129fe565b9550506020612c7988828901612926565b9450506040612c8a88828901612a2c565b9350506060612c9b88828901612a2c565b925050608086013567ffffffffffffffff811115612cbc57612cbb61386e565b5b612cc8888289016129a6565b9150509295509295909350565b600060208284031215612ceb57612cea613873565b5b6000612cf984828501612a2c565b91505092915050565b600060208284031215612d1857612d17613873565b5b6000612d2684828501612a41565b91505092915050565b612d3881613627565b82525050565b612d4781613639565b82525050565b612d5681613645565b82525050565b6000612d68838561357b565b9350612d75838584613728565b612d7e83613878565b840190509392505050565b6000612d9482613565565b612d9e818561357b565b9350612dae818560208601613737565b612db781613878565b840191505092915050565b612dcb816136aa565b82525050565b612dda816136bc565b82525050565b612de9816136ce565b82525050565b612df8816136e0565b82525050565b612e07816136f2565b82525050565b6000612e1882613570565b612e22818561358c565b9350612e32818560208601613737565b612e3b81613878565b840191505092915050565b6000612e53602e8361358c565b9150612e5e82613889565b604082019050919050565b6000612e7660188361358c565b9150612e81826138d8565b602082019050919050565b6000612e9960178361358c565b9150612ea482613901565b602082019050919050565b6000612ebc601e8361358c565b9150612ec78261392a565b602082019050919050565b6000612edf60178361358c565b9150612eea82613953565b602082019050919050565b6000612f02601b8361358c565b9150612f0d8261397c565b602082019050919050565b6000612f25601d8361358c565b9150612f30826139a5565b602082019050919050565b6000612f48601b8361358c565b9150612f53826139ce565b602082019050919050565b6000612f6b60178361358c565b9150612f76826139f7565b602082019050919050565b6000612f8e60248361358c565b9150612f9982613a20565b604082019050919050565b6000612fb160168361358c565b9150612fbc82613a6f565b602082019050919050565b6000612fd4601d8361358c565b9150612fdf82613a98565b602082019050919050565b6000612ff760178361358c565b915061300282613ac1565b602082019050919050565b61301681613693565b82525050565b6130258161369d565b82525050565b60006020820190506130406000830184612d2f565b92915050565b600060608201905061305b6000830186612d2f565b6130686020830185612d2f565b613075604083018461300d565b949350505050565b60006040820190506130926000830186612d2f565b81810360208301526130a5818486612d5c565b9050949350505050565b60006040820190506130c46000830185612d2f565b6130d1602083018461300d565b9392505050565b60006020820190506130ed6000830184612d3e565b92915050565b60006080820190506131086000830187612d4d565b613115602083018661300d565b6131226040830185612d4d565b81810360608301526131348184612d89565b905095945050505050565b600060208201905081810360008301526131598184612d89565b905092915050565b60006020820190506131766000830184612dc2565b92915050565b60006020820190506131916000830184612dd1565b92915050565b60006020820190506131ac6000830184612de0565b92915050565b60006020820190506131c76000830184612def565b92915050565b60006020820190506131e26000830184612dfe565b92915050565b600060208201905081810360008301526132028184612e0d565b905092915050565b600060408201905081810360008301526132248185612e0d565b90506132336020830184612d2f565b9392505050565b600060608201905081810360008301526132548186612e0d565b90506132636020830185612d2f565b613270604083018461300d565b949350505050565b600060408201905081810360008301526132928185612e0d565b90506132a1602083018461300d565b9392505050565b600060208201905081810360008301526132c181612e46565b9050919050565b600060208201905081810360008301526132e181612e69565b9050919050565b6000602082019050818103600083015261330181612e8c565b9050919050565b6000602082019050818103600083015261332181612eaf565b9050919050565b6000602082019050818103600083015261334181612ed2565b9050919050565b6000602082019050818103600083015261336181612ef5565b9050919050565b6000602082019050818103600083015261338181612f18565b9050919050565b600060208201905081810360008301526133a181612f3b565b9050919050565b600060208201905081810360008301526133c181612f5e565b9050919050565b600060208201905081810360008301526133e181612f81565b9050919050565b6000602082019050818103600083015261340181612fa4565b9050919050565b6000602082019050818103600083015261342181612fc7565b9050919050565b6000602082019050818103600083015261344181612fea565b9050919050565b600060208201905061345d600083018461300d565b92915050565b6000604082019050613478600083018561300d565b613485602083018461300d565b9392505050565b60006060820190506134a1600083018661300d565b6134ae602083018561300d565b6134bb6040830184612d4d565b949350505050565b60006020820190506134d8600083018461301c565b92915050565b60006134e86134f9565b90506134f4828261379c565b919050565b6000604051905090565b600067ffffffffffffffff82111561351e5761351d61382b565b5b61352782613878565b9050602081019050919050565b600067ffffffffffffffff82111561354f5761354e61382b565b5b61355882613878565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135a882613693565b91506135b383613693565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135e8576135e76137cd565b5b828201905092915050565b60006135fe82613693565b915061360983613693565b92508282101561361c5761361b6137cd565b5b828203905092915050565b600061363282613673565b9050919050565b60008115159050919050565b6000819050919050565b600061365a82613627565b9050919050565b600061366c82613627565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136b582613704565b9050919050565b60006136c782613704565b9050919050565b60006136d982613704565b9050919050565b60006136eb82613704565b9050919050565b60006136fd82613704565b9050919050565b600061370f82613716565b9050919050565b600061372182613673565b9050919050565b82818337600083830152505050565b60005b8381101561375557808201518184015260208101905061373a565b83811115613764576000848401525b50505050565b6000600282049050600182168061378257607f821691505b60208210811415613796576137956137fc565b5b50919050565b6137a582613878565b810181811067ffffffffffffffff821117156137c4576137c361382b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613af381613627565b8114613afe57600080fd5b50565b613b0a81613639565b8114613b1557600080fd5b50565b613b218161364f565b8114613b2c57600080fd5b50565b613b3881613661565b8114613b4357600080fd5b50565b613b4f81613693565b8114613b5a57600080fd5b5056fea26469706673582212207d96ebaeb478f332f3658c962f9ed8850fd5cd0779d6164b29c57fefbfa9668364736f6c63430008070033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/RenPool.sol b/contracts/RenPool.sol index 36951da..d91f4e1 100644 --- a/contracts/RenPool.sol +++ b/contracts/RenPool.sol @@ -204,9 +204,9 @@ contract RenPool { withdrawRequests[sender] = _amount; totalWithdrawalRequested += _amount; - if(totalWithdrawalRequested > bond / 2) { - _deregisterDarknode(); - } + // if(totalWithdrawalRequested > bond / 2) { + // _deregisterDarknode(); + // } emit RenWithdrawalRequested(sender, _amount); } @@ -247,6 +247,8 @@ contract RenPool { address sender = msg.sender; uint256 amount = withdrawRequests[sender]; + require(amount > 0, "RenPool: invalid amount"); + totalWithdrawalRequested -= amount; delete withdrawRequests[sender]; diff --git a/test/RenPool.test.js b/test/RenPool.test.js index bfba502..db33356 100644 --- a/test/RenPool.test.js +++ b/test/RenPool.test.js @@ -178,7 +178,7 @@ describe('RenPool contract test', function () { }); - describe('withdraw/fulfillWithdrawRequest', function () { + describe('withdraw/requestWithdraw/fulfillWithdrawRequest', function () { [bn(1), POOL_BOND.sub(1)].forEach(amount => { it('should withdraw properly', async function () { @@ -222,6 +222,39 @@ describe('RenPool contract test', function () { expect(await renPool.totalPooled()).to.equal(0); }); + [bn(1), POOL_BOND].forEach(amount => { + it('should create a withdraw request', async function () { + // Lock pool + await renToken.connect(bob).approve(renPool.address, POOL_BOND); + await renPool.connect(bob).deposit(POOL_BOND); + expect(await renPool.isLocked()).to.be.true; + + // Request withdraw + await renPool.connect(bob).requestWithdraw(amount); + expect(await renPool.withdrawRequests(bob.address)).to.equal(amount); + expect(await renPool.totalWithdrawalRequested()).to.equal(amount); + }); + }); + + [bn(1), POOL_BOND].forEach(amount => { + it('should cancel a withdraw request', async function () { + // Lock pool + await renToken.connect(bob).approve(renPool.address, POOL_BOND); + await renPool.connect(bob).deposit(POOL_BOND); + expect(await renPool.isLocked()).to.be.true; + + // Request withdraw + await renPool.connect(bob).requestWithdraw(amount); + expect(await renPool.withdrawRequests(bob.address)).to.equal(amount); + expect(await renPool.totalWithdrawalRequested()).to.equal(amount); + + // Cancel withdraw request + await renPool.connect(bob).cancelWithdrawRequest(); + expect(await renPool.withdrawRequests(bob.address)).to.equal(bn(0)); + expect(await renPool.totalWithdrawalRequested()).to.equal(bn(0)); + }); + }); + [bn(1), POOL_BOND].forEach(amount => { it('should fulfill withdraw properly', async function () { const aliceBalance = await renToken.balanceOf(alice.address); From 47ff7c31f6d1d97713471d7cac6aa0a40fbb164b Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Fri, 17 Dec 2021 18:44:14 +0100 Subject: [PATCH 04/12] adding isRegistered var --- artifacts/contracts/RenPool.sol/RenPool.json | 17 +++++++++++++++-- contracts/RenPool.sol | 10 +++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/artifacts/contracts/RenPool.sol/RenPool.json b/artifacts/contracts/RenPool.sol/RenPool.json index aa16d7d..06c380d 100644 --- a/artifacts/contracts/RenPool.sol/RenPool.json +++ b/artifacts/contracts/RenPool.sol/RenPool.json @@ -475,6 +475,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -720,8 +733,8 @@ "type": "receive" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162003f5e38038062003f5e83398181016040528101906200003791906200027b565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003bb565b6000815190506200025e8162000387565b92915050565b6000815190506200027581620003a1565b92915050565b600080600080600080600080610100898b0312156200029f576200029e62000382565b5b6000620002af8b828c016200024d565b9850506020620002c28b828c016200024d565b9750506040620002d58b828c016200024d565b9650506060620002e88b828c016200024d565b9550506080620002fb8b828c016200024d565b94505060a06200030e8b828c016200024d565b93505060c0620003218b828c016200024d565b92505060e0620003348b828c0162000264565b9150509295985092959890939650565b6000620003518262000358565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003928162000344565b81146200039e57600080fd5b50565b620003ac8162000378565b8114620003b857600080fd5b50565b613b9380620003cb6000396000f3fe6080604052600436106101fd5760003560e01c8063890265381161010d578063b6b34c67116100a0578063d693452e1161006f578063d693452e14610748578063e19e716814610773578063e39f61011461078a578063e438a77d146107b5578063e7585aea146107cc57610252565b8063b6b34c67146106b2578063b6b55f25146106dd578063b7eb85c414610706578063d5b2a01a1461071d57610252565b8063a4e2d634116100dc578063a4e2d634146105f6578063aaaa0c4b14610621578063ac3479871461064c578063b46ff3c31461068957610252565b8063890265381461055e5780638da5cb5b14610575578063901a6498146105a05780639e45e0d0146105cb57610252565b806352df49ec116101905780636ec21cc81161015f5780636ec21cc81461045357806370a082311461047e57806371bbef36146104bb578063745400c9146104f85780637ecebe001461052157610252565b806352df49ec1461039757806363ffab31146103d457806364c9ec6f146103ff5780636664e42e1461042a57610252565b80632e0f2625116101cc5780632e0f2625146102ed5780632e1a7d4d1461031857806334246f9b14610341578063372500ab1461036c57610252565b8063023c5b08146102575780631261795d1461028257806313a0ae2b1461029957806327e235e3146102b057610252565b36610252573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102489190613448565b60405180910390a2005b600080fd5b34801561026357600080fd5b5061026c6107f5565b604051610279919061302b565b60405180910390f35b34801561028e57600080fd5b5061029761081b565b005b3480156102a557600080fd5b506102ae61098c565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190612a56565b610a3d565b6040516102e49190613448565b60405180910390f35b3480156102f957600080fd5b50610302610a55565b60405161030f91906134c3565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612cd5565b610a5a565b005b34801561034d57600080fd5b50610356610d35565b60405161036391906131b2565b60405180910390f35b34801561037857600080fd5b50610381610d5b565b60405161038e9190613161565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612a56565b610d81565b6040516103cb9190613448565b60405180910390f35b3480156103e057600080fd5b506103e9610d99565b6040516103f6919061313f565b60405180910390f35b34801561040b57600080fd5b50610414610e27565b6040516104219190613448565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190612c22565b610e2d565b005b34801561045f57600080fd5b5061046861105f565b6040516104759190613448565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612a56565b611065565b6040516104b29190613448565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190612bb3565b6110ae565b6040516104ef9190613448565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190612cd5565b611211565b005b34801561052d57600080fd5b5061054860048036038101906105439190612a56565b6113eb565b6040516105559190613448565b60405180910390f35b34801561056a57600080fd5b50610573611403565b005b34801561058157600080fd5b5061058a61161f565b604051610597919061302b565b60405180910390f35b3480156105ac57600080fd5b506105b5611643565b6040516105c2919061302b565b60405180910390f35b3480156105d757600080fd5b506105e0611669565b6040516105ed9190613197565b60405180910390f35b34801561060257600080fd5b5061060b61168f565b60405161061891906130d8565b60405180910390f35b34801561062d57600080fd5b506106366116a2565b6040516106439190613448565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612b6a565b6116a8565b6040516106809190613448565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190612a56565b6117e4565b005b3480156106be57600080fd5b506106c7611bf8565b6040516106d4919061317c565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612cd5565b611c1e565b005b34801561071257600080fd5b5061071b611ece565b005b34801561072957600080fd5b506107326120c1565b60405161073f9190613448565b60405180910390f35b34801561075457600080fd5b5061075d6120c7565b60405161076a91906131cd565b60405180910390f35b34801561077f57600080fd5b506107886120ed565b005b34801561079657600080fd5b5061079f6122e6565b6040516107ac9190613448565b60405180910390f35b3480156107c157600080fd5b506107ca6122ec565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612a83565b6123dc565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a2906133c8565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610918573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109819190613448565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a09919061302b565b600060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b50505050565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613428565b60405180910390fd5b600081118015610af65750828110155b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613348565b60405180910390fd5b600960009054906101000a900460ff1615610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906133a8565b60405180910390fd5b8260056000828254610b9791906135f3565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bed91906135f3565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c519291906130af565b602060405180830381600087803b158015610c6b57600080fd5b505af1158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca39190612ae3565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906132c8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d289190613448565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610da69061376a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd29061376a565b8015610e1f5780601f10610df457610100808354040283529160200191610e1f565b820191906000526020600020905b815481529060010190602001808311610e0257829003601f168201915b505050505081565b60045481565b60008585604051602001610e4292919061320a565b6040516020818303038152906040528051906020012090506000838583604051602001610e719392919061348c565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610ee691906131e8565b60206040518083038186803b158015610efe57600080fd5b505afa158015610f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f369190612b3d565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610f7494939291906130f3565b602060405180830381600087803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190612d02565b90506110076040518060400160405280600a81526020017f6d696e74416d6f756e7400000000000000000000000000000000000000000000815250826125a4565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161104d9190613448565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161111c9392919061323a565b602060405180830381600087803b15801561113657600080fd5b505af115801561114a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116e9190612d02565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516111fc929190613463565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613428565b60405180910390fd5b6000811180156112ad5750828110155b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613348565b60405180910390fd5b600960009054906101000a900460ff1661133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290613388565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611391919061359d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516113de9190613448565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114aa5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906132a8565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611546919061302b565b60206040518083038186803b15801561155e57600080fd5b505afa158015611572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115969190612d02565b116115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613408565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b815260040161170591906131e8565b60206040518083038186803b15801561171d57600080fd5b505afa158015611731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117559190612b10565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178d919061302b565b60206040518083038186803b1580156117a557600080fd5b505afa1580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190612d02565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613328565b60405180910390fd5b600960009054906101000a900460ff166118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690613388565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461190e919061359d565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196491906135f3565b92505081905550806006600082825461197d91906135f3565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611a2693929190613046565b602060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612ae3565b611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906132e8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b149291906130af565b602060405180830381600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190612ae3565b611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c906133e8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611beb9190613448565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906133a8565b60405180910390fd5b60008211611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613428565b60405180910390fd5b60045460055483611cc7919061359d565b1115611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90613308565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d57919061359d565b925050819055508160056000828254611d70919061359d565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611dbd9190613448565b60405180910390a26004546005541415611dda57611dd9612640565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611e3993929190613046565b602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b9190612ae3565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec1906132e8565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f55906133c8565b60405180910390fd5b600960009054906101000a900460ff16611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490613388565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161202e9291906130af565b602060405180830381600087803b15801561204857600080fd5b505af115801561205c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120809190612ae3565b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613368565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613328565b60405180910390fd5b806006600082825461218b91906135f3565b925050819055506121d16040518060400160405280600681526020017f73656e646572000000000000000000000000000000000000000000000000000081525083612689565b6122106040518060400160405280600681526020017f616d6f756e740000000000000000000000000000000000000000000000000000815250826125a4565b6122516040518060400160405280600581526020017f746f74616c0000000000000000000000000000000000000000000000000000008152506006546125a4565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516122da9190613448565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c9906132a8565b60405180910390fd5b6123da612725565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906133c8565b60405180910390fd5b600960009054906101000a900460ff166124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290613388565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b815260040161251a9392919061307d565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b5050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061259e9291906127ff565b50505050565b61263c82826040516024016125ba929190613278565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b612721828260405160240161269f92919061320a565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016127a2919061302b565b600060405180830381600087803b1580156127bc57600080fd5b505af11580156127d0573d6000803e3d6000fd5b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b82805461280b9061376a565b90600052602060002090601f01602090048101928261282d5760008555612874565b82601f1061284657803560ff1916838001178555612874565b82800160010185558215612874579182015b82811115612873578235825591602001919060010190612858565b5b5090506128819190612885565b5090565b5b8082111561289e576000816000905550600101612886565b5090565b60006128b56128b084613503565b6134de565b9050828152602081018484840111156128d1576128d0613869565b5b6128dc848285613728565b509392505050565b60006128f76128f284613534565b6134de565b90508281526020810184848401111561291357612912613869565b5b61291e848285613728565b509392505050565b60008135905061293581613aea565b92915050565b60008151905061294a81613b01565b92915050565b60008083601f8401126129665761296561385f565b5b8235905067ffffffffffffffff8111156129835761298261385a565b5b60208301915083600182028301111561299f5761299e613864565b5b9250929050565b600082601f8301126129bb576129ba61385f565b5b81356129cb8482602086016128a2565b91505092915050565b6000815190506129e381613b18565b92915050565b6000815190506129f881613b2f565b92915050565b600082601f830112612a1357612a1261385f565b5b8135612a238482602086016128e4565b91505092915050565b600081359050612a3b81613b46565b92915050565b600081519050612a5081613b46565b92915050565b600060208284031215612a6c57612a6b613873565b5b6000612a7a84828501612926565b91505092915050565b600080600060408486031215612a9c57612a9b613873565b5b6000612aaa86828701612926565b935050602084013567ffffffffffffffff811115612acb57612aca61386e565b5b612ad786828701612950565b92509250509250925092565b600060208284031215612af957612af8613873565b5b6000612b078482850161293b565b91505092915050565b600060208284031215612b2657612b25613873565b5b6000612b34848285016129d4565b91505092915050565b600060208284031215612b5357612b52613873565b5b6000612b61848285016129e9565b91505092915050565b600060208284031215612b8057612b7f613873565b5b600082013567ffffffffffffffff811115612b9e57612b9d61386e565b5b612baa848285016129fe565b91505092915050565b600080600060608486031215612bcc57612bcb613873565b5b600084013567ffffffffffffffff811115612bea57612be961386e565b5b612bf6868287016129fe565b9350506020612c0786828701612926565b9250506040612c1886828701612a2c565b9150509250925092565b600080600080600060a08688031215612c3e57612c3d613873565b5b600086013567ffffffffffffffff811115612c5c57612c5b61386e565b5b612c68888289016129fe565b9550506020612c7988828901612926565b9450506040612c8a88828901612a2c565b9350506060612c9b88828901612a2c565b925050608086013567ffffffffffffffff811115612cbc57612cbb61386e565b5b612cc8888289016129a6565b9150509295509295909350565b600060208284031215612ceb57612cea613873565b5b6000612cf984828501612a2c565b91505092915050565b600060208284031215612d1857612d17613873565b5b6000612d2684828501612a41565b91505092915050565b612d3881613627565b82525050565b612d4781613639565b82525050565b612d5681613645565b82525050565b6000612d68838561357b565b9350612d75838584613728565b612d7e83613878565b840190509392505050565b6000612d9482613565565b612d9e818561357b565b9350612dae818560208601613737565b612db781613878565b840191505092915050565b612dcb816136aa565b82525050565b612dda816136bc565b82525050565b612de9816136ce565b82525050565b612df8816136e0565b82525050565b612e07816136f2565b82525050565b6000612e1882613570565b612e22818561358c565b9350612e32818560208601613737565b612e3b81613878565b840191505092915050565b6000612e53602e8361358c565b9150612e5e82613889565b604082019050919050565b6000612e7660188361358c565b9150612e81826138d8565b602082019050919050565b6000612e9960178361358c565b9150612ea482613901565b602082019050919050565b6000612ebc601e8361358c565b9150612ec78261392a565b602082019050919050565b6000612edf60178361358c565b9150612eea82613953565b602082019050919050565b6000612f02601b8361358c565b9150612f0d8261397c565b602082019050919050565b6000612f25601d8361358c565b9150612f30826139a5565b602082019050919050565b6000612f48601b8361358c565b9150612f53826139ce565b602082019050919050565b6000612f6b60178361358c565b9150612f76826139f7565b602082019050919050565b6000612f8e60248361358c565b9150612f9982613a20565b604082019050919050565b6000612fb160168361358c565b9150612fbc82613a6f565b602082019050919050565b6000612fd4601d8361358c565b9150612fdf82613a98565b602082019050919050565b6000612ff760178361358c565b915061300282613ac1565b602082019050919050565b61301681613693565b82525050565b6130258161369d565b82525050565b60006020820190506130406000830184612d2f565b92915050565b600060608201905061305b6000830186612d2f565b6130686020830185612d2f565b613075604083018461300d565b949350505050565b60006040820190506130926000830186612d2f565b81810360208301526130a5818486612d5c565b9050949350505050565b60006040820190506130c46000830185612d2f565b6130d1602083018461300d565b9392505050565b60006020820190506130ed6000830184612d3e565b92915050565b60006080820190506131086000830187612d4d565b613115602083018661300d565b6131226040830185612d4d565b81810360608301526131348184612d89565b905095945050505050565b600060208201905081810360008301526131598184612d89565b905092915050565b60006020820190506131766000830184612dc2565b92915050565b60006020820190506131916000830184612dd1565b92915050565b60006020820190506131ac6000830184612de0565b92915050565b60006020820190506131c76000830184612def565b92915050565b60006020820190506131e26000830184612dfe565b92915050565b600060208201905081810360008301526132028184612e0d565b905092915050565b600060408201905081810360008301526132248185612e0d565b90506132336020830184612d2f565b9392505050565b600060608201905081810360008301526132548186612e0d565b90506132636020830185612d2f565b613270604083018461300d565b949350505050565b600060408201905081810360008301526132928185612e0d565b90506132a1602083018461300d565b9392505050565b600060208201905081810360008301526132c181612e46565b9050919050565b600060208201905081810360008301526132e181612e69565b9050919050565b6000602082019050818103600083015261330181612e8c565b9050919050565b6000602082019050818103600083015261332181612eaf565b9050919050565b6000602082019050818103600083015261334181612ed2565b9050919050565b6000602082019050818103600083015261336181612ef5565b9050919050565b6000602082019050818103600083015261338181612f18565b9050919050565b600060208201905081810360008301526133a181612f3b565b9050919050565b600060208201905081810360008301526133c181612f5e565b9050919050565b600060208201905081810360008301526133e181612f81565b9050919050565b6000602082019050818103600083015261340181612fa4565b9050919050565b6000602082019050818103600083015261342181612fc7565b9050919050565b6000602082019050818103600083015261344181612fea565b9050919050565b600060208201905061345d600083018461300d565b92915050565b6000604082019050613478600083018561300d565b613485602083018461300d565b9392505050565b60006060820190506134a1600083018661300d565b6134ae602083018561300d565b6134bb6040830184612d4d565b949350505050565b60006020820190506134d8600083018461301c565b92915050565b60006134e86134f9565b90506134f4828261379c565b919050565b6000604051905090565b600067ffffffffffffffff82111561351e5761351d61382b565b5b61352782613878565b9050602081019050919050565b600067ffffffffffffffff82111561354f5761354e61382b565b5b61355882613878565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135a882613693565b91506135b383613693565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135e8576135e76137cd565b5b828201905092915050565b60006135fe82613693565b915061360983613693565b92508282101561361c5761361b6137cd565b5b828203905092915050565b600061363282613673565b9050919050565b60008115159050919050565b6000819050919050565b600061365a82613627565b9050919050565b600061366c82613627565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136b582613704565b9050919050565b60006136c782613704565b9050919050565b60006136d982613704565b9050919050565b60006136eb82613704565b9050919050565b60006136fd82613704565b9050919050565b600061370f82613716565b9050919050565b600061372182613673565b9050919050565b82818337600083830152505050565b60005b8381101561375557808201518184015260208101905061373a565b83811115613764576000848401525b50505050565b6000600282049050600182168061378257607f821691505b60208210811415613796576137956137fc565b5b50919050565b6137a582613878565b810181811067ffffffffffffffff821117156137c4576137c361382b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613af381613627565b8114613afe57600080fd5b50565b613b0a81613639565b8114613b1557600080fd5b50565b613b218161364f565b8114613b2c57600080fd5b50565b613b3881613661565b8114613b4357600080fd5b50565b613b4f81613693565b8114613b5a57600080fd5b5056fea26469706673582212207d96ebaeb478f332f3658c962f9ed8850fd5cd0779d6164b29c57fefbfa9668364736f6c63430008070033", - "deployedBytecode": "0x6080604052600436106101fd5760003560e01c8063890265381161010d578063b6b34c67116100a0578063d693452e1161006f578063d693452e14610748578063e19e716814610773578063e39f61011461078a578063e438a77d146107b5578063e7585aea146107cc57610252565b8063b6b34c67146106b2578063b6b55f25146106dd578063b7eb85c414610706578063d5b2a01a1461071d57610252565b8063a4e2d634116100dc578063a4e2d634146105f6578063aaaa0c4b14610621578063ac3479871461064c578063b46ff3c31461068957610252565b8063890265381461055e5780638da5cb5b14610575578063901a6498146105a05780639e45e0d0146105cb57610252565b806352df49ec116101905780636ec21cc81161015f5780636ec21cc81461045357806370a082311461047e57806371bbef36146104bb578063745400c9146104f85780637ecebe001461052157610252565b806352df49ec1461039757806363ffab31146103d457806364c9ec6f146103ff5780636664e42e1461042a57610252565b80632e0f2625116101cc5780632e0f2625146102ed5780632e1a7d4d1461031857806334246f9b14610341578063372500ab1461036c57610252565b8063023c5b08146102575780631261795d1461028257806313a0ae2b1461029957806327e235e3146102b057610252565b36610252573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102489190613448565b60405180910390a2005b600080fd5b34801561026357600080fd5b5061026c6107f5565b604051610279919061302b565b60405180910390f35b34801561028e57600080fd5b5061029761081b565b005b3480156102a557600080fd5b506102ae61098c565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190612a56565b610a3d565b6040516102e49190613448565b60405180910390f35b3480156102f957600080fd5b50610302610a55565b60405161030f91906134c3565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612cd5565b610a5a565b005b34801561034d57600080fd5b50610356610d35565b60405161036391906131b2565b60405180910390f35b34801561037857600080fd5b50610381610d5b565b60405161038e9190613161565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612a56565b610d81565b6040516103cb9190613448565b60405180910390f35b3480156103e057600080fd5b506103e9610d99565b6040516103f6919061313f565b60405180910390f35b34801561040b57600080fd5b50610414610e27565b6040516104219190613448565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190612c22565b610e2d565b005b34801561045f57600080fd5b5061046861105f565b6040516104759190613448565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612a56565b611065565b6040516104b29190613448565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190612bb3565b6110ae565b6040516104ef9190613448565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190612cd5565b611211565b005b34801561052d57600080fd5b5061054860048036038101906105439190612a56565b6113eb565b6040516105559190613448565b60405180910390f35b34801561056a57600080fd5b50610573611403565b005b34801561058157600080fd5b5061058a61161f565b604051610597919061302b565b60405180910390f35b3480156105ac57600080fd5b506105b5611643565b6040516105c2919061302b565b60405180910390f35b3480156105d757600080fd5b506105e0611669565b6040516105ed9190613197565b60405180910390f35b34801561060257600080fd5b5061060b61168f565b60405161061891906130d8565b60405180910390f35b34801561062d57600080fd5b506106366116a2565b6040516106439190613448565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612b6a565b6116a8565b6040516106809190613448565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190612a56565b6117e4565b005b3480156106be57600080fd5b506106c7611bf8565b6040516106d4919061317c565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612cd5565b611c1e565b005b34801561071257600080fd5b5061071b611ece565b005b34801561072957600080fd5b506107326120c1565b60405161073f9190613448565b60405180910390f35b34801561075457600080fd5b5061075d6120c7565b60405161076a91906131cd565b60405180910390f35b34801561077f57600080fd5b506107886120ed565b005b34801561079657600080fd5b5061079f6122e6565b6040516107ac9190613448565b60405180910390f35b3480156107c157600080fd5b506107ca6122ec565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612a83565b6123dc565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a2906133c8565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610918573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109819190613448565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a09919061302b565b600060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b50505050565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613428565b60405180910390fd5b600081118015610af65750828110155b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613348565b60405180910390fd5b600960009054906101000a900460ff1615610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906133a8565b60405180910390fd5b8260056000828254610b9791906135f3565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bed91906135f3565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c519291906130af565b602060405180830381600087803b158015610c6b57600080fd5b505af1158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca39190612ae3565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906132c8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d289190613448565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610da69061376a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd29061376a565b8015610e1f5780601f10610df457610100808354040283529160200191610e1f565b820191906000526020600020905b815481529060010190602001808311610e0257829003601f168201915b505050505081565b60045481565b60008585604051602001610e4292919061320a565b6040516020818303038152906040528051906020012090506000838583604051602001610e719392919061348c565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610ee691906131e8565b60206040518083038186803b158015610efe57600080fd5b505afa158015610f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f369190612b3d565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610f7494939291906130f3565b602060405180830381600087803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190612d02565b90506110076040518060400160405280600a81526020017f6d696e74416d6f756e7400000000000000000000000000000000000000000000815250826125a4565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161104d9190613448565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161111c9392919061323a565b602060405180830381600087803b15801561113657600080fd5b505af115801561114a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116e9190612d02565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516111fc929190613463565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613428565b60405180910390fd5b6000811180156112ad5750828110155b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613348565b60405180910390fd5b600960009054906101000a900460ff1661133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290613388565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611391919061359d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516113de9190613448565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114aa5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906132a8565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611546919061302b565b60206040518083038186803b15801561155e57600080fd5b505afa158015611572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115969190612d02565b116115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613408565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b815260040161170591906131e8565b60206040518083038186803b15801561171d57600080fd5b505afa158015611731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117559190612b10565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178d919061302b565b60206040518083038186803b1580156117a557600080fd5b505afa1580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190612d02565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613328565b60405180910390fd5b600960009054906101000a900460ff166118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690613388565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461190e919061359d565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196491906135f3565b92505081905550806006600082825461197d91906135f3565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611a2693929190613046565b602060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612ae3565b611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906132e8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b149291906130af565b602060405180830381600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190612ae3565b611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c906133e8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611beb9190613448565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906133a8565b60405180910390fd5b60008211611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613428565b60405180910390fd5b60045460055483611cc7919061359d565b1115611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90613308565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d57919061359d565b925050819055508160056000828254611d70919061359d565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611dbd9190613448565b60405180910390a26004546005541415611dda57611dd9612640565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611e3993929190613046565b602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b9190612ae3565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec1906132e8565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f55906133c8565b60405180910390fd5b600960009054906101000a900460ff16611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490613388565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161202e9291906130af565b602060405180830381600087803b15801561204857600080fd5b505af115801561205c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120809190612ae3565b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690613368565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613328565b60405180910390fd5b806006600082825461218b91906135f3565b925050819055506121d16040518060400160405280600681526020017f73656e646572000000000000000000000000000000000000000000000000000081525083612689565b6122106040518060400160405280600681526020017f616d6f756e740000000000000000000000000000000000000000000000000000815250826125a4565b6122516040518060400160405280600581526020017f746f74616c0000000000000000000000000000000000000000000000000000008152506006546125a4565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516122da9190613448565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c9906132a8565b60405180910390fd5b6123da612725565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906133c8565b60405180910390fd5b600960009054906101000a900460ff166124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290613388565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b815260040161251a9392919061307d565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b5050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061259e9291906127ff565b50505050565b61263c82826040516024016125ba929190613278565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b612721828260405160240161269f92919061320a565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127d6565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016127a2919061302b565b600060405180830381600087803b1580156127bc57600080fd5b505af11580156127d0573d6000803e3d6000fd5b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b82805461280b9061376a565b90600052602060002090601f01602090048101928261282d5760008555612874565b82601f1061284657803560ff1916838001178555612874565b82800160010185558215612874579182015b82811115612873578235825591602001919060010190612858565b5b5090506128819190612885565b5090565b5b8082111561289e576000816000905550600101612886565b5090565b60006128b56128b084613503565b6134de565b9050828152602081018484840111156128d1576128d0613869565b5b6128dc848285613728565b509392505050565b60006128f76128f284613534565b6134de565b90508281526020810184848401111561291357612912613869565b5b61291e848285613728565b509392505050565b60008135905061293581613aea565b92915050565b60008151905061294a81613b01565b92915050565b60008083601f8401126129665761296561385f565b5b8235905067ffffffffffffffff8111156129835761298261385a565b5b60208301915083600182028301111561299f5761299e613864565b5b9250929050565b600082601f8301126129bb576129ba61385f565b5b81356129cb8482602086016128a2565b91505092915050565b6000815190506129e381613b18565b92915050565b6000815190506129f881613b2f565b92915050565b600082601f830112612a1357612a1261385f565b5b8135612a238482602086016128e4565b91505092915050565b600081359050612a3b81613b46565b92915050565b600081519050612a5081613b46565b92915050565b600060208284031215612a6c57612a6b613873565b5b6000612a7a84828501612926565b91505092915050565b600080600060408486031215612a9c57612a9b613873565b5b6000612aaa86828701612926565b935050602084013567ffffffffffffffff811115612acb57612aca61386e565b5b612ad786828701612950565b92509250509250925092565b600060208284031215612af957612af8613873565b5b6000612b078482850161293b565b91505092915050565b600060208284031215612b2657612b25613873565b5b6000612b34848285016129d4565b91505092915050565b600060208284031215612b5357612b52613873565b5b6000612b61848285016129e9565b91505092915050565b600060208284031215612b8057612b7f613873565b5b600082013567ffffffffffffffff811115612b9e57612b9d61386e565b5b612baa848285016129fe565b91505092915050565b600080600060608486031215612bcc57612bcb613873565b5b600084013567ffffffffffffffff811115612bea57612be961386e565b5b612bf6868287016129fe565b9350506020612c0786828701612926565b9250506040612c1886828701612a2c565b9150509250925092565b600080600080600060a08688031215612c3e57612c3d613873565b5b600086013567ffffffffffffffff811115612c5c57612c5b61386e565b5b612c68888289016129fe565b9550506020612c7988828901612926565b9450506040612c8a88828901612a2c565b9350506060612c9b88828901612a2c565b925050608086013567ffffffffffffffff811115612cbc57612cbb61386e565b5b612cc8888289016129a6565b9150509295509295909350565b600060208284031215612ceb57612cea613873565b5b6000612cf984828501612a2c565b91505092915050565b600060208284031215612d1857612d17613873565b5b6000612d2684828501612a41565b91505092915050565b612d3881613627565b82525050565b612d4781613639565b82525050565b612d5681613645565b82525050565b6000612d68838561357b565b9350612d75838584613728565b612d7e83613878565b840190509392505050565b6000612d9482613565565b612d9e818561357b565b9350612dae818560208601613737565b612db781613878565b840191505092915050565b612dcb816136aa565b82525050565b612dda816136bc565b82525050565b612de9816136ce565b82525050565b612df8816136e0565b82525050565b612e07816136f2565b82525050565b6000612e1882613570565b612e22818561358c565b9350612e32818560208601613737565b612e3b81613878565b840191505092915050565b6000612e53602e8361358c565b9150612e5e82613889565b604082019050919050565b6000612e7660188361358c565b9150612e81826138d8565b602082019050919050565b6000612e9960178361358c565b9150612ea482613901565b602082019050919050565b6000612ebc601e8361358c565b9150612ec78261392a565b602082019050919050565b6000612edf60178361358c565b9150612eea82613953565b602082019050919050565b6000612f02601b8361358c565b9150612f0d8261397c565b602082019050919050565b6000612f25601d8361358c565b9150612f30826139a5565b602082019050919050565b6000612f48601b8361358c565b9150612f53826139ce565b602082019050919050565b6000612f6b60178361358c565b9150612f76826139f7565b602082019050919050565b6000612f8e60248361358c565b9150612f9982613a20565b604082019050919050565b6000612fb160168361358c565b9150612fbc82613a6f565b602082019050919050565b6000612fd4601d8361358c565b9150612fdf82613a98565b602082019050919050565b6000612ff760178361358c565b915061300282613ac1565b602082019050919050565b61301681613693565b82525050565b6130258161369d565b82525050565b60006020820190506130406000830184612d2f565b92915050565b600060608201905061305b6000830186612d2f565b6130686020830185612d2f565b613075604083018461300d565b949350505050565b60006040820190506130926000830186612d2f565b81810360208301526130a5818486612d5c565b9050949350505050565b60006040820190506130c46000830185612d2f565b6130d1602083018461300d565b9392505050565b60006020820190506130ed6000830184612d3e565b92915050565b60006080820190506131086000830187612d4d565b613115602083018661300d565b6131226040830185612d4d565b81810360608301526131348184612d89565b905095945050505050565b600060208201905081810360008301526131598184612d89565b905092915050565b60006020820190506131766000830184612dc2565b92915050565b60006020820190506131916000830184612dd1565b92915050565b60006020820190506131ac6000830184612de0565b92915050565b60006020820190506131c76000830184612def565b92915050565b60006020820190506131e26000830184612dfe565b92915050565b600060208201905081810360008301526132028184612e0d565b905092915050565b600060408201905081810360008301526132248185612e0d565b90506132336020830184612d2f565b9392505050565b600060608201905081810360008301526132548186612e0d565b90506132636020830185612d2f565b613270604083018461300d565b949350505050565b600060408201905081810360008301526132928185612e0d565b90506132a1602083018461300d565b9392505050565b600060208201905081810360008301526132c181612e46565b9050919050565b600060208201905081810360008301526132e181612e69565b9050919050565b6000602082019050818103600083015261330181612e8c565b9050919050565b6000602082019050818103600083015261332181612eaf565b9050919050565b6000602082019050818103600083015261334181612ed2565b9050919050565b6000602082019050818103600083015261336181612ef5565b9050919050565b6000602082019050818103600083015261338181612f18565b9050919050565b600060208201905081810360008301526133a181612f3b565b9050919050565b600060208201905081810360008301526133c181612f5e565b9050919050565b600060208201905081810360008301526133e181612f81565b9050919050565b6000602082019050818103600083015261340181612fa4565b9050919050565b6000602082019050818103600083015261342181612fc7565b9050919050565b6000602082019050818103600083015261344181612fea565b9050919050565b600060208201905061345d600083018461300d565b92915050565b6000604082019050613478600083018561300d565b613485602083018461300d565b9392505050565b60006060820190506134a1600083018661300d565b6134ae602083018561300d565b6134bb6040830184612d4d565b949350505050565b60006020820190506134d8600083018461301c565b92915050565b60006134e86134f9565b90506134f4828261379c565b919050565b6000604051905090565b600067ffffffffffffffff82111561351e5761351d61382b565b5b61352782613878565b9050602081019050919050565b600067ffffffffffffffff82111561354f5761354e61382b565b5b61355882613878565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135a882613693565b91506135b383613693565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135e8576135e76137cd565b5b828201905092915050565b60006135fe82613693565b915061360983613693565b92508282101561361c5761361b6137cd565b5b828203905092915050565b600061363282613673565b9050919050565b60008115159050919050565b6000819050919050565b600061365a82613627565b9050919050565b600061366c82613627565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136b582613704565b9050919050565b60006136c782613704565b9050919050565b60006136d982613704565b9050919050565b60006136eb82613704565b9050919050565b60006136fd82613704565b9050919050565b600061370f82613716565b9050919050565b600061372182613673565b9050919050565b82818337600083830152505050565b60005b8381101561375557808201518184015260208101905061373a565b83811115613764576000848401525b50505050565b6000600282049050600182168061378257607f821691505b60208210811415613796576137956137fc565b5b50919050565b6137a582613878565b810181811067ffffffffffffffff821117156137c4576137c361382b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613af381613627565b8114613afe57600080fd5b50565b613b0a81613639565b8114613b1557600080fd5b50565b613b218161364f565b8114613b2c57600080fd5b50565b613b3881613661565b8114613b4357600080fd5b50565b613b4f81613693565b8114613b5a57600080fd5b5056fea26469706673582212207d96ebaeb478f332f3658c962f9ed8850fd5cd0779d6164b29c57fefbfa9668364736f6c63430008070033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162003f3638038062003f36833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613b5080620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161025391906133a5565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f88565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613035565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a91906133a5565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b6040516103459190613420565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b604051610399919061310f565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c491906130be565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b60405161040191906133a5565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c919061309c565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b60405161045791906133a5565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab91906133a5565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e891906133a5565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b60405161052591906133a5565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b91906133a5565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f88565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f88565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130f4565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613035565b60405180910390f35b34801561066357600080fd5b5061066c611724565b60405161067991906133a5565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b691906133a5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130d9565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b60405161077591906133a5565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a0919061312a565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e291906133a5565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613325565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b791906133a5565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f88565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613385565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906132a5565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613305565b60405180910390fd5b8260056000828254610be09190613581565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c369190613581565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a92919061300c565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613225565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d7191906133a5565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136f8565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613167565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133e9565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613145565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd9493929190613050565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161109691906133a5565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613197565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516112459291906133c0565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613385565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c906132a5565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132e5565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134fa565b92505081905550600960019054906101000a900460ff16801561140c575060026004546114079190613550565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c0825908460405161146091906133a5565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613205565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f88565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613365565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613145565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f88565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613285565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132e5565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134fa565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e69190613581565b9250508190555080600660008282546119ff9190613581565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612fa3565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613245565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b9692919061300c565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613345565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d91906133a5565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613305565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613385565b60405180910390fd5b60045460055483611d4991906134fa565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613265565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134fa565b925050819055508160056000828254611df291906134fa565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f91906133a5565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612fa3565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613245565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613325565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132e5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b092919061300c565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612138906132c5565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613285565b60405180910390fd5b806006600082825461220d9190613581565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d91906133a5565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613205565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613325565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132e5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fda565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131d5565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f88565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136f8565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d84613460565b61343b565b90508281526020810184848401111561282e5761282d613826565b5b6128398482856136b6565b509392505050565b600061285461284f84613491565b61343b565b9050828152602081018484840111156128705761286f613826565b5b61287b8482856136b6565b509392505050565b60008135905061289281613aa7565b92915050565b6000815190506128a781613abe565b92915050565b60008083601f8401126128c3576128c261381c565b5b8235905067ffffffffffffffff8111156128e0576128df613817565b5b6020830191508360018202830111156128fc576128fb613821565b5b9250929050565b600082601f8301126129185761291761381c565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613ad5565b92915050565b60008151905061295581613aec565b92915050565b600082601f8301126129705761296f61381c565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613b03565b92915050565b6000815190506129ad81613b03565b92915050565b6000602082840312156129c9576129c8613830565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f8613830565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a2761382b565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a55613830565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a82613830565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf613830565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc613830565b5b600082013567ffffffffffffffff811115612afb57612afa61382b565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b28613830565b5b600084013567ffffffffffffffff811115612b4757612b4661382b565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a613830565b5b600086013567ffffffffffffffff811115612bb957612bb861382b565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c1861382b565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c47613830565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c74613830565b5b6000612c838482850161299e565b91505092915050565b612c95816135b5565b82525050565b612ca4816135c7565b82525050565b612cb3816135d3565b82525050565b6000612cc583856134d8565b9350612cd28385846136b6565b612cdb83613835565b840190509392505050565b6000612cf1826134c2565b612cfb81856134d8565b9350612d0b8185602086016136c5565b612d1481613835565b840191505092915050565b612d2881613638565b82525050565b612d378161364a565b82525050565b612d468161365c565b82525050565b612d558161366e565b82525050565b612d6481613680565b82525050565b6000612d75826134cd565b612d7f81856134e9565b9350612d8f8185602086016136c5565b612d9881613835565b840191505092915050565b6000612db0602e836134e9565b9150612dbb82613846565b604082019050919050565b6000612dd36018836134e9565b9150612dde82613895565b602082019050919050565b6000612df66017836134e9565b9150612e01826138be565b602082019050919050565b6000612e19601e836134e9565b9150612e24826138e7565b602082019050919050565b6000612e3c6017836134e9565b9150612e4782613910565b602082019050919050565b6000612e5f601b836134e9565b9150612e6a82613939565b602082019050919050565b6000612e82601d836134e9565b9150612e8d82613962565b602082019050919050565b6000612ea5601b836134e9565b9150612eb08261398b565b602082019050919050565b6000612ec86017836134e9565b9150612ed3826139b4565b602082019050919050565b6000612eeb6024836134e9565b9150612ef6826139dd565b604082019050919050565b6000612f0e6016836134e9565b9150612f1982613a2c565b602082019050919050565b6000612f31601d836134e9565b9150612f3c82613a55565b602082019050919050565b6000612f546017836134e9565b9150612f5f82613a7e565b602082019050919050565b612f7381613621565b82525050565b612f828161362b565b82525050565b6000602082019050612f9d6000830184612c8c565b92915050565b6000606082019050612fb86000830186612c8c565b612fc56020830185612c8c565b612fd26040830184612f6a565b949350505050565b6000604082019050612fef6000830186612c8c565b8181036020830152613002818486612cb9565b9050949350505050565b60006040820190506130216000830185612c8c565b61302e6020830184612f6a565b9392505050565b600060208201905061304a6000830184612c9b565b92915050565b60006080820190506130656000830187612caa565b6130726020830186612f6a565b61307f6040830185612caa565b81810360608301526130918184612ce6565b905095945050505050565b600060208201905081810360008301526130b68184612ce6565b905092915050565b60006020820190506130d36000830184612d1f565b92915050565b60006020820190506130ee6000830184612d2e565b92915050565b60006020820190506131096000830184612d3d565b92915050565b60006020820190506131246000830184612d4c565b92915050565b600060208201905061313f6000830184612d5b565b92915050565b6000602082019050818103600083015261315f8184612d6a565b905092915050565b600060408201905081810360008301526131818185612d6a565b90506131906020830184612c8c565b9392505050565b600060608201905081810360008301526131b18186612d6a565b90506131c06020830185612c8c565b6131cd6040830184612f6a565b949350505050565b600060408201905081810360008301526131ef8185612d6a565b90506131fe6020830184612f6a565b9392505050565b6000602082019050818103600083015261321e81612da3565b9050919050565b6000602082019050818103600083015261323e81612dc6565b9050919050565b6000602082019050818103600083015261325e81612de9565b9050919050565b6000602082019050818103600083015261327e81612e0c565b9050919050565b6000602082019050818103600083015261329e81612e2f565b9050919050565b600060208201905081810360008301526132be81612e52565b9050919050565b600060208201905081810360008301526132de81612e75565b9050919050565b600060208201905081810360008301526132fe81612e98565b9050919050565b6000602082019050818103600083015261331e81612ebb565b9050919050565b6000602082019050818103600083015261333e81612ede565b9050919050565b6000602082019050818103600083015261335e81612f01565b9050919050565b6000602082019050818103600083015261337e81612f24565b9050919050565b6000602082019050818103600083015261339e81612f47565b9050919050565b60006020820190506133ba6000830184612f6a565b92915050565b60006040820190506133d56000830185612f6a565b6133e26020830184612f6a565b9392505050565b60006060820190506133fe6000830186612f6a565b61340b6020830185612f6a565b6134186040830184612caa565b949350505050565b60006020820190506134356000830184612f79565b92915050565b6000613445613456565b9050613451828261372a565b919050565b6000604051905090565b600067ffffffffffffffff82111561347b5761347a6137e8565b5b61348482613835565b9050602081019050919050565b600067ffffffffffffffff8211156134ac576134ab6137e8565b5b6134b582613835565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061350582613621565b915061351083613621565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135455761354461375b565b5b828201905092915050565b600061355b82613621565b915061356683613621565b9250826135765761357561378a565b5b828204905092915050565b600061358c82613621565b915061359783613621565b9250828210156135aa576135a961375b565b5b828203905092915050565b60006135c082613601565b9050919050565b60008115159050919050565b6000819050919050565b60006135e8826135b5565b9050919050565b60006135fa826135b5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061364382613692565b9050919050565b600061365582613692565b9050919050565b600061366782613692565b9050919050565b600061367982613692565b9050919050565b600061368b82613692565b9050919050565b600061369d826136a4565b9050919050565b60006136af82613601565b9050919050565b82818337600083830152505050565b60005b838110156136e35780820151818401526020810190506136c8565b838111156136f2576000848401525b50505050565b6000600282049050600182168061371057607f821691505b60208210811415613724576137236137b9565b5b50919050565b61373382613835565b810181811067ffffffffffffffff82111715613752576137516137e8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613ab0816135b5565b8114613abb57600080fd5b50565b613ac7816135c7565b8114613ad257600080fd5b50565b613ade816135dd565b8114613ae957600080fd5b50565b613af5816135ef565b8114613b0057600080fd5b50565b613b0c81613621565b8114613b1757600080fd5b5056fea2646970667358221220772cadf8e84a0e029604600864dde34b22ee63843b25635e36e3306096507bb964736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161025391906133a5565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f88565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613035565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a91906133a5565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b6040516103459190613420565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b604051610399919061310f565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c491906130be565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b60405161040191906133a5565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c919061309c565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b60405161045791906133a5565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab91906133a5565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e891906133a5565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b60405161052591906133a5565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b91906133a5565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f88565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f88565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130f4565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613035565b60405180910390f35b34801561066357600080fd5b5061066c611724565b60405161067991906133a5565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b691906133a5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130d9565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b60405161077591906133a5565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a0919061312a565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e291906133a5565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613325565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b791906133a5565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f88565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613385565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906132a5565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613305565b60405180910390fd5b8260056000828254610be09190613581565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c369190613581565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a92919061300c565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613225565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d7191906133a5565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136f8565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613167565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133e9565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613145565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd9493929190613050565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161109691906133a5565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613197565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516112459291906133c0565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613385565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c906132a5565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132e5565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134fa565b92505081905550600960019054906101000a900460ff16801561140c575060026004546114079190613550565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c0825908460405161146091906133a5565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613205565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f88565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613365565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613145565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f88565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613285565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132e5565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134fa565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e69190613581565b9250508190555080600660008282546119ff9190613581565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612fa3565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613245565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b9692919061300c565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613345565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d91906133a5565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613305565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613385565b60405180910390fd5b60045460055483611d4991906134fa565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613265565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134fa565b925050819055508160056000828254611df291906134fa565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f91906133a5565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612fa3565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613245565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613325565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132e5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b092919061300c565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612138906132c5565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613285565b60405180910390fd5b806006600082825461220d9190613581565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d91906133a5565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613205565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613325565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132e5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fda565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131d5565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f88565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136f8565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d84613460565b61343b565b90508281526020810184848401111561282e5761282d613826565b5b6128398482856136b6565b509392505050565b600061285461284f84613491565b61343b565b9050828152602081018484840111156128705761286f613826565b5b61287b8482856136b6565b509392505050565b60008135905061289281613aa7565b92915050565b6000815190506128a781613abe565b92915050565b60008083601f8401126128c3576128c261381c565b5b8235905067ffffffffffffffff8111156128e0576128df613817565b5b6020830191508360018202830111156128fc576128fb613821565b5b9250929050565b600082601f8301126129185761291761381c565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613ad5565b92915050565b60008151905061295581613aec565b92915050565b600082601f8301126129705761296f61381c565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613b03565b92915050565b6000815190506129ad81613b03565b92915050565b6000602082840312156129c9576129c8613830565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f8613830565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a2761382b565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a55613830565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a82613830565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf613830565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc613830565b5b600082013567ffffffffffffffff811115612afb57612afa61382b565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b28613830565b5b600084013567ffffffffffffffff811115612b4757612b4661382b565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a613830565b5b600086013567ffffffffffffffff811115612bb957612bb861382b565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c1861382b565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c47613830565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c74613830565b5b6000612c838482850161299e565b91505092915050565b612c95816135b5565b82525050565b612ca4816135c7565b82525050565b612cb3816135d3565b82525050565b6000612cc583856134d8565b9350612cd28385846136b6565b612cdb83613835565b840190509392505050565b6000612cf1826134c2565b612cfb81856134d8565b9350612d0b8185602086016136c5565b612d1481613835565b840191505092915050565b612d2881613638565b82525050565b612d378161364a565b82525050565b612d468161365c565b82525050565b612d558161366e565b82525050565b612d6481613680565b82525050565b6000612d75826134cd565b612d7f81856134e9565b9350612d8f8185602086016136c5565b612d9881613835565b840191505092915050565b6000612db0602e836134e9565b9150612dbb82613846565b604082019050919050565b6000612dd36018836134e9565b9150612dde82613895565b602082019050919050565b6000612df66017836134e9565b9150612e01826138be565b602082019050919050565b6000612e19601e836134e9565b9150612e24826138e7565b602082019050919050565b6000612e3c6017836134e9565b9150612e4782613910565b602082019050919050565b6000612e5f601b836134e9565b9150612e6a82613939565b602082019050919050565b6000612e82601d836134e9565b9150612e8d82613962565b602082019050919050565b6000612ea5601b836134e9565b9150612eb08261398b565b602082019050919050565b6000612ec86017836134e9565b9150612ed3826139b4565b602082019050919050565b6000612eeb6024836134e9565b9150612ef6826139dd565b604082019050919050565b6000612f0e6016836134e9565b9150612f1982613a2c565b602082019050919050565b6000612f31601d836134e9565b9150612f3c82613a55565b602082019050919050565b6000612f546017836134e9565b9150612f5f82613a7e565b602082019050919050565b612f7381613621565b82525050565b612f828161362b565b82525050565b6000602082019050612f9d6000830184612c8c565b92915050565b6000606082019050612fb86000830186612c8c565b612fc56020830185612c8c565b612fd26040830184612f6a565b949350505050565b6000604082019050612fef6000830186612c8c565b8181036020830152613002818486612cb9565b9050949350505050565b60006040820190506130216000830185612c8c565b61302e6020830184612f6a565b9392505050565b600060208201905061304a6000830184612c9b565b92915050565b60006080820190506130656000830187612caa565b6130726020830186612f6a565b61307f6040830185612caa565b81810360608301526130918184612ce6565b905095945050505050565b600060208201905081810360008301526130b68184612ce6565b905092915050565b60006020820190506130d36000830184612d1f565b92915050565b60006020820190506130ee6000830184612d2e565b92915050565b60006020820190506131096000830184612d3d565b92915050565b60006020820190506131246000830184612d4c565b92915050565b600060208201905061313f6000830184612d5b565b92915050565b6000602082019050818103600083015261315f8184612d6a565b905092915050565b600060408201905081810360008301526131818185612d6a565b90506131906020830184612c8c565b9392505050565b600060608201905081810360008301526131b18186612d6a565b90506131c06020830185612c8c565b6131cd6040830184612f6a565b949350505050565b600060408201905081810360008301526131ef8185612d6a565b90506131fe6020830184612f6a565b9392505050565b6000602082019050818103600083015261321e81612da3565b9050919050565b6000602082019050818103600083015261323e81612dc6565b9050919050565b6000602082019050818103600083015261325e81612de9565b9050919050565b6000602082019050818103600083015261327e81612e0c565b9050919050565b6000602082019050818103600083015261329e81612e2f565b9050919050565b600060208201905081810360008301526132be81612e52565b9050919050565b600060208201905081810360008301526132de81612e75565b9050919050565b600060208201905081810360008301526132fe81612e98565b9050919050565b6000602082019050818103600083015261331e81612ebb565b9050919050565b6000602082019050818103600083015261333e81612ede565b9050919050565b6000602082019050818103600083015261335e81612f01565b9050919050565b6000602082019050818103600083015261337e81612f24565b9050919050565b6000602082019050818103600083015261339e81612f47565b9050919050565b60006020820190506133ba6000830184612f6a565b92915050565b60006040820190506133d56000830185612f6a565b6133e26020830184612f6a565b9392505050565b60006060820190506133fe6000830186612f6a565b61340b6020830185612f6a565b6134186040830184612caa565b949350505050565b60006020820190506134356000830184612f79565b92915050565b6000613445613456565b9050613451828261372a565b919050565b6000604051905090565b600067ffffffffffffffff82111561347b5761347a6137e8565b5b61348482613835565b9050602081019050919050565b600067ffffffffffffffff8211156134ac576134ab6137e8565b5b6134b582613835565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061350582613621565b915061351083613621565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135455761354461375b565b5b828201905092915050565b600061355b82613621565b915061356683613621565b9250826135765761357561378a565b5b828204905092915050565b600061358c82613621565b915061359783613621565b9250828210156135aa576135a961375b565b5b828203905092915050565b60006135c082613601565b9050919050565b60008115159050919050565b6000819050919050565b60006135e8826135b5565b9050919050565b60006135fa826135b5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061364382613692565b9050919050565b600061365582613692565b9050919050565b600061366782613692565b9050919050565b600061367982613692565b9050919050565b600061368b82613692565b9050919050565b600061369d826136a4565b9050919050565b60006136af82613601565b9050919050565b82818337600083830152505050565b60005b838110156136e35780820151818401526020810190506136c8565b838111156136f2576000848401525b50505050565b6000600282049050600182168061371057607f821691505b60208210811415613724576137236137b9565b5b50919050565b61373382613835565b810181811067ffffffffffffffff82111715613752576137516137e8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613ab0816135b5565b8114613abb57600080fd5b50565b613ac7816135c7565b8114613ad257600080fd5b50565b613ade816135dd565b8114613ae957600080fd5b50565b613af5816135ef565b8114613b0057600080fd5b50565b613b0c81613621565b8114613b1757600080fd5b5056fea2646970667358221220772cadf8e84a0e029604600864dde34b22ee63843b25635e36e3306096507bb964736f6c63430008070033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/RenPool.sol b/contracts/RenPool.sol index d91f4e1..fc1f159 100644 --- a/contracts/RenPool.sol +++ b/contracts/RenPool.sol @@ -27,6 +27,7 @@ contract RenPool { bool public isLocked; // ^ we could use enum instead POOL_STATUS = { OPEN /* 0 */, CLOSE /* 1 */ } + bool public isRegistered; mapping(address => uint256) public balances; mapping(address => uint256) public withdrawRequests; @@ -82,6 +83,7 @@ contract RenPool { gatewayRegistry = IGatewayRegistry(_gatewayRegistryAddr); bond = _bond; isLocked = false; + isRegistered = false; totalPooled = 0; totalWithdrawalRequested = 0; ownerFee = 5; @@ -123,6 +125,7 @@ contract RenPool { function _deregisterDarknode() private { darknodeRegistry.deregister(darknodeID); + isRegistered = false; } function unlockPool() external onlyOwnerNodeOperator { @@ -204,9 +207,9 @@ contract RenPool { withdrawRequests[sender] = _amount; totalWithdrawalRequested += _amount; - // if(totalWithdrawalRequested > bond / 2) { - // _deregisterDarknode(); - // } + if(isRegistered && totalWithdrawalRequested > bond / 2) { + _deregisterDarknode(); + } emit RenWithdrawalRequested(sender, _amount); } @@ -296,6 +299,7 @@ contract RenPool { darknodeRegistry.register(_darknodeID, _publicKey); + isRegistered = true; darknodeID = _darknodeID; publicKey = _publicKey; } From a137364791fc96ed75828f06450f46782b761b59 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Sat, 18 Dec 2021 12:41:02 +0100 Subject: [PATCH 05/12] adding bond transfer test --- artifacts/contracts/RenPool.sol/RenPool.json | 4 +-- contracts/RenPool.sol | 6 ++-- test/RenPool.test.js | 29 ++++++++++++++++++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/artifacts/contracts/RenPool.sol/RenPool.json b/artifacts/contracts/RenPool.sol/RenPool.json index 06c380d..4a7c5d3 100644 --- a/artifacts/contracts/RenPool.sol/RenPool.json +++ b/artifacts/contracts/RenPool.sol/RenPool.json @@ -733,8 +733,8 @@ "type": "receive" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162003f3638038062003f36833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613b5080620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161025391906133a5565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f88565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613035565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a91906133a5565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b6040516103459190613420565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b604051610399919061310f565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c491906130be565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b60405161040191906133a5565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c919061309c565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b60405161045791906133a5565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab91906133a5565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e891906133a5565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b60405161052591906133a5565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b91906133a5565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f88565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f88565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130f4565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613035565b60405180910390f35b34801561066357600080fd5b5061066c611724565b60405161067991906133a5565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b691906133a5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130d9565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b60405161077591906133a5565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a0919061312a565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e291906133a5565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613325565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b791906133a5565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f88565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613385565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906132a5565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613305565b60405180910390fd5b8260056000828254610be09190613581565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c369190613581565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a92919061300c565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613225565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d7191906133a5565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136f8565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613167565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133e9565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613145565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd9493929190613050565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161109691906133a5565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613197565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516112459291906133c0565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613385565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c906132a5565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132e5565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134fa565b92505081905550600960019054906101000a900460ff16801561140c575060026004546114079190613550565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c0825908460405161146091906133a5565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613205565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f88565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613365565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613145565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f88565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613285565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132e5565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134fa565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e69190613581565b9250508190555080600660008282546119ff9190613581565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612fa3565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613245565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b9692919061300c565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613345565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d91906133a5565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613305565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613385565b60405180910390fd5b60045460055483611d4991906134fa565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613265565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134fa565b925050819055508160056000828254611df291906134fa565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f91906133a5565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612fa3565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613245565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613325565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132e5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b092919061300c565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612138906132c5565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613285565b60405180910390fd5b806006600082825461220d9190613581565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d91906133a5565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613205565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613325565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132e5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fda565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131d5565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f88565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136f8565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d84613460565b61343b565b90508281526020810184848401111561282e5761282d613826565b5b6128398482856136b6565b509392505050565b600061285461284f84613491565b61343b565b9050828152602081018484840111156128705761286f613826565b5b61287b8482856136b6565b509392505050565b60008135905061289281613aa7565b92915050565b6000815190506128a781613abe565b92915050565b60008083601f8401126128c3576128c261381c565b5b8235905067ffffffffffffffff8111156128e0576128df613817565b5b6020830191508360018202830111156128fc576128fb613821565b5b9250929050565b600082601f8301126129185761291761381c565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613ad5565b92915050565b60008151905061295581613aec565b92915050565b600082601f8301126129705761296f61381c565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613b03565b92915050565b6000815190506129ad81613b03565b92915050565b6000602082840312156129c9576129c8613830565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f8613830565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a2761382b565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a55613830565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a82613830565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf613830565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc613830565b5b600082013567ffffffffffffffff811115612afb57612afa61382b565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b28613830565b5b600084013567ffffffffffffffff811115612b4757612b4661382b565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a613830565b5b600086013567ffffffffffffffff811115612bb957612bb861382b565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c1861382b565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c47613830565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c74613830565b5b6000612c838482850161299e565b91505092915050565b612c95816135b5565b82525050565b612ca4816135c7565b82525050565b612cb3816135d3565b82525050565b6000612cc583856134d8565b9350612cd28385846136b6565b612cdb83613835565b840190509392505050565b6000612cf1826134c2565b612cfb81856134d8565b9350612d0b8185602086016136c5565b612d1481613835565b840191505092915050565b612d2881613638565b82525050565b612d378161364a565b82525050565b612d468161365c565b82525050565b612d558161366e565b82525050565b612d6481613680565b82525050565b6000612d75826134cd565b612d7f81856134e9565b9350612d8f8185602086016136c5565b612d9881613835565b840191505092915050565b6000612db0602e836134e9565b9150612dbb82613846565b604082019050919050565b6000612dd36018836134e9565b9150612dde82613895565b602082019050919050565b6000612df66017836134e9565b9150612e01826138be565b602082019050919050565b6000612e19601e836134e9565b9150612e24826138e7565b602082019050919050565b6000612e3c6017836134e9565b9150612e4782613910565b602082019050919050565b6000612e5f601b836134e9565b9150612e6a82613939565b602082019050919050565b6000612e82601d836134e9565b9150612e8d82613962565b602082019050919050565b6000612ea5601b836134e9565b9150612eb08261398b565b602082019050919050565b6000612ec86017836134e9565b9150612ed3826139b4565b602082019050919050565b6000612eeb6024836134e9565b9150612ef6826139dd565b604082019050919050565b6000612f0e6016836134e9565b9150612f1982613a2c565b602082019050919050565b6000612f31601d836134e9565b9150612f3c82613a55565b602082019050919050565b6000612f546017836134e9565b9150612f5f82613a7e565b602082019050919050565b612f7381613621565b82525050565b612f828161362b565b82525050565b6000602082019050612f9d6000830184612c8c565b92915050565b6000606082019050612fb86000830186612c8c565b612fc56020830185612c8c565b612fd26040830184612f6a565b949350505050565b6000604082019050612fef6000830186612c8c565b8181036020830152613002818486612cb9565b9050949350505050565b60006040820190506130216000830185612c8c565b61302e6020830184612f6a565b9392505050565b600060208201905061304a6000830184612c9b565b92915050565b60006080820190506130656000830187612caa565b6130726020830186612f6a565b61307f6040830185612caa565b81810360608301526130918184612ce6565b905095945050505050565b600060208201905081810360008301526130b68184612ce6565b905092915050565b60006020820190506130d36000830184612d1f565b92915050565b60006020820190506130ee6000830184612d2e565b92915050565b60006020820190506131096000830184612d3d565b92915050565b60006020820190506131246000830184612d4c565b92915050565b600060208201905061313f6000830184612d5b565b92915050565b6000602082019050818103600083015261315f8184612d6a565b905092915050565b600060408201905081810360008301526131818185612d6a565b90506131906020830184612c8c565b9392505050565b600060608201905081810360008301526131b18186612d6a565b90506131c06020830185612c8c565b6131cd6040830184612f6a565b949350505050565b600060408201905081810360008301526131ef8185612d6a565b90506131fe6020830184612f6a565b9392505050565b6000602082019050818103600083015261321e81612da3565b9050919050565b6000602082019050818103600083015261323e81612dc6565b9050919050565b6000602082019050818103600083015261325e81612de9565b9050919050565b6000602082019050818103600083015261327e81612e0c565b9050919050565b6000602082019050818103600083015261329e81612e2f565b9050919050565b600060208201905081810360008301526132be81612e52565b9050919050565b600060208201905081810360008301526132de81612e75565b9050919050565b600060208201905081810360008301526132fe81612e98565b9050919050565b6000602082019050818103600083015261331e81612ebb565b9050919050565b6000602082019050818103600083015261333e81612ede565b9050919050565b6000602082019050818103600083015261335e81612f01565b9050919050565b6000602082019050818103600083015261337e81612f24565b9050919050565b6000602082019050818103600083015261339e81612f47565b9050919050565b60006020820190506133ba6000830184612f6a565b92915050565b60006040820190506133d56000830185612f6a565b6133e26020830184612f6a565b9392505050565b60006060820190506133fe6000830186612f6a565b61340b6020830185612f6a565b6134186040830184612caa565b949350505050565b60006020820190506134356000830184612f79565b92915050565b6000613445613456565b9050613451828261372a565b919050565b6000604051905090565b600067ffffffffffffffff82111561347b5761347a6137e8565b5b61348482613835565b9050602081019050919050565b600067ffffffffffffffff8211156134ac576134ab6137e8565b5b6134b582613835565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061350582613621565b915061351083613621565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135455761354461375b565b5b828201905092915050565b600061355b82613621565b915061356683613621565b9250826135765761357561378a565b5b828204905092915050565b600061358c82613621565b915061359783613621565b9250828210156135aa576135a961375b565b5b828203905092915050565b60006135c082613601565b9050919050565b60008115159050919050565b6000819050919050565b60006135e8826135b5565b9050919050565b60006135fa826135b5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061364382613692565b9050919050565b600061365582613692565b9050919050565b600061366782613692565b9050919050565b600061367982613692565b9050919050565b600061368b82613692565b9050919050565b600061369d826136a4565b9050919050565b60006136af82613601565b9050919050565b82818337600083830152505050565b60005b838110156136e35780820151818401526020810190506136c8565b838111156136f2576000848401525b50505050565b6000600282049050600182168061371057607f821691505b60208210811415613724576137236137b9565b5b50919050565b61373382613835565b810181811067ffffffffffffffff82111715613752576137516137e8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613ab0816135b5565b8114613abb57600080fd5b50565b613ac7816135c7565b8114613ad257600080fd5b50565b613ade816135dd565b8114613ae957600080fd5b50565b613af5816135ef565b8114613b0057600080fd5b50565b613b0c81613621565b8114613b1757600080fd5b5056fea2646970667358221220772cadf8e84a0e029604600864dde34b22ee63843b25635e36e3306096507bb964736f6c63430008070033", - "deployedBytecode": "0x6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161025391906133a5565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f88565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613035565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a91906133a5565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b6040516103459190613420565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b604051610399919061310f565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c491906130be565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b60405161040191906133a5565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c919061309c565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b60405161045791906133a5565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab91906133a5565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e891906133a5565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b60405161052591906133a5565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b91906133a5565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f88565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f88565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130f4565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613035565b60405180910390f35b34801561066357600080fd5b5061066c611724565b60405161067991906133a5565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b691906133a5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130d9565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b60405161077591906133a5565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a0919061312a565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e291906133a5565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613325565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b791906133a5565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f88565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613385565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906132a5565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613305565b60405180910390fd5b8260056000828254610be09190613581565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c369190613581565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a92919061300c565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613225565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d7191906133a5565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136f8565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613167565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133e9565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613145565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd9493929190613050565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161109691906133a5565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613197565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32586836040516112459291906133c0565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613385565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c906132a5565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132e5565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134fa565b92505081905550600960019054906101000a900460ff16801561140c575060026004546114079190613550565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c0825908460405161146091906133a5565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613205565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f88565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613365565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613145565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f88565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613285565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132e5565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134fa565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e69190613581565b9250508190555080600660008282546119ff9190613581565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612fa3565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613245565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b9692919061300c565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613345565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d91906133a5565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613305565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613385565b60405180910390fd5b60045460055483611d4991906134fa565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613265565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134fa565b925050819055508160056000828254611df291906134fa565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f91906133a5565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612fa3565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613245565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613325565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132e5565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b092919061300c565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612138906132c5565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613285565b60405180910390fd5b806006600082825461220d9190613581565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d91906133a5565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613205565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613325565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132e5565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fda565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131d5565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f88565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136f8565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d84613460565b61343b565b90508281526020810184848401111561282e5761282d613826565b5b6128398482856136b6565b509392505050565b600061285461284f84613491565b61343b565b9050828152602081018484840111156128705761286f613826565b5b61287b8482856136b6565b509392505050565b60008135905061289281613aa7565b92915050565b6000815190506128a781613abe565b92915050565b60008083601f8401126128c3576128c261381c565b5b8235905067ffffffffffffffff8111156128e0576128df613817565b5b6020830191508360018202830111156128fc576128fb613821565b5b9250929050565b600082601f8301126129185761291761381c565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613ad5565b92915050565b60008151905061295581613aec565b92915050565b600082601f8301126129705761296f61381c565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613b03565b92915050565b6000815190506129ad81613b03565b92915050565b6000602082840312156129c9576129c8613830565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f8613830565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a2761382b565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a55613830565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a82613830565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf613830565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc613830565b5b600082013567ffffffffffffffff811115612afb57612afa61382b565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b28613830565b5b600084013567ffffffffffffffff811115612b4757612b4661382b565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a613830565b5b600086013567ffffffffffffffff811115612bb957612bb861382b565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c1861382b565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c47613830565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c74613830565b5b6000612c838482850161299e565b91505092915050565b612c95816135b5565b82525050565b612ca4816135c7565b82525050565b612cb3816135d3565b82525050565b6000612cc583856134d8565b9350612cd28385846136b6565b612cdb83613835565b840190509392505050565b6000612cf1826134c2565b612cfb81856134d8565b9350612d0b8185602086016136c5565b612d1481613835565b840191505092915050565b612d2881613638565b82525050565b612d378161364a565b82525050565b612d468161365c565b82525050565b612d558161366e565b82525050565b612d6481613680565b82525050565b6000612d75826134cd565b612d7f81856134e9565b9350612d8f8185602086016136c5565b612d9881613835565b840191505092915050565b6000612db0602e836134e9565b9150612dbb82613846565b604082019050919050565b6000612dd36018836134e9565b9150612dde82613895565b602082019050919050565b6000612df66017836134e9565b9150612e01826138be565b602082019050919050565b6000612e19601e836134e9565b9150612e24826138e7565b602082019050919050565b6000612e3c6017836134e9565b9150612e4782613910565b602082019050919050565b6000612e5f601b836134e9565b9150612e6a82613939565b602082019050919050565b6000612e82601d836134e9565b9150612e8d82613962565b602082019050919050565b6000612ea5601b836134e9565b9150612eb08261398b565b602082019050919050565b6000612ec86017836134e9565b9150612ed3826139b4565b602082019050919050565b6000612eeb6024836134e9565b9150612ef6826139dd565b604082019050919050565b6000612f0e6016836134e9565b9150612f1982613a2c565b602082019050919050565b6000612f31601d836134e9565b9150612f3c82613a55565b602082019050919050565b6000612f546017836134e9565b9150612f5f82613a7e565b602082019050919050565b612f7381613621565b82525050565b612f828161362b565b82525050565b6000602082019050612f9d6000830184612c8c565b92915050565b6000606082019050612fb86000830186612c8c565b612fc56020830185612c8c565b612fd26040830184612f6a565b949350505050565b6000604082019050612fef6000830186612c8c565b8181036020830152613002818486612cb9565b9050949350505050565b60006040820190506130216000830185612c8c565b61302e6020830184612f6a565b9392505050565b600060208201905061304a6000830184612c9b565b92915050565b60006080820190506130656000830187612caa565b6130726020830186612f6a565b61307f6040830185612caa565b81810360608301526130918184612ce6565b905095945050505050565b600060208201905081810360008301526130b68184612ce6565b905092915050565b60006020820190506130d36000830184612d1f565b92915050565b60006020820190506130ee6000830184612d2e565b92915050565b60006020820190506131096000830184612d3d565b92915050565b60006020820190506131246000830184612d4c565b92915050565b600060208201905061313f6000830184612d5b565b92915050565b6000602082019050818103600083015261315f8184612d6a565b905092915050565b600060408201905081810360008301526131818185612d6a565b90506131906020830184612c8c565b9392505050565b600060608201905081810360008301526131b18186612d6a565b90506131c06020830185612c8c565b6131cd6040830184612f6a565b949350505050565b600060408201905081810360008301526131ef8185612d6a565b90506131fe6020830184612f6a565b9392505050565b6000602082019050818103600083015261321e81612da3565b9050919050565b6000602082019050818103600083015261323e81612dc6565b9050919050565b6000602082019050818103600083015261325e81612de9565b9050919050565b6000602082019050818103600083015261327e81612e0c565b9050919050565b6000602082019050818103600083015261329e81612e2f565b9050919050565b600060208201905081810360008301526132be81612e52565b9050919050565b600060208201905081810360008301526132de81612e75565b9050919050565b600060208201905081810360008301526132fe81612e98565b9050919050565b6000602082019050818103600083015261331e81612ebb565b9050919050565b6000602082019050818103600083015261333e81612ede565b9050919050565b6000602082019050818103600083015261335e81612f01565b9050919050565b6000602082019050818103600083015261337e81612f24565b9050919050565b6000602082019050818103600083015261339e81612f47565b9050919050565b60006020820190506133ba6000830184612f6a565b92915050565b60006040820190506133d56000830185612f6a565b6133e26020830184612f6a565b9392505050565b60006060820190506133fe6000830186612f6a565b61340b6020830185612f6a565b6134186040830184612caa565b949350505050565b60006020820190506134356000830184612f79565b92915050565b6000613445613456565b9050613451828261372a565b919050565b6000604051905090565b600067ffffffffffffffff82111561347b5761347a6137e8565b5b61348482613835565b9050602081019050919050565b600067ffffffffffffffff8211156134ac576134ab6137e8565b5b6134b582613835565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061350582613621565b915061351083613621565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135455761354461375b565b5b828201905092915050565b600061355b82613621565b915061356683613621565b9250826135765761357561378a565b5b828204905092915050565b600061358c82613621565b915061359783613621565b9250828210156135aa576135a961375b565b5b828203905092915050565b60006135c082613601565b9050919050565b60008115159050919050565b6000819050919050565b60006135e8826135b5565b9050919050565b60006135fa826135b5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061364382613692565b9050919050565b600061365582613692565b9050919050565b600061366782613692565b9050919050565b600061367982613692565b9050919050565b600061368b82613692565b9050919050565b600061369d826136a4565b9050919050565b60006136af82613601565b9050919050565b82818337600083830152505050565b60005b838110156136e35780820151818401526020810190506136c8565b838111156136f2576000848401525b50505050565b6000600282049050600182168061371057607f821691505b60208210811415613724576137236137b9565b5b50919050565b61373382613835565b810181811067ffffffffffffffff82111715613752576137516137e8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206f776e6572206e6f7260008201527f206e6f6465206f70657261746f72000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a2043616c6c6572206973206e6f74206e6f6465206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b613ab0816135b5565b8114613abb57600080fd5b50565b613ac7816135c7565b8114613ad257600080fd5b50565b613ade816135dd565b8114613ae957600080fd5b50565b613af5816135ef565b8114613b0057600080fd5b50565b613b0c81613621565b8114613b1757600080fd5b5056fea2646970667358221220772cadf8e84a0e029604600864dde34b22ee63843b25635e36e3306096507bb964736f6c63430008070033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162003e7e38038062003e7e833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613a9880620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a9190613362565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b60405161034591906133dd565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b60405161039991906130ec565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c4919061309b565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b6040516104019190613362565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c9190613079565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b6040516104579190613362565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab9190613362565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e89190613362565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b6040516105259190613362565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613012565b60405180910390f35b34801561066357600080fd5b5061066c611724565b6040516106799190613362565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b69190613362565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e29190613362565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613342565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613262565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc5906132c2565b60405180910390fd5b8260056000828254610be0919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c36919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a929190612fe9565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d22906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d719190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136b5565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613144565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613122565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd949392919061302d565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516110969190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613174565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161124592919061337d565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613342565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613262565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134b7565b92505081905550600960019054906101000a900460ff16801561140c57506002600454611407919061350d565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516114609190613362565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f65565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613122565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f65565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613242565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e6919061353e565b9250508190555080600660008282546119ff919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612f80565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b96929190612fe9565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d9190613362565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613242565b60405180910390fd5b806006600082825461220d919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d9190613362565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613302565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea264697066735822122073de59c66f99d83313696a4fc61ca021f88e8384cd230962a94039eddbc7c01364736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a9190613362565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b60405161034591906133dd565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b60405161039991906130ec565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c4919061309b565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b6040516104019190613362565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c9190613079565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b6040516104579190613362565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab9190613362565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e89190613362565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b6040516105259190613362565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613012565b60405180910390f35b34801561066357600080fd5b5061066c611724565b6040516106799190613362565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b69190613362565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e29190613362565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613342565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613262565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc5906132c2565b60405180910390fd5b8260056000828254610be0919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c36919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a929190612fe9565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d22906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d719190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136b5565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613144565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613122565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd949392919061302d565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516110969190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613174565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161124592919061337d565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613342565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613262565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134b7565b92505081905550600960019054906101000a900460ff16801561140c57506002600454611407919061350d565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516114609190613362565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f65565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613122565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f65565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613242565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e6919061353e565b9250508190555080600660008282546119ff919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612f80565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b96929190612fe9565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d9190613362565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613242565b60405180910390fd5b806006600082825461220d919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d9190613362565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613302565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea264697066735822122073de59c66f99d83313696a4fc61ca021f88e8384cd230962a94039eddbc7c01364736f6c63430008070033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/RenPool.sol b/contracts/RenPool.sol index fc1f159..ac04b99 100644 --- a/contracts/RenPool.sol +++ b/contracts/RenPool.sol @@ -93,7 +93,7 @@ contract RenPool { modifier onlyNodeOperator() { require ( msg.sender == nodeOperator, - "RenPool: Caller is not node operator" + "RenPool: Unauthorized" ); _; } @@ -101,7 +101,7 @@ contract RenPool { modifier onlyOwnerNodeOperator() { require ( msg.sender == owner || msg.sender == nodeOperator, - "RenPool: Caller is not owner nor node operator" + "RenPool: Unauthorized" ); _; } @@ -109,7 +109,7 @@ contract RenPool { modifier onlyOwner() { require ( msg.sender == owner, - "RenPool: Caller is not owner" + "RenPool: Unauthorized" ); _; } diff --git a/test/RenPool.test.js b/test/RenPool.test.js index db33356..224e243 100644 --- a/test/RenPool.test.js +++ b/test/RenPool.test.js @@ -320,6 +320,7 @@ describe('RenPool contract test', function () { // Verify funds are transferred to the DarknodeRegistryStore contract // and the darknode is under 'pending registration' state + expect(await renPool.isRegistered()).to.be.true; expect(await renToken.balanceOf(darknodeRegistryStoreAddr)).to.equal(registryStoreBalance.add(POOL_BOND)); expect(await renToken.balanceOf(renPool.address)).to.equal(0); expect(await darknodeRegistry.isPendingRegistration(NODE_ID)).to.be.true; @@ -339,32 +340,54 @@ describe('RenPool contract test', function () { expect(await darknodeRegistry.getDarknodeOperator(NODE_ID)).to.equal(renPool.address); }); + it('should fail when bond transfer is not aproved by node operator', async () => { + expect(alice).to.not.equal(nodeOperator); + + // Lock pool + await renToken.connect(alice).approve(renPool.address, POOL_BOND); + await renPool.connect(alice).deposit(POOL_BOND); + + // Attempt bond transfer approval + await expect( + renPool.connect(alice).approveBondTransfer() + ).to.be.revertedWith('RenPool: Unauthorized'); + }); + it('should fail when darknode registration is not performed by node operator', async () => { expect(alice).to.not.equal(nodeOperator); + // Lock pool await renToken.connect(alice).approve(renPool.address, POOL_BOND); await renPool.connect(alice).deposit(POOL_BOND); - await renPool.connect(nodeOperator).approveBondTransfer(); + // Approve bond transfer and attempt darknode registration + await renPool.connect(nodeOperator).approveBondTransfer(); await expect( renPool.connect(alice).registerDarknode(NODE_ID, PUBLIC_KEY) - ).to.be.revertedWith('RenPool: Caller is not node operator'); + ).to.be.revertedWith('RenPool: Unauthorized'); }); it('should fail when darknode registration is performed twice', async () => { + // Lock pool await renToken.connect(alice).approve(renPool.address, POOL_BOND); await renPool.connect(alice).deposit(POOL_BOND); + + // Register darknode await renPool.connect(nodeOperator).approveBondTransfer(); await renPool.connect(nodeOperator).registerDarknode(NODE_ID, PUBLIC_KEY) + // Attempt a new registration await expect( renPool.connect(nodeOperator).registerDarknode(NODE_ID, PUBLIC_KEY) ).to.be.revertedWith('DarknodeRegistry: must be refunded or never registered'); }); it('should fail when darknode registration is performed twice but preserves first registration data', async () => { + // Lock pool await renToken.connect(alice).approve(renPool.address, POOL_BOND); await renPool.connect(alice).deposit(POOL_BOND); + + // Register darknode await renPool.connect(nodeOperator).approveBondTransfer(); await renPool.connect(nodeOperator).registerDarknode(NODE_ID, PUBLIC_KEY) @@ -427,7 +450,7 @@ describe('RenPool contract test', function () { // Attemping to deregister the darknode should fail when caller is not node operator await expect( renPool.connect(alice).deregisterDarknode() - ).to.be.revertedWith('RenPool: Caller is not owner nor node operator'); + ).to.be.revertedWith('RenPool: Unauthorized'); // Make sure node is still registered and nodeID and publicKey are still stored // in the RenPool contract From 34761b83df7e6faa7e1b2cb758624b6c01c682c6 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Sat, 18 Dec 2021 12:58:17 +0100 Subject: [PATCH 06/12] adding test for automatic deregistration --- test/RenPool.test.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/RenPool.test.js b/test/RenPool.test.js index 224e243..e3f1e33 100644 --- a/test/RenPool.test.js +++ b/test/RenPool.test.js @@ -432,6 +432,37 @@ describe('RenPool contract test', function () { expect(await renPool.publicKey()).to.equalIgnoreCase(PUBLIC_KEY); }); + [POOL_BOND.div(2).add(1), POOL_BOND].forEach(amount => { + it('should automatically deregister darknode when total withdrawal requested surpasses 0.5 of bond', async function () { + // Lock pool + await renToken.connect(bob).approve(renPool.address, POOL_BOND); + await renPool.connect(bob).deposit(POOL_BOND); + + // Register darknode + await renPool.connect(nodeOperator).approveBondTransfer(); + await renPool.connect(nodeOperator).registerDarknode(NODE_ID, PUBLIC_KEY); + + // Jump one epoch forward for registration to settle + await increaseMonth(); + await darknodeRegistry.epoch(); + + // Request withdraw to trigger deregistration + await renPool.connect(bob).requestWithdraw(amount); + expect(await renPool.withdrawRequests(bob.address)).to.equal(amount); + + // Jump one epoch forward for deregitration to settle + await increaseMonth(); + await darknodeRegistry.epoch(); + + // Verify state + expect(await darknodeRegistry.isDeregistered(NODE_ID)).to.be.true; + + // Make sure darknodeID and publicKey are still stored in the RenPool contract + expect(await renPool.darknodeID()).to.equalIgnoreCase(NODE_ID); + expect(await renPool.publicKey()).to.equalIgnoreCase(PUBLIC_KEY); + }); + }) + it('should fail when darknode deregistration is not performed by node operator', async () => { expect(alice).to.not.equal(nodeOperator); From 5a7a0751fe0afae75dba62094e436a1bc8d9a68d Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Sat, 18 Dec 2021 13:06:03 +0100 Subject: [PATCH 07/12] name change from requestWithdraw to requestWithdrawal --- artifacts/contracts/RenPool.sol/RenPool.json | 12 +++++----- contracts/RenPool.sol | 20 ++++++++-------- test/RenPool.test.js | 24 ++++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/artifacts/contracts/RenPool.sol/RenPool.json b/artifacts/contracts/RenPool.sol/RenPool.json index 4a7c5d3..9e14049 100644 --- a/artifacts/contracts/RenPool.sol/RenPool.json +++ b/artifacts/contracts/RenPool.sol/RenPool.json @@ -311,7 +311,7 @@ }, { "inputs": [], - "name": "cancelWithdrawRequest", + "name": "cancelWithdrawalRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -425,7 +425,7 @@ "type": "address" } ], - "name": "fulfillWithdrawRequest", + "name": "fulfillWithdrawalRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -651,7 +651,7 @@ "type": "uint256" } ], - "name": "requestWithdraw", + "name": "requestWithdrawal", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -717,7 +717,7 @@ "type": "address" } ], - "name": "withdrawRequests", + "name": "withdrawalRequests", "outputs": [ { "internalType": "uint256", @@ -733,8 +733,8 @@ "type": "receive" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162003e7e38038062003e7e833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613a9880620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a9190613362565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b60405161034591906133dd565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b60405161039991906130ec565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c4919061309b565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b6040516104019190613362565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c9190613079565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b6040516104579190613362565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab9190613362565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e89190613362565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b6040516105259190613362565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613012565b60405180910390f35b34801561066357600080fd5b5061066c611724565b6040516106799190613362565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b69190613362565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e29190613362565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613342565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613262565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc5906132c2565b60405180910390fd5b8260056000828254610be0919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c36919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a929190612fe9565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d22906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d719190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136b5565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613144565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613122565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd949392919061302d565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516110969190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613174565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161124592919061337d565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613342565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613262565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134b7565b92505081905550600960019054906101000a900460ff16801561140c57506002600454611407919061350d565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516114609190613362565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f65565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613122565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f65565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613242565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e6919061353e565b9250508190555080600660008282546119ff919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612f80565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b96929190612fe9565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d9190613362565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613242565b60405180910390fd5b806006600082825461220d919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d9190613362565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613302565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea264697066735822122073de59c66f99d83313696a4fc61ca021f88e8384cd230962a94039eddbc7c01364736f6c63430008070033", - "deployedBytecode": "0x6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e19e7168146107a9578063e39f6101146107c0578063e438a77d146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d014610601578063a4e2d6341461062c578063aaaa0c4b14610657578063ac34798714610682578063b46ff3c3146106bf5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b8063372500ab1161019b5780636664e42e1161016a5780636664e42e146104605780636ec21cc81461048957806370a08231146104b457806371bbef36146104f1578063745400c91461052e5761025d565b8063372500ab146103a257806352df49ec146103cd57806363ffab311461040a57806364c9ec6f146104355761025d565b806327e235e3116101d757806327e235e3146102e65780632e0f2625146103235780632e1a7d4d1461034e57806334246f9b146103775761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b60405161031a9190613362565b60405180910390f35b34801561032f57600080fd5b50610338610a9e565b60405161034591906133dd565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612c32565b610aa3565b005b34801561038357600080fd5b5061038c610d7e565b60405161039991906130ec565b60405180910390f35b3480156103ae57600080fd5b506103b7610da4565b6040516103c4919061309b565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906129b3565b610dca565b6040516104019190613362565b60405180910390f35b34801561041657600080fd5b5061041f610de2565b60405161042c9190613079565b60405180910390f35b34801561044157600080fd5b5061044a610e70565b6040516104579190613362565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612b7f565b610e76565b005b34801561049557600080fd5b5061049e6110a8565b6040516104ab9190613362565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906129b3565b6110ae565b6040516104e89190613362565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612b10565b6110f7565b6040516105259190613362565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612c32565b61125a565b005b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61146d565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611485565b005b3480156105b757600080fd5b506105c06116a1565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6116c5565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166116eb565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610641611711565b60405161064e9190613012565b60405180910390f35b34801561066357600080fd5b5061066c611724565b6040516106799190613362565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612ac7565b61172a565b6040516106b69190613362565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e191906129b3565b611866565b005b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b005b3480156107cc57600080fd5b506107d56122a9565b6040516107e29190613362565b60405180910390f35b3480156107f757600080fd5b506108006122af565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613342565b60405180910390fd5b600081118015610b3f5750828110155b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613262565b60405180910390fd5b600960009054906101000a900460ff1615610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc5906132c2565b60405180910390fd5b8260056000828254610be0919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c36919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610c9a929190612fe9565b602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612a40565b610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d22906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051610d719190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b60038054610def906136b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906136b5565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60045481565b60008585604051602001610e8b929190613144565b6040516020818303038152906040528051906020012090506000838583604051602001610eba939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401610f2f9190613122565b60206040518083038186803b158015610f4757600080fd5b505afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b8152600401610fbd949392919061302d565b602060405180830381600087803b158015610fd757600080fd5b505af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612c5f565b90506110506040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516110969190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161116593929190613174565b602060405180830381600087803b15801561117f57600080fd5b505af1158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b79190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161124592919061337d565b60405180910390a28093505050509392505050565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600083116112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613342565b60405180910390fd5b6000811180156112f65750828110155b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613262565b60405180910390fd5b600960009054906101000a900460ff16611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008282546113da91906134b7565b92505081905550600960019054906101000a900460ff16801561140c57506002600454611407919061350d565b600654115b1561141a5761141961261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516114609190613362565b60405180910390a2505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061152c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c89190612f65565b60206040518083038186803b1580156115e057600080fd5b505afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190612c5f565b11611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016117879190613122565b60206040518083038186803b15801561179f57600080fd5b505afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180f9190612f65565b60206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612c5f565b9050919050565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613242565b60405180910390fd5b600960009054906101000a900460ff16611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461199091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e6919061353e565b9250508190555080600660008282546119ff919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611aa893929190612f80565b602060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190612a40565b611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b96929190612fe9565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190612a40565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051611c6d9190613362565b60405180910390a2505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613242565b60405180910390fd5b806006600082825461220d919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161229d9190613362565b60405180910390a25050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613302565b60405180910390fd5b61239d61261e565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea264697066735822122073de59c66f99d83313696a4fc61ca021f88e8384cd230962a94039eddbc7c01364736f6c63430008070033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162003e7e38038062003e7e833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613a9880620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b005b34801561031b57600080fd5b50610336600480360381019061033191906129b3565b610e9a565b6040516103439190613362565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906129b3565b610eb2565b6040516103809190613362565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133dd565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c32565b610ecf565b005b3480156103e957600080fd5b506103f26111aa565b6040516103ff91906130ec565b60405180910390f35b34801561041457600080fd5b5061041d6111d0565b60405161042a919061309b565b60405180910390f35b34801561043f57600080fd5b506104486111f6565b6040516104559190613079565b60405180910390f35b34801561046a57600080fd5b50610473611284565b6040516104809190613362565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b7f565b61128a565b005b3480156104be57600080fd5b506104c76114bc565b6040516104d49190613362565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906129b3565b6114c2565b6040516105119190613362565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612b10565b61150b565b60405161054e9190613362565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61166e565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611686565b005b3480156105b757600080fd5b506105c06118a2565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6118c6565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166118ec565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c32565b611912565b005b34801561066157600080fd5b5061066a611b25565b6040516106779190613012565b60405180910390f35b34801561068c57600080fd5b50610695611b38565b6040516106a29190613362565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612ac7565b611b3e565b6040516106df9190613362565b60405180910390f35b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b6040516107cb9190613362565b60405180910390f35b3480156107e057600080fd5b506107e9612175565b005b3480156107f757600080fd5b50610800612265565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613242565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b58906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c06919061353e565b925050819055508060066000828254610c1f919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f80565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a40565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fe9565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a40565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d9190613362565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613342565b60405180910390fd5b600081118015610f6b5750828110155b610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190613262565b60405180910390fd5b600960009054906101000a900460ff1615610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906132c2565b60405180910390fd5b826005600082825461100c919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611062919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110c6929190612fe9565b602060405180830381600087803b1580156110e057600080fd5b505af11580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612a40565b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c8460405161119d9190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611203906136b5565b80601f016020809104026020016040519081016040528092919081815260200182805461122f906136b5565b801561127c5780601f106112515761010080835404028352916020019161127c565b820191906000526020600020905b81548152906001019060200180831161125f57829003601f168201915b505050505081565b60045481565b6000858560405160200161129f929190613144565b60405160208183030381529060405280519060200120905060008385836040516020016112ce939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016113439190613122565b60206040518083038186803b15801561135b57600080fd5b505afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113d1949392919061302d565b602060405180830381600087803b1580156113eb57600080fd5b505af11580156113ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114239190612c5f565b90506114646040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516114aa9190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161157993929190613174565b602060405180830381600087803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb9190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161165992919061337d565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061172d5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117c99190612f65565b60206040518083038186803b1580156117e157600080fd5b505afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118199190612c5f565b11611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590613342565b60405180910390fd5b6000811180156119ae5750828110155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613262565b60405180910390fd5b600960009054906101000a900460ff16611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a33906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a9291906134b7565b92505081905550600960019054906101000a900460ff168015611ac457506002600454611abf919061350d565b600654115b15611ad257611ad161261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b189190613362565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b9b9190613122565b60206040518083038186803b158015611bb357600080fd5b505afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb9190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c239190612f65565b60206040518083038186803b158015611c3b57600080fd5b505afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190612c5f565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061221c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61225b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225290613302565b60405180910390fd5b61226361261e565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613242565b60405180910390fd5b8060066000828254612303919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516123939190613362565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea2646970667358221220c4fbaf9b90d714b85549907fc34b0c8f7b66a578f11445406032ce135792957a64736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b005b34801561031b57600080fd5b50610336600480360381019061033191906129b3565b610e9a565b6040516103439190613362565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906129b3565b610eb2565b6040516103809190613362565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133dd565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c32565b610ecf565b005b3480156103e957600080fd5b506103f26111aa565b6040516103ff91906130ec565b60405180910390f35b34801561041457600080fd5b5061041d6111d0565b60405161042a919061309b565b60405180910390f35b34801561043f57600080fd5b506104486111f6565b6040516104559190613079565b60405180910390f35b34801561046a57600080fd5b50610473611284565b6040516104809190613362565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b7f565b61128a565b005b3480156104be57600080fd5b506104c76114bc565b6040516104d49190613362565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906129b3565b6114c2565b6040516105119190613362565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612b10565b61150b565b60405161054e9190613362565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61166e565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611686565b005b3480156105b757600080fd5b506105c06118a2565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6118c6565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166118ec565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c32565b611912565b005b34801561066157600080fd5b5061066a611b25565b6040516106779190613012565b60405180910390f35b34801561068c57600080fd5b50610695611b38565b6040516106a29190613362565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612ac7565b611b3e565b6040516106df9190613362565b60405180910390f35b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b6040516107cb9190613362565b60405180910390f35b3480156107e057600080fd5b506107e9612175565b005b3480156107f757600080fd5b50610800612265565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613242565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b58906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c06919061353e565b925050819055508060066000828254610c1f919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f80565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a40565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fe9565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a40565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d9190613362565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613342565b60405180910390fd5b600081118015610f6b5750828110155b610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190613262565b60405180910390fd5b600960009054906101000a900460ff1615610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906132c2565b60405180910390fd5b826005600082825461100c919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611062919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110c6929190612fe9565b602060405180830381600087803b1580156110e057600080fd5b505af11580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612a40565b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c8460405161119d9190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611203906136b5565b80601f016020809104026020016040519081016040528092919081815260200182805461122f906136b5565b801561127c5780601f106112515761010080835404028352916020019161127c565b820191906000526020600020905b81548152906001019060200180831161125f57829003601f168201915b505050505081565b60045481565b6000858560405160200161129f929190613144565b60405160208183030381529060405280519060200120905060008385836040516020016112ce939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016113439190613122565b60206040518083038186803b15801561135b57600080fd5b505afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113d1949392919061302d565b602060405180830381600087803b1580156113eb57600080fd5b505af11580156113ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114239190612c5f565b90506114646040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516114aa9190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161157993929190613174565b602060405180830381600087803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb9190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161165992919061337d565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061172d5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117c99190612f65565b60206040518083038186803b1580156117e157600080fd5b505afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118199190612c5f565b11611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590613342565b60405180910390fd5b6000811180156119ae5750828110155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613262565b60405180910390fd5b600960009054906101000a900460ff16611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a33906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a9291906134b7565b92505081905550600960019054906101000a900460ff168015611ac457506002600454611abf919061350d565b600654115b15611ad257611ad161261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b189190613362565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b9b9190613122565b60206040518083038186803b158015611bb357600080fd5b505afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb9190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c239190612f65565b60206040518083038186803b158015611c3b57600080fd5b505afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190612c5f565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061221c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61225b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225290613302565b60405180910390fd5b61226361261e565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613242565b60405180910390fd5b8060066000828254612303919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516123939190613362565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea2646970667358221220c4fbaf9b90d714b85549907fc34b0c8f7b66a578f11445406032ce135792957a64736f6c63430008070033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/RenPool.sol b/contracts/RenPool.sol index ac04b99..cbf022a 100644 --- a/contracts/RenPool.sol +++ b/contracts/RenPool.sol @@ -30,7 +30,7 @@ contract RenPool { bool public isRegistered; mapping(address => uint256) public balances; - mapping(address => uint256) public withdrawRequests; + mapping(address => uint256) public withdrawalRequests; mapping(address => uint256) public nonces; IERC20 public renToken; @@ -189,14 +189,14 @@ contract RenPool { /** * @notice Requesting a withdraw in case the pool is locked. The amount * that needs to be withdrawn will be replaced by another user using the - * fulfillWithdrawRequest method. + * fulfillWithdrawalRequest method. * * @param _amount The amount of REN to be withdrawn. * * @dev Users can have up to a single request active. In case of several * calls to this method, only the last request will be preserved. */ - function requestWithdraw(uint256 _amount) external { + function requestWithdrawal(uint256 _amount) external { address sender = msg.sender; uint256 senderBalance = balances[sender]; @@ -204,7 +204,7 @@ contract RenPool { require(senderBalance > 0 && senderBalance >= _amount, "RenPool: Insufficient funds"); require(isLocked, "RenPool: Pool is not locked"); - withdrawRequests[sender] = _amount; + withdrawalRequests[sender] = _amount; totalWithdrawalRequested += _amount; if(isRegistered && totalWithdrawalRequested > bond / 2) { @@ -220,9 +220,9 @@ contract RenPool { * * @param _target The amount of REN to be withdrawn. */ - function fulfillWithdrawRequest(address _target) external { + function fulfillWithdrawalRequest(address _target) external { address sender = msg.sender; - uint256 amount = withdrawRequests[_target]; + uint256 amount = withdrawalRequests[_target]; require(amount > 0, "RenPool: invalid amount"); require(isLocked, "RenPool: Pool is not locked"); @@ -231,7 +231,7 @@ contract RenPool { balances[_target] -= amount; totalWithdrawalRequested -= amount; - delete withdrawRequests[_target]; + delete withdrawalRequests[_target]; // Transfer funds from sender to _target require( @@ -246,15 +246,15 @@ contract RenPool { emit RenWithdrawalRequestFulfilled(sender, amount); } - function cancelWithdrawRequest() external { + function cancelWithdrawalRequest() external { address sender = msg.sender; - uint256 amount = withdrawRequests[sender]; + uint256 amount = withdrawalRequests[sender]; require(amount > 0, "RenPool: invalid amount"); totalWithdrawalRequested -= amount; - delete withdrawRequests[sender]; + delete withdrawalRequests[sender]; emit RenWithdrawalRequestCancelled(sender, amount); } diff --git a/test/RenPool.test.js b/test/RenPool.test.js index e3f1e33..15a064c 100644 --- a/test/RenPool.test.js +++ b/test/RenPool.test.js @@ -178,7 +178,7 @@ describe('RenPool contract test', function () { }); - describe('withdraw/requestWithdraw/fulfillWithdrawRequest', function () { + describe('withdraw/requestWithdrawal/fulfillWithdrawalRequest', function () { [bn(1), POOL_BOND.sub(1)].forEach(amount => { it('should withdraw properly', async function () { @@ -230,8 +230,8 @@ describe('RenPool contract test', function () { expect(await renPool.isLocked()).to.be.true; // Request withdraw - await renPool.connect(bob).requestWithdraw(amount); - expect(await renPool.withdrawRequests(bob.address)).to.equal(amount); + await renPool.connect(bob).requestWithdrawal(amount); + expect(await renPool.withdrawalRequests(bob.address)).to.equal(amount); expect(await renPool.totalWithdrawalRequested()).to.equal(amount); }); }); @@ -244,13 +244,13 @@ describe('RenPool contract test', function () { expect(await renPool.isLocked()).to.be.true; // Request withdraw - await renPool.connect(bob).requestWithdraw(amount); - expect(await renPool.withdrawRequests(bob.address)).to.equal(amount); + await renPool.connect(bob).requestWithdrawal(amount); + expect(await renPool.withdrawalRequests(bob.address)).to.equal(amount); expect(await renPool.totalWithdrawalRequested()).to.equal(amount); // Cancel withdraw request - await renPool.connect(bob).cancelWithdrawRequest(); - expect(await renPool.withdrawRequests(bob.address)).to.equal(bn(0)); + await renPool.connect(bob).cancelWithdrawalRequest(); + expect(await renPool.withdrawalRequests(bob.address)).to.equal(bn(0)); expect(await renPool.totalWithdrawalRequested()).to.equal(bn(0)); }); }); @@ -266,12 +266,12 @@ describe('RenPool contract test', function () { expect(await renPool.isLocked()).to.be.true; // Request withdraw - await renPool.connect(bob).requestWithdraw(amount); - expect(await renPool.withdrawRequests(bob.address)).to.equal(amount); + await renPool.connect(bob).requestWithdrawal(amount); + expect(await renPool.withdrawalRequests(bob.address)).to.equal(amount); // Fulfill withdraw request await renToken.connect(alice).approve(renPool.address, POOL_BOND); - await renPool.connect(alice).fulfillWithdrawRequest(bob.address); + await renPool.connect(alice).fulfillWithdrawalRequest(bob.address); // Verify correct balances expect(await renToken.balanceOf(renPool.address)).to.equal(POOL_BOND); @@ -447,8 +447,8 @@ describe('RenPool contract test', function () { await darknodeRegistry.epoch(); // Request withdraw to trigger deregistration - await renPool.connect(bob).requestWithdraw(amount); - expect(await renPool.withdrawRequests(bob.address)).to.equal(amount); + await renPool.connect(bob).requestWithdrawal(amount); + expect(await renPool.withdrawalRequests(bob.address)).to.equal(amount); // Jump one epoch forward for deregitration to settle await increaseMonth(); From d7bd7acf83570e4d7b96f64bd2090729c4450448 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Sat, 18 Dec 2021 13:16:34 +0100 Subject: [PATCH 08/12] typos --- artifacts/contracts/RenPool.sol/RenPool.json | 17 +++++++++++++++-- test/RenPool.test.js | 14 +++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/artifacts/contracts/RenPool.sol/RenPool.json b/artifacts/contracts/RenPool.sol/RenPool.json index 9e14049..ad50666 100644 --- a/artifacts/contracts/RenPool.sol/RenPool.json +++ b/artifacts/contracts/RenPool.sol/RenPool.json @@ -309,6 +309,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "c__0xd43f3d79", + "type": "bytes32" + } + ], + "name": "c_0xd43f3d79", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [], "name": "cancelWithdrawalRequest", @@ -733,8 +746,8 @@ "type": "receive" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162003e7e38038062003e7e833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613a9880620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b005b34801561031b57600080fd5b50610336600480360381019061033191906129b3565b610e9a565b6040516103439190613362565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906129b3565b610eb2565b6040516103809190613362565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133dd565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c32565b610ecf565b005b3480156103e957600080fd5b506103f26111aa565b6040516103ff91906130ec565b60405180910390f35b34801561041457600080fd5b5061041d6111d0565b60405161042a919061309b565b60405180910390f35b34801561043f57600080fd5b506104486111f6565b6040516104559190613079565b60405180910390f35b34801561046a57600080fd5b50610473611284565b6040516104809190613362565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b7f565b61128a565b005b3480156104be57600080fd5b506104c76114bc565b6040516104d49190613362565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906129b3565b6114c2565b6040516105119190613362565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612b10565b61150b565b60405161054e9190613362565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61166e565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611686565b005b3480156105b757600080fd5b506105c06118a2565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6118c6565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166118ec565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c32565b611912565b005b34801561066157600080fd5b5061066a611b25565b6040516106779190613012565b60405180910390f35b34801561068c57600080fd5b50610695611b38565b6040516106a29190613362565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612ac7565b611b3e565b6040516106df9190613362565b60405180910390f35b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b6040516107cb9190613362565b60405180910390f35b3480156107e057600080fd5b506107e9612175565b005b3480156107f757600080fd5b50610800612265565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613242565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b58906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c06919061353e565b925050819055508060066000828254610c1f919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f80565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a40565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fe9565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a40565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d9190613362565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613342565b60405180910390fd5b600081118015610f6b5750828110155b610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190613262565b60405180910390fd5b600960009054906101000a900460ff1615610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906132c2565b60405180910390fd5b826005600082825461100c919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611062919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110c6929190612fe9565b602060405180830381600087803b1580156110e057600080fd5b505af11580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612a40565b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c8460405161119d9190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611203906136b5565b80601f016020809104026020016040519081016040528092919081815260200182805461122f906136b5565b801561127c5780601f106112515761010080835404028352916020019161127c565b820191906000526020600020905b81548152906001019060200180831161125f57829003601f168201915b505050505081565b60045481565b6000858560405160200161129f929190613144565b60405160208183030381529060405280519060200120905060008385836040516020016112ce939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016113439190613122565b60206040518083038186803b15801561135b57600080fd5b505afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113d1949392919061302d565b602060405180830381600087803b1580156113eb57600080fd5b505af11580156113ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114239190612c5f565b90506114646040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516114aa9190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161157993929190613174565b602060405180830381600087803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb9190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161165992919061337d565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061172d5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117c99190612f65565b60206040518083038186803b1580156117e157600080fd5b505afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118199190612c5f565b11611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590613342565b60405180910390fd5b6000811180156119ae5750828110155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613262565b60405180910390fd5b600960009054906101000a900460ff16611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a33906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a9291906134b7565b92505081905550600960019054906101000a900460ff168015611ac457506002600454611abf919061350d565b600654115b15611ad257611ad161261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b189190613362565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b9b9190613122565b60206040518083038186803b158015611bb357600080fd5b505afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb9190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c239190612f65565b60206040518083038186803b158015611c3b57600080fd5b505afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190612c5f565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061221c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61225b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225290613302565b60405180910390fd5b61226361261e565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613242565b60405180910390fd5b8060066000828254612303919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516123939190613362565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea2646970667358221220c4fbaf9b90d714b85549907fc34b0c8f7b66a578f11445406032ce135792957a64736f6c63430008070033", - "deployedBytecode": "0x6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c346040516102539190613362565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f65565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190613012565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906129b3565b610a86565b005b34801561031b57600080fd5b50610336600480360381019061033191906129b3565b610e9a565b6040516103439190613362565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906129b3565b610eb2565b6040516103809190613362565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133dd565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c32565b610ecf565b005b3480156103e957600080fd5b506103f26111aa565b6040516103ff91906130ec565b60405180910390f35b34801561041457600080fd5b5061041d6111d0565b60405161042a919061309b565b60405180910390f35b34801561043f57600080fd5b506104486111f6565b6040516104559190613079565b60405180910390f35b34801561046a57600080fd5b50610473611284565b6040516104809190613362565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b7f565b61128a565b005b3480156104be57600080fd5b506104c76114bc565b6040516104d49190613362565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906129b3565b6114c2565b6040516105119190613362565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612b10565b61150b565b60405161054e9190613362565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906129b3565b61166e565b60405161058b9190613362565b60405180910390f35b3480156105a057600080fd5b506105a9611686565b005b3480156105b757600080fd5b506105c06118a2565b6040516105cd9190612f65565b60405180910390f35b3480156105e257600080fd5b506105eb6118c6565b6040516105f89190612f65565b60405180910390f35b34801561060d57600080fd5b506106166118ec565b60405161062391906130d1565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c32565b611912565b005b34801561066157600080fd5b5061066a611b25565b6040516106779190613012565b60405180910390f35b34801561068c57600080fd5b50610695611b38565b6040516106a29190613362565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612ac7565b611b3e565b6040516106df9190613362565b60405180910390f35b3480156106f457600080fd5b506106fd611c7a565b60405161070a91906130b6565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c32565b611ca0565b005b34801561074857600080fd5b50610751611f50565b005b34801561075f57600080fd5b50610768612143565b6040516107759190613362565b60405180910390f35b34801561078a57600080fd5b50610793612149565b6040516107a09190613107565b60405180910390f35b3480156107b557600080fd5b506107be61216f565b6040516107cb9190613362565b60405180910390f35b3480156107e057600080fd5b506107e9612175565b005b3480156107f757600080fd5b50610800612265565b005b34801561080e57600080fd5b50610829600480360381019061082491906129e0565b61239f565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890613302565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b79190613362565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f65565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613242565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b58906132a2565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb091906134b7565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c06919061353e565b925050819055508060066000828254610c1f919061353e565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f80565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a40565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613202565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fe9565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a40565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d9190613362565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613342565b60405180910390fd5b600081118015610f6b5750828110155b610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190613262565b60405180910390fd5b600960009054906101000a900460ff1615610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906132c2565b60405180910390fd5b826005600082825461100c919061353e565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611062919061353e565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110c6929190612fe9565b602060405180830381600087803b1580156110e057600080fd5b505af11580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612a40565b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906131e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c8460405161119d9190613362565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611203906136b5565b80601f016020809104026020016040519081016040528092919081815260200182805461122f906136b5565b801561127c5780601f106112515761010080835404028352916020019161127c565b820191906000526020600020905b81548152906001019060200180831161125f57829003601f168201915b505050505081565b60045481565b6000858560405160200161129f929190613144565b60405160208183030381529060405280519060200120905060008385836040516020016112ce939291906133a6565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016113439190613122565b60206040518083038186803b15801561135b57600080fd5b505afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190612a9a565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113d1949392919061302d565b602060405180830381600087803b1580156113eb57600080fd5b505af11580156113ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114239190612c5f565b90506114646040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082612582565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d5972826040516114aa9190613362565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161157993929190613174565b602060405180830381600087803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb9190612c5f565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161165992919061337d565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061172d5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390613302565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117c99190612f65565b60206040518083038186803b1580156117e157600080fd5b505afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118199190612c5f565b11611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613322565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000831161199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590613342565b60405180910390fd5b6000811180156119ae5750828110155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613262565b60405180910390fd5b600960009054906101000a900460ff16611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a33906132a2565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a9291906134b7565b92505081905550600960019054906101000a900460ff168015611ac457506002600454611abf919061350d565b600654115b15611ad257611ad161261e565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b189190613362565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b9b9190613122565b60206040518083038186803b158015611bb357600080fd5b505afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb9190612a6d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c239190612f65565b60206040518083038186803b158015611c3b57600080fd5b505afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190612c5f565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec906132c2565b60405180910390fd5b60008211611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90613342565b60405180910390fd5b60045460055483611d4991906134b7565b1115611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613222565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd991906134b7565b925050819055508160056000828254611df291906134b7565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e3f9190613362565b60405180910390a26004546005541415611e5c57611e5b6126ea565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ebb93929190612f80565b602060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d9190612a40565b611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613202565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613302565b60405180910390fd5b600960009054906101000a900460ff1661202f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612026906132a2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b81526004016120b0929190612fe9565b602060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121029190612a40565b612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613282565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061221c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61225b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225290613302565b60405180910390fd5b61226361261e565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613242565b60405180910390fd5b8060066000828254612303919061353e565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516123939190613362565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690613302565b60405180910390fd5b600960009054906101000a900460ff1661247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612475906132a2565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124dd93929190612fb7565b600060405180830381600087803b1580156124f757600080fd5b505af115801561250b573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816003919061257c92919061275c565b50505050565b61261a82826040516024016125989291906131b2565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612733565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161269b9190612f65565b600060405180830381600087803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054612768906136b5565b90600052602060002090601f01602090048101928261278a57600085556127d1565b82601f106127a357803560ff19168380011785556127d1565b828001600101855582156127d1579182015b828111156127d05782358255916020019190600101906127b5565b5b5090506127de91906127e2565b5090565b5b808211156127fb5760008160009055506001016127e3565b5090565b600061281261280d8461341d565b6133f8565b90508281526020810184848401111561282e5761282d6137e3565b5b612839848285613673565b509392505050565b600061285461284f8461344e565b6133f8565b9050828152602081018484840111156128705761286f6137e3565b5b61287b848285613673565b509392505050565b600081359050612892816139ef565b92915050565b6000815190506128a781613a06565b92915050565b60008083601f8401126128c3576128c26137d9565b5b8235905067ffffffffffffffff8111156128e0576128df6137d4565b5b6020830191508360018202830111156128fc576128fb6137de565b5b9250929050565b600082601f830112612918576129176137d9565b5b81356129288482602086016127ff565b91505092915050565b60008151905061294081613a1d565b92915050565b60008151905061295581613a34565b92915050565b600082601f8301126129705761296f6137d9565b5b8135612980848260208601612841565b91505092915050565b60008135905061299881613a4b565b92915050565b6000815190506129ad81613a4b565b92915050565b6000602082840312156129c9576129c86137ed565b5b60006129d784828501612883565b91505092915050565b6000806000604084860312156129f9576129f86137ed565b5b6000612a0786828701612883565b935050602084013567ffffffffffffffff811115612a2857612a276137e8565b5b612a34868287016128ad565b92509250509250925092565b600060208284031215612a5657612a556137ed565b5b6000612a6484828501612898565b91505092915050565b600060208284031215612a8357612a826137ed565b5b6000612a9184828501612931565b91505092915050565b600060208284031215612ab057612aaf6137ed565b5b6000612abe84828501612946565b91505092915050565b600060208284031215612add57612adc6137ed565b5b600082013567ffffffffffffffff811115612afb57612afa6137e8565b5b612b078482850161295b565b91505092915050565b600080600060608486031215612b2957612b286137ed565b5b600084013567ffffffffffffffff811115612b4757612b466137e8565b5b612b538682870161295b565b9350506020612b6486828701612883565b9250506040612b7586828701612989565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a6137ed565b5b600086013567ffffffffffffffff811115612bb957612bb86137e8565b5b612bc58882890161295b565b9550506020612bd688828901612883565b9450506040612be788828901612989565b9350506060612bf888828901612989565b925050608086013567ffffffffffffffff811115612c1957612c186137e8565b5b612c2588828901612903565b9150509295509295909350565b600060208284031215612c4857612c476137ed565b5b6000612c5684828501612989565b91505092915050565b600060208284031215612c7557612c746137ed565b5b6000612c838482850161299e565b91505092915050565b612c9581613572565b82525050565b612ca481613584565b82525050565b612cb381613590565b82525050565b6000612cc58385613495565b9350612cd2838584613673565b612cdb836137f2565b840190509392505050565b6000612cf18261347f565b612cfb8185613495565b9350612d0b818560208601613682565b612d14816137f2565b840191505092915050565b612d28816135f5565b82525050565b612d3781613607565b82525050565b612d4681613619565b82525050565b612d558161362b565b82525050565b612d648161363d565b82525050565b6000612d758261348a565b612d7f81856134a6565b9350612d8f818560208601613682565b612d98816137f2565b840191505092915050565b6000612db06018836134a6565b9150612dbb82613803565b602082019050919050565b6000612dd36017836134a6565b9150612dde8261382c565b602082019050919050565b6000612df6601e836134a6565b9150612e0182613855565b602082019050919050565b6000612e196017836134a6565b9150612e248261387e565b602082019050919050565b6000612e3c601b836134a6565b9150612e47826138a7565b602082019050919050565b6000612e5f601d836134a6565b9150612e6a826138d0565b602082019050919050565b6000612e82601b836134a6565b9150612e8d826138f9565b602082019050919050565b6000612ea56017836134a6565b9150612eb082613922565b602082019050919050565b6000612ec86016836134a6565b9150612ed38261394b565b602082019050919050565b6000612eeb6015836134a6565b9150612ef682613974565b602082019050919050565b6000612f0e601d836134a6565b9150612f198261399d565b602082019050919050565b6000612f316017836134a6565b9150612f3c826139c6565b602082019050919050565b612f50816135de565b82525050565b612f5f816135e8565b82525050565b6000602082019050612f7a6000830184612c8c565b92915050565b6000606082019050612f956000830186612c8c565b612fa26020830185612c8c565b612faf6040830184612f47565b949350505050565b6000604082019050612fcc6000830186612c8c565b8181036020830152612fdf818486612cb9565b9050949350505050565b6000604082019050612ffe6000830185612c8c565b61300b6020830184612f47565b9392505050565b60006020820190506130276000830184612c9b565b92915050565b60006080820190506130426000830187612caa565b61304f6020830186612f47565b61305c6040830185612caa565b818103606083015261306e8184612ce6565b905095945050505050565b600060208201905081810360008301526130938184612ce6565b905092915050565b60006020820190506130b06000830184612d1f565b92915050565b60006020820190506130cb6000830184612d2e565b92915050565b60006020820190506130e66000830184612d3d565b92915050565b60006020820190506131016000830184612d4c565b92915050565b600060208201905061311c6000830184612d5b565b92915050565b6000602082019050818103600083015261313c8184612d6a565b905092915050565b6000604082019050818103600083015261315e8185612d6a565b905061316d6020830184612c8c565b9392505050565b6000606082019050818103600083015261318e8186612d6a565b905061319d6020830185612c8c565b6131aa6040830184612f47565b949350505050565b600060408201905081810360008301526131cc8185612d6a565b90506131db6020830184612f47565b9392505050565b600060208201905081810360008301526131fb81612da3565b9050919050565b6000602082019050818103600083015261321b81612dc6565b9050919050565b6000602082019050818103600083015261323b81612de9565b9050919050565b6000602082019050818103600083015261325b81612e0c565b9050919050565b6000602082019050818103600083015261327b81612e2f565b9050919050565b6000602082019050818103600083015261329b81612e52565b9050919050565b600060208201905081810360008301526132bb81612e75565b9050919050565b600060208201905081810360008301526132db81612e98565b9050919050565b600060208201905081810360008301526132fb81612ebb565b9050919050565b6000602082019050818103600083015261331b81612ede565b9050919050565b6000602082019050818103600083015261333b81612f01565b9050919050565b6000602082019050818103600083015261335b81612f24565b9050919050565b60006020820190506133776000830184612f47565b92915050565b60006040820190506133926000830185612f47565b61339f6020830184612f47565b9392505050565b60006060820190506133bb6000830186612f47565b6133c86020830185612f47565b6133d56040830184612caa565b949350505050565b60006020820190506133f26000830184612f56565b92915050565b6000613402613413565b905061340e82826136e7565b919050565b6000604051905090565b600067ffffffffffffffff821115613438576134376137a5565b5b613441826137f2565b9050602081019050919050565b600067ffffffffffffffff821115613469576134686137a5565b5b613472826137f2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134c2826135de565b91506134cd836135de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350257613501613718565b5b828201905092915050565b6000613518826135de565b9150613523836135de565b92508261353357613532613747565b5b828204905092915050565b6000613549826135de565b9150613554836135de565b92508282101561356757613566613718565b5b828203905092915050565b600061357d826135be565b9050919050565b60008115159050919050565b6000819050919050565b60006135a582613572565b9050919050565b60006135b782613572565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136008261364f565b9050919050565b60006136128261364f565b9050919050565b60006136248261364f565b9050919050565b60006136368261364f565b9050919050565b60006136488261364f565b9050919050565b600061365a82613661565b9050919050565b600061366c826135be565b9050919050565b82818337600083830152505050565b60005b838110156136a0578082015181840152602081019050613685565b838111156136af576000848401525b50505050565b600060028204905060018216806136cd57607f821691505b602082108114156136e1576136e0613776565b5b50919050565b6136f0826137f2565b810181811067ffffffffffffffff8211171561370f5761370e6137a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139f881613572565b8114613a0357600080fd5b50565b613a0f81613584565b8114613a1a57600080fd5b50565b613a268161359a565b8114613a3157600080fd5b50565b613a3d816135ac565b8114613a4857600080fd5b50565b613a54816135de565b8114613a5f57600080fd5b5056fea2646970667358221220c4fbaf9b90d714b85549907fc34b0c8f7b66a578f11445406032ce135792957a64736f6c63430008070033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162006f4838038062006f4883398181016040528101906200003791906200087d565b6200006b7faeb8f7043815476442f6bf9e5e743cbf36f47021e588ec22839721db0c2a699560001b6200084c60201b60201c565b6200009f7fee0716639710833bc08a1f28ed48dbb6d7fb5b67243449270dfcb0c2902e08f660001b6200084c60201b60201c565b620000d37fa94ad612f9efec6e67ff634cb0fce98233b1c0bf8b3a5491c056a54073557af460001b6200084c60201b60201c565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001477f991f053a3e051d1c0b5968354a35b258d7965d31ae9e238444bdb0e6b12c194060001b6200084c60201b60201c565b6200017b7f52dfe979c9734161a4cac214b6139546872d7ea0df3a6165fe2e07e310b072c260001b6200084c60201b60201c565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f07f7d9a69b7d94fe72608ba163907dd22a7821111a273b1421e2f4322347004338460001b6200084c60201b60201c565b620002247f08467ed6af51ff92bfa8e4dab50b1dde3428baec5ae380c328bca8e69204a31260001b6200084c60201b60201c565b87600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002997f42a77a914b8ac9c1a21e5265b44877d6bfe834b52f8064636ac2f27c8f90f6a160001b6200084c60201b60201c565b620002cd7f04ddf44800722c370f6f16b688d0dbb4be0bafaac40fa63cc834321b979541e160001b6200084c60201b60201c565b86600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003427f961fa866a8842482a2b7d46c8745cfc977651b8e46114c732a1882de39c4092660001b6200084c60201b60201c565b620003767ffbdf111e1b916b4e15a69bbe3cd9044396a0d70a3f22a527913a15ff0f84c24d60001b6200084c60201b60201c565b85600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003eb7f6294b7ef317d432a171a0edcb5c9182d74ba183aecf0b6b98bb0d1a8692d6a0960001b6200084c60201b60201c565b6200041f7f8d9593c59a14360025628701067e12fa85f02adaa195737e109b2413e7ddb6bd60001b6200084c60201b60201c565b84601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004947f0e989f5fae379996d8cc34bd065116c3ecdf561c7a392fb8425ff96929dc8bc560001b6200084c60201b60201c565b620004c87f59832f60d6af7fb49ddb1e87f2e6e18e57651f434b8b1f0cb632705abc719ae960001b6200084c60201b60201c565b83601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053d7fb0ff7b25214d932280bcafa91237ac8169d8cbf0018cbfe60e8bbe92e498341960001b6200084c60201b60201c565b620005717f344c33e44ee21e4846bb7b26777d9ff9d6ef98493615139300940da22cd9c1ef60001b6200084c60201b60201c565b80600481905550620005ac7fbf3a83abe92f1c14d80922bed805484368438eceffdff1591d0409ca092e964360001b6200084c60201b60201c565b620005e07f6bc8805e78170ba2584fabceb6d4e9aa1820bbd8592db3c5c858b0c20442e95e60001b6200084c60201b60201c565b6000600960006101000a81548160ff0219169083151502179055506200062f7f0f6bf45b82fd65f9dd65c48eec7df21925ad6ae4cb2b16c5409d1a7bdd69728260001b6200084c60201b60201c565b620006637fea663307d0b960619fdf64c659143a72710a6c8eeca255bad8952de61361392760001b6200084c60201b60201c565b6000600960016101000a81548160ff021916908315150217905550620006b27f7275ced130991bad1b22db13905cbdac02c5d58cea00bcc0cc88c20ae91f545d60001b6200084c60201b60201c565b620006e67f12c8ded6a17958a45f9c92e331b036b3a9542b545973c6bebe9b1ccd39a4e30960001b6200084c60201b60201c565b6000600581905550620007227f40d83f9ffe45696483ccedfd792c70c053c8792f446a9e918049766944fd91b160001b6200084c60201b60201c565b620007567f69e3c493eeb29373fac2728f0299ae7097ac3a97c78c980721b7ca20e4f0ac7d60001b6200084c60201b60201c565b6000600681905550620007927f3f8938beb058ec148584c689eb134005a59c26a91717022ea12a8833322aa6ed60001b6200084c60201b60201c565b620007c67f266db05ec38475e2ac5d66546a45bc28efcc3b233aedaa26fee6be5d2533c26960001b6200084c60201b60201c565b6005600781905550620008027ffdec301f82d7ec02bec4c79c93fc7180950cfab513b43401fb3e2e6ac073040460001b6200084c60201b60201c565b620008367f4d59c4b5f1bd3ef8b6cd1dc716b672a1ff46aa9b76f1f69a8298874a506e22f260001b6200084c60201b60201c565b60056008819055505050505050505050620009bd565b50565b600081519050620008608162000989565b92915050565b6000815190506200087781620009a3565b92915050565b600080600080600080600080610100898b031215620008a157620008a062000984565b5b6000620008b18b828c016200084f565b9850506020620008c48b828c016200084f565b9750506040620008d78b828c016200084f565b9650506060620008ea8b828c016200084f565b9550506080620008fd8b828c016200084f565b94505060a0620009108b828c016200084f565b93505060c0620009238b828c016200084f565b92505060e0620009368b828c0162000866565b9150509295985092959890939650565b600062000953826200095a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620009948162000946565b8114620009a057600080fd5b50565b620009ae816200097a565b8114620009ba57600080fd5b50565b61657b80620009cd6000396000f3fe6080604052600436106102135760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e146107de578063e39f610114610809578063e438a77d14610834578063e714a0281461084b578063e7585aea1461086257610294565b8063b6b34c6714610748578063b6b55f2514610773578063b7eb85c41461079c578063d5b2a01a146107b357610294565b80639e45e0d0116100e75780639e45e0d0146106615780639ee679e81461068c578063a4e2d634146106b5578063aaaa0c4b146106e0578063ac3479871461070b57610294565b80637ecebe00146105b757806389026538146105f45780638da5cb5b1461060b578063901a64981461063657610294565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f146104be5780636664e42e146104e95780636ec21cc81461051257806370a082311461053d57806371bbef361461057a57610294565b80632e1a7d4d1461041457806334246f9b1461043d578063372500ab1461046857806363ffab311461049357610294565b806322366844116101e2578063223668441461031b578063270016fb1461034657806327b380f31461036f57806327e235e3146103ac5780632e0f2625146103e957610294565b8063023c5b08146102995780630d3daff4146102c45780631261795d146102ed57806313a0ae2b1461030457610294565b36610294576102447f75e2f740915a3cc8e356ba3de03b6311a994f3b3e237c881143a486c85f653bf60001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161028a9190615e2e565b60405180910390a2005b600080fd5b3480156102a557600080fd5b506102ae61088e565b6040516102bb9190615a31565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061550c565b61088b565b005b3480156102f957600080fd5b506103026108b4565b005b34801561031057600080fd5b50610319610c61565b005b34801561032757600080fd5b50610330610d96565b60405161033d9190615ade565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190615452565b610da9565b005b34801561037b57600080fd5b5061039660048036038101906103919190615452565b6116e5565b6040516103a39190615e2e565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190615452565b6116fd565b6040516103e09190615e2e565b60405180910390f35b3480156103f557600080fd5b506103fe611715565b60405161040b9190615ea9565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906156fe565b61171a565b005b34801561044957600080fd5b50610452611e99565b60405161045f9190615bb8565b60405180910390f35b34801561047457600080fd5b5061047d611ebf565b60405161048a9190615b67565b60405180910390f35b34801561049f57600080fd5b506104a8611ee5565b6040516104b59190615b45565b60405180910390f35b3480156104ca57600080fd5b506104d3611f73565b6040516104e09190615e2e565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061564b565b611f79565b005b34801561051e57600080fd5b5061052761238f565b6040516105349190615e2e565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190615452565b612395565b6040516105719190615e2e565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c91906155dc565b612462565b6040516105ae9190615e2e565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190615452565b612802565b6040516105eb9190615e2e565b60405180910390f35b34801561060057600080fd5b5061060961281a565b005b34801561061757600080fd5b50610620612cca565b60405161062d9190615a31565b60405180910390f35b34801561064257600080fd5b5061064b612cee565b6040516106589190615a31565b60405180910390f35b34801561066d57600080fd5b50610676612d14565b6040516106839190615b9d565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae91906156fe565b612d3a565b005b3480156106c157600080fd5b506106ca61344e565b6040516106d79190615ade565b60405180910390f35b3480156106ec57600080fd5b506106f5613461565b6040516107029190615e2e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190615593565b613467565b60405161073f9190615e2e565b60405180910390f35b34801561075457600080fd5b5061075d613627565b60405161076a9190615b82565b60405180910390f35b34801561077f57600080fd5b5061079a600480360381019061079591906156fe565b61364d565b005b3480156107a857600080fd5b506107b1613e56565b005b3480156107bf57600080fd5b506107c86142dd565b6040516107d59190615e2e565b60405180910390f35b3480156107ea57600080fd5b506107f36142e3565b6040516108009190615bd3565b60405180910390f35b34801561081557600080fd5b5061081e614309565b60405161082b9190615e2e565b60405180910390f35b34801561084057600080fd5b5061084961430f565b005b34801561085757600080fd5b5061086061458b565b005b34801561086e57600080fd5b506108896004803603810190610884919061547f565b61492d565b005b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e07f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b61090c7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6109387f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6109647f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90615dce565b60405180910390fd5b610a207f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b610a4c7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b610a787f05c52e2e757b704ee37cacc85bcd2ad31fe4940327f21c40eee49cc43f40b54c60001b61088b565b610aa47f4e365342f0946657194340f9abcecb6efff5ad753ee4a810ac628874d9af7e9960001b61088b565b610ad07f1cfd4bb9ff4d7b04472d64ac4c71f02514058461560de91cb2d6adf53c42b03760001b61088b565b6000479050610b017f2f887d90a6ab98f6d741d4f5e87bcff7d89d8ec3d643e5ce3fff9a84f8f0431560001b61088b565b610b2d7fff8f4728043ff8198c1aa493e774318cefee1508be4f7bcebfa10ad136884da160001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b95573d6000803e3d6000fd5b50610bc27ffaca8b38bad904074d007a99936885c24bd108a1a46b38f4c8a00f65f54cd4a460001b61088b565b610bee7f52257046d0c47f4ae30056e2e831a9c4ad542da6194311c529bbaca75e2091a460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b82604051610c569190615e2e565b60405180910390a250565b610c8d7fe37cf64a6e2d819f234a4ed5d51ffe87eeb65d17ad7e35edd2866d470c0e686360001b61088b565b610cb97f2c9a5bb9934ad26fd47b925cf7e21513a09ad2300a827ed2c6a3a289f35a1d9060001b61088b565b610ce57f610be81338132ba49157beb1959166f8826c8c0f9c6a3330c48198fd0eeb4dca60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610d629190615a31565b600060405180830381600087803b158015610d7c57600080fd5b505af1158015610d90573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b610dd57f1b7825aa90ae0390b7d08f70ab0ae77d4e3bb14784180749876c960ac9b0ac1f60001b61088b565b610e017fe5d6d09a3d2fb99a296c779de820bf5b47d0d6f14a8f234e9754c9e868ec0be760001b61088b565b610e2d7f9c1e4b135d12400212e4ad6cd2df6468eda7cf557ee72c89ff703f31750e7a6760001b61088b565b6000339050610e5e7f5910a6bcf8f721265348162504d272c5b0f807035f38eb0c6ca693a94e8deffa60001b61088b565b610e8a7f106075404d6754987900f9233375c5b2945bf733a624630b8d96373a6a8ae95660001b61088b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610efa7f822f65ddaf2e607f4c7a283fa11fc92b424479b67410f230d15ea4fb4865971560001b61088b565b610f267f7e47b30d64bd58c0773b828730e6c8c6229b9d619842fffda31181ed9a85574160001b61088b565b610f527f6b311aced70799415367572deedaaa37fc2d86dfa5e52389181ee2e4fe4ad8a560001b61088b565b60008111610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90615d0e565b60405180910390fd5b610fc17f55055761879b72e301ad794768d65cf85b05a5442eb810baa507aa0600b5b72260001b61088b565b610fed7fbf5f0e0c4cd66ac25aacc3651d4816f49e3dbeea067ba3e773c5cbec8a378f0760001b61088b565b6110197f597dde0e30053f3ea38523fa6f930598e34b609168b281c7abcbdc2fe7988b7a60001b61088b565b6110457fc33772c7445a06a14b8d406a5b8bb43db3ca4350b24f9f847631fdfba6f604a160001b61088b565b600960009054906101000a900460ff16611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90615d6e565b60405180910390fd5b6110c07f76d1ab5fb8855340dabcf4b821d1f68d704af7d2f9035659d48e2b4efaece8d660001b61088b565b6110ec7f47205d4b1d29ee305649aa041477551249ed1fa9f01ad462ffb65bae290a0ac260001b61088b565b6111187f49bdb3ce7951ecb7bea005dfd30a6772da8f08d236f36e6019501285080662a860001b61088b565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111679190615f83565b9250508190555061119a7fc032f76a87a7e2826ce0d5088a4138e028bdb3f2cada9ea0e5f689afd2d1ad2960001b61088b565b6111c67f4652e6dbc832be59bc667848acf85b891f1f58ef4839bab6506be1d9763b93a360001b61088b565b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611215919061600a565b925050819055506112487fb0eff535c822e8773d9caeb51f1a3846b17897c05af550dcbad61ee8fd400ca260001b61088b565b6112747f3662a377395bb0c84eac6698ba41046ef66cad594bc79b8a06f8f2d7f9330fcf60001b61088b565b8060066000828254611286919061600a565b925050819055506112b97f84aeb101a1c6c79818056f07d46d65854793d51300a53280f22f03d8cd365b7360001b61088b565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556113287f6e489e1dfb4efdce3e05d5112a935838636c1a0bc5ad16b2ffc03b2d6f1c2c2560001b61088b565b6113547fa3f97cae11f557a8e84ab2271a1e95206cdd9cd8843ccfc354eb6914467cc83160001b61088b565b6113807fb56281bb47c3206160a8b6d3ecb34db114633f9a0329b9e884d36fc6a6e7c65b60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b81526004016113df93929190615a4c565b602060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143191906154df565b611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790615cce565b60405180910390fd5b61149c7ffd80b2161784d2215aa16dfd2e9cc91de051ee762a169a1f26993e82048e822460001b61088b565b6114c87fddaa8e4211290e97a33eb5de792407763373670a9146580f0797ae8f6ed1f9f060001b61088b565b6114f47fe8a3fca5146ae0857120f0dd48ae60183563a99196a91a377b18d9a7c9e1db2d60001b61088b565b6115207fd47245ebdbc26f5b023f7c640f49a4b60c2afb5105846adb10a5b76622a9cfee60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161157d929190615ab5565b602060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cf91906154df565b61160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590615dae565b60405180910390fd5b61163a7f971f1c7f983e8348c3a489526c166137069c307e0ce33c5d5d3a060345f78c1660001b61088b565b6116667f857b0616aa26a6db7dbc70360d536dda2d077bcbeaab366731b87902c79fea1c60001b61088b565b6116927fc4b676c6a5574acbd0faa328db7a3daa0ae7a24af83cacd33f095d0f61a632ac60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af826040516116d89190615e2e565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b6117467fd253d371aa496259c53ff219dd6c2b30b672ca88f4e9ce6e35c4c5ecdad2a35860001b61088b565b6117727f5d397fee8e47be68ce42e27ab5a3a160235c2847699309a52e820e730996777160001b61088b565b61179e7f4317e362befb24472a05279a031e77edd03765f728350f384d1d1f4718072aac60001b61088b565b60003390506117cf7fb5328d63929cbd898986ae7afed33543de3b5c7a6c2015c4628db0a52fb80bf660001b61088b565b6117fb7f685ea125b5161ae63a97cedc43503512a137bc61a07314c52339db47435d909160001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061186b7f3a277c9cae702c6c504c89ac8f6a4b8177f7f11e3627814bd46813a2c9113a0c60001b61088b565b6118977f5840a65ca05aef07dced3d77a19d16920a7eeb814e3818c43166ab3290b4ec7160001b61088b565b6118c37fdb0b85bfdf80beecca5aecdbcdaca669f202a1a290ff92f2d1db5f858f8dcde860001b61088b565b60008311611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90615e0e565b60405180910390fd5b6119327fc446d280f23d3aac3cab23dc9c640c2beacde992c46bc46af3308bab77d592b560001b61088b565b61195e7ffe9e6910507ffb03cb54fcd55ac6e3d16b027ae4d336ef57fc75a51647949b4360001b61088b565b61198a7fcc32652760fe0ca43b7c58ad8814773cd7959dc9ef467bf74a793e7af907b8d560001b61088b565b6119b67f72d300426a293f62b4a23ffd15b541eda1a80d5e38aad8063bedb977c7e7388460001b61088b565b6000811180156119c65750828110155b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90615d2e565b60405180910390fd5b611a317f7156d2250145c89faded3bb8e741952a6c78e4c779df3048ff2b6ecf3113fe7d60001b61088b565b611a5d7fb962d4ce4ce9917d2af7dfd8414a0b44b434e50d0555617c9615fe314cfde03b60001b61088b565b611a897f114e7bdd036aa290c59e509dbc3a2c690180101b4f35d979b57cbfeea1db7d6360001b61088b565b611ab57f6b9ef942557d4e31d759cfdce44b891ab322c40bda685bf048ff376547949e4160001b61088b565b600960009054906101000a900460ff1615611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90615d8e565b60405180910390fd5b611b317ff436f224082ac585c31fb9f33d95d83113350cac3e1cbe81f8d737b3d65c32c960001b61088b565b611b5d7fbbd2725ab468a68cec20f820724ed618d3599533c2cd503eece66e8495bba69360001b61088b565b611b897f84e32760e32f5881d982bcd2e39de574f44bbfe7ed692571f4feab07537b328b60001b61088b565b8260056000828254611b9b919061600a565b92505081905550611bce7f582f26639188ba751f0d825ddff21eaf885840bd9195bcfcc9d0cda70e8ee2b060001b61088b565b611bfa7fe82805271728f16a8544fa042546935c187ba6662fcdc51fc578db660a93434c60001b61088b565b82600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c49919061600a565b92505081905550611c7c7f3d145496fb626ae282c1566beb8d9b6241fae437fb0e4bafd3e36a4968ef9c1a60001b61088b565b611ca87f2b99d4a62170ad60cd9311616b430637778c69f1c9d4216bc1a61f48703b3a5d60001b61088b565b611cd47f9be7c8d8a3dde1332838df312540a9b381968ed9358c283b67a994cf8e69e19f60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401611d31929190615ab5565b602060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8391906154df565b611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990615cae565b60405180910390fd5b611dee7f0d9de48cb15ac3d9337351b9cce4503ed84ca1681e6c727329d94a2775af4b8960001b61088b565b611e1a7f05cc821254c0266df6bc950cd27545caafe07f6e9a6fef19e132a0234c91737560001b61088b565b611e467fd013653b53b09cd103faa3406aa693b3ee9151c1974fa804824ae3bfdff1026260001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611e8c9190615e2e565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611ef290616181565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1e90616181565b8015611f6b5780601f10611f4057610100808354040283529160200191611f6b565b820191906000526020600020905b815481529060010190602001808311611f4e57829003601f168201915b505050505081565b60045481565b611fa57f1d30e19c0a3dccff1e6fc17ca4c1b94a05c7248f6679c42103df6a9640f1e52f60001b61088b565b611fd17f8f755842022f87b07e5323b604ab9e6bb3784a8d19bab58cb751435e9df3181760001b61088b565b611ffd7f1ed6ba9c1f073a5c1bee896b505100922b4af28491602884bb187f53876a59bf60001b61088b565b60008585604051602001612012929190615c10565b6040516020818303038152906040528051906020012090506120567fae6c306e62247c0d1c4994464d4a84d56441a757e3d71d10c29b594d8cd9202a60001b61088b565b6120827f263614f606e3e1374066fb66a7b1e0bfc76b2b9da372903a1d06d17e6d6ce1ad60001b61088b565b600083858360405160200161209993929190615e72565b6040516020818303038152906040528051906020012090506120dd7fa42606bea1394035bab4e8564fdfad92b2105e3bcf9924da9ff6f033206d32fc60001b61088b565b6121097f8349e9d560842c82407a62a9aff5e4f42cb779631a568028b95ea516bc3ebba060001b61088b565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016121669190615bee565b60206040518083038186803b15801561217e57600080fd5b505afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190615566565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016121f49493929190615af9565b602060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612246919061572b565b90506122747fb6a41f4dc948c75b618f7bd6304c2b98c7dc8163497ef57aae1304ebeb3079d460001b61088b565b6122a07fca567cf18071acdafbe1d94b7fb20f384a90f463eeeac1573df0f91d57c57d9860001b61088b565b6122df6040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082614e54565b61230b7f73f53fd5cf6da273b63f5f0dcdd6c37b37c856b26f91a72b138e83a5833e0a2e60001b61088b565b6123377f96ff8fe24babf7b2b785db85781763314634fd16d22e35569828445d64570b8360001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161237d9190615e2e565b60405180910390a25050505050505050565b60055481565b60006123c37f31a509deb94499dedc18c845a1da22a74fe4846b54425940d6a93cb3d118200660001b61088b565b6123ef7f3a66f13e243f61519a1b0cfbdfbbfe32a7ec0b8e57637f7de3fc7b2c34064ce360001b61088b565b61241b7fc217b4b50e2fb244bb873656335d721ed2fc97e1e354da90aa63d47dd20b207360001b61088b565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006124907fca487471bdd9aa13489eb5f3f32b62ad60b47bb56cb102ede63f4f0b579f73b760001b61088b565b6124bc7f2535d037b1683a14a92447b3be58ec0750b0b2b70bc9ef63f4ebd40ed571a97d60001b61088b565b6124e87f1d02e48e8d2f47776f581ba5b674c503fe65e743c18d90924ac99dae24a2d19a60001b61088b565b60003390506125197f25677934f7a8624c99feace478e3838c880e59096e3b901f7b530ba074cfa6a060001b61088b565b6125457f85b1b6126a5cce53ea175cb0f11e41fa19e9ef2d1d4c438f1c932ac6eed2d37b60001b61088b565b600061271090506125787ff8a4749223ccd8e9131763b16141e6068ddd41b0b78da9ce6b4283f70bf4d6aa60001b61088b565b6125a47f97da511c387193486c20c1f8c76ae3cc2c0cae6d88d113da83697f4593116cbb60001b61088b565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161260593929190615c40565b602060405180830381600087803b15801561261f57600080fd5b505af1158015612633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612657919061572b565b90506126857fd63c3bdf56ff9a0ed983ac64d4a9694f7cb8486971f2feaaecf13a416875695760001b61088b565b6126b17f32ff0076f11ddeaaae839726a7bf9f22d20f6e94cb8dea49dea61227090570ef60001b61088b565b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127217f8fed9a9f3f8b541522b3fe9ae95e41483ab8f28725343c6036ff1f3863c840a060001b61088b565b61274d7f40744a5adc7dede95171f7e6262bd372bff36aeacc869697c2251a9cc926dd9a60001b61088b565b8273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3258683604051612795929190615e49565b60405180910390a26127c97f1264f49a1a4af51bd542265fdd3e9dfc169dd7839195ce56013f71f967811e9360001b61088b565b6127f57fe668275fd30bb602dddfefeb82075f739e4d0fbd6b95e46d4a55559c5518009560001b61088b565b8093505050509392505050565b600c6020528060005260406000206000915090505481565b6128467f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6128727f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b61289e7f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6128ca7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129715750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a790615dce565b60405180910390fd5b6129dc7f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b612a087ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b612a347fc745dce6b4caa7abbb57e16fe5cc6ece34ef7cb67a7c6a322941b2e913039a8c60001b61088b565b612a607f598041f1972e682f66d793944094e7bd1558156146ae8e4e3e88da8ee30bbd7760001b61088b565b612a8c7f7a138529b906ac0b8444a00eec9b0a4fb5b817ad47804fc90a2482b1d48392c960001b61088b565b612ab87fed353c665479901eb496b4f04bd40aa56048fa154a005fa78d89774a48b4b2ac60001b61088b565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b159190615a31565b60206040518083038186803b158015612b2d57600080fd5b505afa158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b65919061572b565b11612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90615dee565b60405180910390fd5b612bd17f7a4bd7d3b5d4a0b88e7a7929e9102493a1e848c1fb0e60987ca4d0ced711935460001b61088b565b612bfd7fca81ba1a74f335042ae9c17057696a3cc8f51bc9d709a0d6cd8826e53292640b60001b61088b565b612c297f62e3df508415902ecf4b19c17e804dce5f329a8c98c2b74ae818f9f9c5e6b24b60001b61088b565b6000600960006101000a81548160ff021916908315150217905550612c707fa388602cccf298af3053c42d01ce8bcd71c151284b2c40438cc9bde2d32a936b60001b61088b565b612c9c7f81a35da6fbac67976f428cfc58221966c6b96694368149ddcf16417a2c2dd50260001b61088b565b7fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d667f26cbf179f7efd8b75a45afd485d03269335503c4c7d663a01da7abc1db505b5a60001b61088b565b612d927f0b35bd650e7f0f6af539cfef1d21764edfe4d988a8a85b7d4a2a7b6ad457939c60001b61088b565b612dbe7ff1f66c3fa7ecd0701591c2499bac3d3e0bbd3da7c2837e657659d89cb9c6b15c60001b61088b565b6000339050612def7ff5febd7ec3845aa06a6d9cf1efe47448a8f7cbb99feb84b68986dd3807dcc4b960001b61088b565b612e1b7fa59de6797f69e60dcc30d88a027c2f0c1f474b3242ea84af0c5cf2c328d76b0060001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e8b7f63b70bc7e84a11b91656cf54d5f0ae86a3b3a5c9e56803971e3e363bb422737460001b61088b565b612eb77fe05341f955bcb0cb8b81f870d8a0b8d8c3dc4ce360adfc4713a276f66f2448c560001b61088b565b612ee37fa5b2c5a92ab65f91a2b2b75c37de52338ce3ac7acc2837994cea8b42e9c3491760001b61088b565b60008311612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d90615e0e565b60405180910390fd5b612f527f1e45e73f6b9e4264577e35dc8ffc461a56844bf2ac7102bf0f93a47a9af1354060001b61088b565b612f7e7f657cdacd08421927f813c49d0d19085875e04d6c990b19d8d77a0e176e9f150760001b61088b565b612faa7f1165dd2ecb3273e9c0c8aa3106a83fcfea6bbeadc15cb70ef0581b2d572f052b60001b61088b565b612fd67f15e32cb322af197bb209048a33e9d342f4cee745660e28ff573d49a634ab875260001b61088b565b600081118015612fe65750828110155b613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c90615d2e565b60405180910390fd5b6130517f49df5a88bf96bfc8553fd325a0078b9eb3cf693032126677a117620c48088d6160001b61088b565b61307d7fb2fb3f9e569f6ba0e40e71632edce63429d381a386a32e5acc7e93ac9f1ed07260001b61088b565b6130a97f76e76c22ff5cfc1de547fdaef1c663c789f54cf0f035d888dedaae997f9a5af260001b61088b565b6130d57ff7ac82c9fe3334f99b376f7ccc15e3bd486f7608e704396d198c5fbee920910660001b61088b565b600960009054906101000a900460ff16613124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311b90615d6e565b60405180910390fd5b6131507fcf6a12e1cd198bf6ca60da02170f68d4b0e814d5658c2a50b77546e46ed27c0e60001b61088b565b61317c7f39159dbf78f3f0ac68f5624755f255b252ba73efcb09bb11e8a46f55c45a211a60001b61088b565b6131a87f15431f587883f96473e5ecba4d2475bd679f8afd7637a255a26cf99290d7049260001b61088b565b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132187fc94424670b2acc58f3a0711c9a20649d861090556658dad55c6c6fdc6e66291b60001b61088b565b6132447f0f351ab7469d1eeea658c04b5a24b4d5465fabefb1d6a152c7e194a2da2f8cf260001b61088b565b82600660008282546132569190615f83565b925050819055506132897f6b70f9eb11dd18a30449e9acff011df2739c2e3fc0a55bedad775864df885f4460001b61088b565b6132b57f08e3f956e37aa93868798b87ba511814ff2a4ed6329842984f7f211932f8929560001b61088b565b600960019054906101000a900460ff1680156132e0575060026004546132db9190615fd9565b600654115b15613376576133117fec092a5c98ddf912a2d86739fc961b862712ee89e85f1db7a177a396660299af60001b61088b565b61333d7f0c57ee4de6b3d52636fc9d97739148d781605612ae8a391edbbfea66c1118c5760001b61088b565b6133697f7f89d70b41db3472dc665c7438929780e988416820c8a638b01c538ee4eef2a660001b61088b565b613371614ef0565b6133a3565b6133a27fc15708d2924af7e37f1495dccfc0c4dc10aa06e6e6e0e0d71b88e00eab1a503a60001b61088b565b5b6133cf7fe0f35eabde6523d6038de32fc93d86b1cc186b0054941c8992e759d6d3c2df3860001b61088b565b6133fb7f07ad238c38e62635ae4f7548bba2ae6cd242311b88a9398a54bd7cdbbcb1e98160001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516134419190615e2e565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b60006134957f3fe2f4324a2e760f0766534b9d6e9f29f9cc27ade7d03a5a6f947093b345f1b860001b61088b565b6134c17f7df27044d66cb6219fbf90afd8ae6dd3bcdb0dc9c873ce799c75241424ee6fc060001b61088b565b6134ed7f468cb06af0b85c63d40b46798f28c621023247e9032f88fd3876e9d71d1d23c460001b61088b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016135489190615bee565b60206040518083038186803b15801561356057600080fd5b505afa158015613574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135989190615539565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d09190615a31565b60206040518083038186803b1580156135e857600080fd5b505afa1580156135fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613620919061572b565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6136797f6812cf59e4b81ddecd8f2b1f7fbfb48b5182a806c827c0dfd05826d7fdad744960001b61088b565b6136a57f6d077b16afa206e4b568904344b706c3bf698bc65745a3ab81ba91b666ba8bb160001b61088b565b6136d17f961b31b0eb150899b4350ba97c40fb4f4d6656a921731af079df31ea55c6db2560001b61088b565b60003390506137027f3100b3e748ce2c25beefad0a12161300b7eb7aa29cafb67305ef383dc277160f60001b61088b565b61372e7f385b5445321ce7fb324cebb72f2c150ebd70146da3cb1ded1086c09b2ccbec0060001b61088b565b61375a7ff55bde5e737caaf341b382e518d464d8c5b1aa65315865fb88f91b2534783fa260001b61088b565b600960009054906101000a900460ff16156137aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a190615d8e565b60405180910390fd5b6137d67f214b43e1a3ddb53264f0b0db58e7b94615fb4ae1c9edd4ed2bf1ddf7dfb68efb60001b61088b565b6138027f50901d754c8ff743aeb1bd9a17e9f767ec52d345e6dfd63e5e10a6fce53adcdf60001b61088b565b61382e7fbf5d8c928a34a9c5c5365b2256612c07d374f9064e0b0ee8d2b00ba83ba0055260001b61088b565b61385a7f501eeb26b24ce8a68e277150ad68774a06a38b18e81e167fba877d2d826d99ee60001b61088b565b6000821161389d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389490615e0e565b60405180910390fd5b6138c97fbb448e98ee5bd5bbc8e90971a18790d4ff69782ebb33c21b28f1d20078f3c6b360001b61088b565b6138f57f77bc78ed40585665c813ba7b08aa8cf6df2b82b2a7a9f5e13d9c65084bb6cdf260001b61088b565b6139217f9b51cdc0b1a01e554d06ae11a86eafd3ea29357887f30cef43e79b2ec6f07e5760001b61088b565b61394d7f89fb973c7fcef47842f79c7ef02a300b67e0b44fbefe8a63caec10f6a1d581cd60001b61088b565b6004546005548361395e9190615f83565b111561399f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399690615cee565b60405180910390fd5b6139cb7fac43ba5f87537e62e043ca97e2cee4541c0b1b8732e5d20736ee5d603909667360001b61088b565b6139f77f5be99f9f14ab7072461a997c5d413e55a81c32b63fd0d3cbf35e34bcf6ba2c0b60001b61088b565b613a237f3c53ff17b87feec27333ff84ed363b3f254d41cdbcf73d860090d7dd2a58fe4160001b61088b565b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a729190615f83565b92505081905550613aa57f3b65e0ed8fb8940554df654388f38b5444dbd30be91cb6b12bfbd1dbfe3fd55c60001b61088b565b613ad17fb8bcbe9c6ad2a8fac47c3fe3876d62e3fa450a2600649582b90710de362f701a60001b61088b565b8160056000828254613ae39190615f83565b92505081905550613b167fba9a374a98aba0dbe7dd86c7fd20661f0c15f66d54169df91b446c3d188788fc60001b61088b565b613b427fb1f191f0583e4bb4d953dc0f37ac771bdec7046a3d9b5f3b6a4ab7b8aac77f7d60001b61088b565b8073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051613b889190615e2e565b60405180910390a2613bbc7f486fb738975ecec9405ba5e2e93bb2b9065807aaa98d7e84313d1a769cd9174b60001b61088b565b613be87f216de3450f5e193a4873452e4fb786f63c5ab96875e7d91b9d72e9976c2dacb660001b61088b565b6004546005541415613c8557613c207f321714ea0ca82c0ae4ced0eea43387cb70df05aed21dc41a5edb1f2cbf2a544f60001b61088b565b613c4c7f13c519873b6a74031534ae786c5ecb3b839197d8653bd4dd3b886189f68585cf60001b61088b565b613c787ffb903ede64abab5c4a4dd814a6b2bea062f38014eea16741cb13d329498c6e2c60001b61088b565b613c80615098565b613cb2565b613cb17f3b38dc18f36c43c1cdc93d9c9afd8198487661d8fb689de9b4f2f0e6a0e2cd9260001b61088b565b5b613cde7fa59a194aee07e9449a5e12e6a9c1309f3a77274b2c41d17202832fa73cdbb9d260001b61088b565b613d0a7f8bff06d6c050958f0341bd5337c72cf3180a48ea8cffb7bd705e4a0ea2a2cdf860001b61088b565b613d367fc1bdf160f736625adbc4369faa91d20b26d5461ce70399b253a4b03105ee685460001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401613d9593929190615a4c565b602060405180830381600087803b158015613daf57600080fd5b505af1158015613dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de791906154df565b613e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1d90615cce565b60405180910390fd5b613e527f38c1730c33ac2ca7d80e3b8ec186a9f3f9b7dff06c2b8a678401a78413d288f660001b61088b565b5050565b613e827f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b613eae7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b613eda7f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b613f067f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8d90615dce565b60405180910390fd5b613fc27f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b613fee7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b61401a7f90d06bcd2ffadcd0c672766d630a5e192a6df47343607633bc683f5c0f131a8f60001b61088b565b6140467f4241bda9706ccd59d2f916698730326bae7836279367c2bfabaf6282d664a0e360001b61088b565b6140727f1ce7ed20e1651871d107033ede1384abc6575db7d46b56876fe8c43dbdf8bd1160001b61088b565b61409e7fd9a21af0d539c936097a5675a96c298c62ae82b94c030338d706a15ddf8e561c60001b61088b565b600960009054906101000a900460ff166140ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e490615d6e565b60405180910390fd5b6141197fc663d70129d4d863ec27f11d5bf1ea3c0238beeaab56b10f7a01d0344c7ad9de60001b61088b565b6141457fe2e45372a779b8f08033320b5550d0bac09caf08e95907923382ec79d0ff017f60001b61088b565b6141717ff6dc33cb68fee699ed81458de372a213024e78b15b0a015f46263bd8ce0dcdb260001b61088b565b61419d7f6b5feba8981a5b615a400148643de70390891b55899d721712cf9d6249c6573260001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161421e929190615ab5565b602060405180830381600087803b15801561423857600080fd5b505af115801561424c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427091906154df565b6142af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a690615d4e565b60405180910390fd5b6142db7fc014e6b3289b7ed79e4ca81e2c6abedd98221128b0e4d5deacdafb51f0d4c5bf60001b61088b565b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b61433b7f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6143677f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b6143937f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6143bf7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806144665750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6144a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161449c90615dce565b60405180910390fd5b6144d17f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b6144fd7ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b6145297f37315b138a4eb1f3e6961d3245e9f125c93e7013153d744cb4e744a5607a183660001b61088b565b6145557f6ed68854798f914348bf7c98baff5db65f282eaa9a709a788599507555af477260001b61088b565b6145817f79bf2ddfe07abf5f091c46b1951be01b9468b1cb19cc3ae745bf2f1a25aa5c2260001b61088b565b614589614ef0565b565b6145b77f9c1de37707e398b1ef2c8fd674c6d609a77b714460ef98eed74986a3e0c59a9b60001b61088b565b6145e37f9880b690349d44bd00c30d83a823c189c97351b9747b76f4821f133ce40a621760001b61088b565b61460f7f071f09138def1d09107b15f7cbd047359e4c5b24fe265bef940564ffd045f6dc60001b61088b565b60003390506146407fa4297625721f48f13f4c994dbac3d6214bc4a1a14b2d59dc565beef32dafc67b60001b61088b565b61466c7f25e231d523b598d7d8e9107f060d4480cceea8cef7acba5c23289a768ec080b960001b61088b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506146dc7f0945e46252f3b1bdd5d6b058f7cc014e184c7d21c76a983634d6269a65f0eb2c60001b61088b565b6147087f80eb402c0fc27561f19d1e7e68c0279eeae29207c8c857184b14ae4a19c79c8460001b61088b565b6147347f87185c95126b0a5b95a24765d79623c7a8a80645fe6ed86630f575973552247160001b61088b565b60008111614777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161476e90615d0e565b60405180910390fd5b6147a37f9479095e5c739fdfc501dd11d560a7418784699a4e1fa050ca62b420c9eb8f2560001b61088b565b6147cf7fbc7e949c9fa429aa39b9ce6abdf5c91a9aa383d19ae7aea7d461ef4962f26a6260001b61088b565b6147fb7ff40deae3c36b7474f3900bf336acd672fa06cc5b2faa275a99f60208a8b2415260001b61088b565b806006600082825461480d919061600a565b925050819055506148407ff3864655fb7564ff57fe9c6a439df1af0fece6a0db5471d85f113807bfae220860001b61088b565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556148af7f28de215e6016601450469219da10f355a14aa091c80520bcd791d2814f94895c60001b61088b565b6148db7f9a5bcbce21b940dba9cfbee6583452cde02592adaf1d35189ff586522fe4b3fb60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516149219190615e2e565b60405180910390a25050565b6149597f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b6149857fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6149b17f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6149dd7f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a6490615dce565b60405180910390fd5b614a997f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b614ac57fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b614af17f6474bc7b6c4c817e394a7770bcd8e9a3c367d41128bd02f30d9481664cc0edf260001b61088b565b614b1d7f35e3552e64d39c55309e0837bb68952eff825a965df10321e8ef06d8fa5a087960001b61088b565b614b497f5d1afb46bd1a2ae6aaa17481bd18b7019f1797881481135b1c94ccdcafb8339f60001b61088b565b614b757f298439278aab97593ed1479b65d64e72155e1d6df91562f07fe08092674c1a1a60001b61088b565b600960009054906101000a900460ff16614bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614bbb90615d6e565b60405180910390fd5b614bf07fefd324418f85207d4866beeb69e0fb6cccc15952ee8f4a6f7e88a2edd1345efc60001b61088b565b614c1c7fdb767e3aa2d03e1795b42198a2f94b68dfbc40904ef33967d1c7dcbd59ba0e6160001b61088b565b614c487fa60ba8065f646238e091b8e848671c7dd02b9e1940d25c74f3399ca8366eb6c860001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b8152600401614ca793929190615a83565b600060405180830381600087803b158015614cc157600080fd5b505af1158015614cd5573d6000803e3d6000fd5b50505050614d057f8d07e304d85e68966ea24bdf0fc6a7f038d59c72d847080d68a900c263e0a5d460001b61088b565b614d317f56450edd407148d8fa256d2068078a85def32b5856a9371ce8bb7686d799e22e60001b61088b565b6001600960016101000a81548160ff021916908315150217905550614d787f4a0abfe447e7e73bebebee8a0682f9e642fd53b3233707a6511f4541915448b360001b61088b565b614da47f81f757f4fb3bd969b74a83f57ca49e92c4cac6a4f3a8301c07ece5bcfa664ae560001b61088b565b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e117fd9e6438edd8d7ec14bbf4195a3d3b39e874ed0b07be368c470dc37504bc40db660001b61088b565b614e3d7ffa57c2a9e2e4cd25705c563e3ec471be7ee183591824200753623f34f81f46c460001b61088b565b818160039190614e4e9291906151e6565b50505050565b614eec8282604051602401614e6a929190615c7e565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151bd565b5050565b614f1c7fc6f0eafc16465fcff2bfcf5db8fed53bc9ab9d44b249407ebddca00225f75d8960001b61088b565b614f487f330533b22d1790e609a53398a705433950719ec56bed3778f077aaa3ca0c302660001b61088b565b614f747f5af90a19354250cb53a8c405d0803ec376193cbfcdf5858484dac343300b8e1a60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401614ff19190615a31565b600060405180830381600087803b15801561500b57600080fd5b505af115801561501f573d6000803e3d6000fd5b5050505061504f7fcaf230e320175de72e0c1dc3a48749cacdcf93e9f23fce2f32af0ab65a0509cf60001b61088b565b61507b7f6103720bb3d029f67142afa715f25ed641d66813a3c67b3f1a66238e4f5ea82560001b61088b565b6000600960016101000a81548160ff021916908315150217905550565b6150c47f83ea7233f89237db08578bb94cb062f0c8ec22c9edaade0226e2eb81487d9e5060001b61088b565b6150f07fe1dd018c6aee1cc9338e1dfa90d384822028d0488f4a450b9e38a0d19698239760001b61088b565b61511c7fc147cc81800e10a4c70cc63471c0b57923147deb30705b335733b00a7eb6cd9a60001b61088b565b6001600960006101000a81548160ff0219169083151502179055506151637f64007a2bab706e6aeedbb6cf3d4c9a346f4c38c22f8a31b10262e044d5e39fc860001b61088b565b61518f7f50f10bc90a015108201c5258518b8da2d5a55d32f4468a367423669e81727c1f60001b61088b565b7f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546151f290616181565b90600052602060002090601f016020900481019282615214576000855561525b565b82601f1061522d57803560ff191683800117855561525b565b8280016001018555821561525b579182015b8281111561525a57823582559160200191906001019061523f565b5b509050615268919061526c565b5090565b5b8082111561528557600081600090555060010161526d565b5090565b600061529c61529784615ee9565b615ec4565b9050828152602081018484840111156152b8576152b76162af565b5b6152c384828561613f565b509392505050565b60006152de6152d984615f1a565b615ec4565b9050828152602081018484840111156152fa576152f96162af565b5b61530584828561613f565b509392505050565b60008135905061531c816164bb565b92915050565b600081519050615331816164d2565b92915050565b600081359050615346816164e9565b92915050565b60008083601f840112615362576153616162a5565b5b8235905067ffffffffffffffff81111561537f5761537e6162a0565b5b60208301915083600182028301111561539b5761539a6162aa565b5b9250929050565b600082601f8301126153b7576153b66162a5565b5b81356153c7848260208601615289565b91505092915050565b6000815190506153df81616500565b92915050565b6000815190506153f481616517565b92915050565b600082601f83011261540f5761540e6162a5565b5b813561541f8482602086016152cb565b91505092915050565b6000813590506154378161652e565b92915050565b60008151905061544c8161652e565b92915050565b600060208284031215615468576154676162b9565b5b60006154768482850161530d565b91505092915050565b600080600060408486031215615498576154976162b9565b5b60006154a68682870161530d565b935050602084013567ffffffffffffffff8111156154c7576154c66162b4565b5b6154d38682870161534c565b92509250509250925092565b6000602082840312156154f5576154f46162b9565b5b600061550384828501615322565b91505092915050565b600060208284031215615522576155216162b9565b5b600061553084828501615337565b91505092915050565b60006020828403121561554f5761554e6162b9565b5b600061555d848285016153d0565b91505092915050565b60006020828403121561557c5761557b6162b9565b5b600061558a848285016153e5565b91505092915050565b6000602082840312156155a9576155a86162b9565b5b600082013567ffffffffffffffff8111156155c7576155c66162b4565b5b6155d3848285016153fa565b91505092915050565b6000806000606084860312156155f5576155f46162b9565b5b600084013567ffffffffffffffff811115615613576156126162b4565b5b61561f868287016153fa565b93505060206156308682870161530d565b925050604061564186828701615428565b9150509250925092565b600080600080600060a08688031215615667576156666162b9565b5b600086013567ffffffffffffffff811115615685576156846162b4565b5b615691888289016153fa565b95505060206156a28882890161530d565b94505060406156b388828901615428565b93505060606156c488828901615428565b925050608086013567ffffffffffffffff8111156156e5576156e46162b4565b5b6156f1888289016153a2565b9150509295509295909350565b600060208284031215615714576157136162b9565b5b600061572284828501615428565b91505092915050565b600060208284031215615741576157406162b9565b5b600061574f8482850161543d565b91505092915050565b6157618161603e565b82525050565b61577081616050565b82525050565b61577f8161605c565b82525050565b60006157918385615f61565b935061579e83858461613f565b6157a7836162be565b840190509392505050565b60006157bd82615f4b565b6157c78185615f61565b93506157d781856020860161614e565b6157e0816162be565b840191505092915050565b6157f4816160c1565b82525050565b615803816160d3565b82525050565b615812816160e5565b82525050565b615821816160f7565b82525050565b61583081616109565b82525050565b600061584182615f56565b61584b8185615f72565b935061585b81856020860161614e565b615864816162be565b840191505092915050565b600061587c601883615f72565b9150615887826162cf565b602082019050919050565b600061589f601783615f72565b91506158aa826162f8565b602082019050919050565b60006158c2601e83615f72565b91506158cd82616321565b602082019050919050565b60006158e5601783615f72565b91506158f08261634a565b602082019050919050565b6000615908601b83615f72565b915061591382616373565b602082019050919050565b600061592b601d83615f72565b91506159368261639c565b602082019050919050565b600061594e601b83615f72565b9150615959826163c5565b602082019050919050565b6000615971601783615f72565b915061597c826163ee565b602082019050919050565b6000615994601683615f72565b915061599f82616417565b602082019050919050565b60006159b7601583615f72565b91506159c282616440565b602082019050919050565b60006159da601d83615f72565b91506159e582616469565b602082019050919050565b60006159fd601783615f72565b9150615a0882616492565b602082019050919050565b615a1c816160aa565b82525050565b615a2b816160b4565b82525050565b6000602082019050615a466000830184615758565b92915050565b6000606082019050615a616000830186615758565b615a6e6020830185615758565b615a7b6040830184615a13565b949350505050565b6000604082019050615a986000830186615758565b8181036020830152615aab818486615785565b9050949350505050565b6000604082019050615aca6000830185615758565b615ad76020830184615a13565b9392505050565b6000602082019050615af36000830184615767565b92915050565b6000608082019050615b0e6000830187615776565b615b1b6020830186615a13565b615b286040830185615776565b8181036060830152615b3a81846157b2565b905095945050505050565b60006020820190508181036000830152615b5f81846157b2565b905092915050565b6000602082019050615b7c60008301846157eb565b92915050565b6000602082019050615b9760008301846157fa565b92915050565b6000602082019050615bb26000830184615809565b92915050565b6000602082019050615bcd6000830184615818565b92915050565b6000602082019050615be86000830184615827565b92915050565b60006020820190508181036000830152615c088184615836565b905092915050565b60006040820190508181036000830152615c2a8185615836565b9050615c396020830184615758565b9392505050565b60006060820190508181036000830152615c5a8186615836565b9050615c696020830185615758565b615c766040830184615a13565b949350505050565b60006040820190508181036000830152615c988185615836565b9050615ca76020830184615a13565b9392505050565b60006020820190508181036000830152615cc78161586f565b9050919050565b60006020820190508181036000830152615ce781615892565b9050919050565b60006020820190508181036000830152615d07816158b5565b9050919050565b60006020820190508181036000830152615d27816158d8565b9050919050565b60006020820190508181036000830152615d47816158fb565b9050919050565b60006020820190508181036000830152615d678161591e565b9050919050565b60006020820190508181036000830152615d8781615941565b9050919050565b60006020820190508181036000830152615da781615964565b9050919050565b60006020820190508181036000830152615dc781615987565b9050919050565b60006020820190508181036000830152615de7816159aa565b9050919050565b60006020820190508181036000830152615e07816159cd565b9050919050565b60006020820190508181036000830152615e27816159f0565b9050919050565b6000602082019050615e436000830184615a13565b92915050565b6000604082019050615e5e6000830185615a13565b615e6b6020830184615a13565b9392505050565b6000606082019050615e876000830186615a13565b615e946020830185615a13565b615ea16040830184615776565b949350505050565b6000602082019050615ebe6000830184615a22565b92915050565b6000615ece615edf565b9050615eda82826161b3565b919050565b6000604051905090565b600067ffffffffffffffff821115615f0457615f03616271565b5b615f0d826162be565b9050602081019050919050565b600067ffffffffffffffff821115615f3557615f34616271565b5b615f3e826162be565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615f8e826160aa565b9150615f99836160aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615fce57615fcd6161e4565b5b828201905092915050565b6000615fe4826160aa565b9150615fef836160aa565b925082615fff57615ffe616213565b5b828204905092915050565b6000616015826160aa565b9150616020836160aa565b925082821015616033576160326161e4565b5b828203905092915050565b60006160498261608a565b9050919050565b60008115159050919050565b6000819050919050565b60006160718261603e565b9050919050565b60006160838261603e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006160cc8261611b565b9050919050565b60006160de8261611b565b9050919050565b60006160f08261611b565b9050919050565b60006161028261611b565b9050919050565b60006161148261611b565b9050919050565b60006161268261612d565b9050919050565b60006161388261608a565b9050919050565b82818337600083830152505050565b60005b8381101561616c578082015181840152602081019050616151565b8381111561617b576000848401525b50505050565b6000600282049050600182168061619957607f821691505b602082108114156161ad576161ac616242565b5b50919050565b6161bc826162be565b810181811067ffffffffffffffff821117156161db576161da616271565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6164c48161603e565b81146164cf57600080fd5b50565b6164db81616050565b81146164e657600080fd5b50565b6164f28161605c565b81146164fd57600080fd5b50565b61650981616066565b811461651457600080fd5b50565b61652081616078565b811461652b57600080fd5b50565b616537816160aa565b811461654257600080fd5b5056fea2646970667358221220d1b413200c15d31cb3c760bb1c9647c7ae90a9b5213c395f6cb6b0cfc444f64664736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106102135760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e146107de578063e39f610114610809578063e438a77d14610834578063e714a0281461084b578063e7585aea1461086257610294565b8063b6b34c6714610748578063b6b55f2514610773578063b7eb85c41461079c578063d5b2a01a146107b357610294565b80639e45e0d0116100e75780639e45e0d0146106615780639ee679e81461068c578063a4e2d634146106b5578063aaaa0c4b146106e0578063ac3479871461070b57610294565b80637ecebe00146105b757806389026538146105f45780638da5cb5b1461060b578063901a64981461063657610294565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f146104be5780636664e42e146104e95780636ec21cc81461051257806370a082311461053d57806371bbef361461057a57610294565b80632e1a7d4d1461041457806334246f9b1461043d578063372500ab1461046857806363ffab311461049357610294565b806322366844116101e2578063223668441461031b578063270016fb1461034657806327b380f31461036f57806327e235e3146103ac5780632e0f2625146103e957610294565b8063023c5b08146102995780630d3daff4146102c45780631261795d146102ed57806313a0ae2b1461030457610294565b36610294576102447f75e2f740915a3cc8e356ba3de03b6311a994f3b3e237c881143a486c85f653bf60001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161028a9190615e2e565b60405180910390a2005b600080fd5b3480156102a557600080fd5b506102ae61088e565b6040516102bb9190615a31565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061550c565b61088b565b005b3480156102f957600080fd5b506103026108b4565b005b34801561031057600080fd5b50610319610c61565b005b34801561032757600080fd5b50610330610d96565b60405161033d9190615ade565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190615452565b610da9565b005b34801561037b57600080fd5b5061039660048036038101906103919190615452565b6116e5565b6040516103a39190615e2e565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190615452565b6116fd565b6040516103e09190615e2e565b60405180910390f35b3480156103f557600080fd5b506103fe611715565b60405161040b9190615ea9565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906156fe565b61171a565b005b34801561044957600080fd5b50610452611e99565b60405161045f9190615bb8565b60405180910390f35b34801561047457600080fd5b5061047d611ebf565b60405161048a9190615b67565b60405180910390f35b34801561049f57600080fd5b506104a8611ee5565b6040516104b59190615b45565b60405180910390f35b3480156104ca57600080fd5b506104d3611f73565b6040516104e09190615e2e565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061564b565b611f79565b005b34801561051e57600080fd5b5061052761238f565b6040516105349190615e2e565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190615452565b612395565b6040516105719190615e2e565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c91906155dc565b612462565b6040516105ae9190615e2e565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190615452565b612802565b6040516105eb9190615e2e565b60405180910390f35b34801561060057600080fd5b5061060961281a565b005b34801561061757600080fd5b50610620612cca565b60405161062d9190615a31565b60405180910390f35b34801561064257600080fd5b5061064b612cee565b6040516106589190615a31565b60405180910390f35b34801561066d57600080fd5b50610676612d14565b6040516106839190615b9d565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae91906156fe565b612d3a565b005b3480156106c157600080fd5b506106ca61344e565b6040516106d79190615ade565b60405180910390f35b3480156106ec57600080fd5b506106f5613461565b6040516107029190615e2e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190615593565b613467565b60405161073f9190615e2e565b60405180910390f35b34801561075457600080fd5b5061075d613627565b60405161076a9190615b82565b60405180910390f35b34801561077f57600080fd5b5061079a600480360381019061079591906156fe565b61364d565b005b3480156107a857600080fd5b506107b1613e56565b005b3480156107bf57600080fd5b506107c86142dd565b6040516107d59190615e2e565b60405180910390f35b3480156107ea57600080fd5b506107f36142e3565b6040516108009190615bd3565b60405180910390f35b34801561081557600080fd5b5061081e614309565b60405161082b9190615e2e565b60405180910390f35b34801561084057600080fd5b5061084961430f565b005b34801561085757600080fd5b5061086061458b565b005b34801561086e57600080fd5b506108896004803603810190610884919061547f565b61492d565b005b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e07f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b61090c7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6109387f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6109647f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90615dce565b60405180910390fd5b610a207f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b610a4c7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b610a787f05c52e2e757b704ee37cacc85bcd2ad31fe4940327f21c40eee49cc43f40b54c60001b61088b565b610aa47f4e365342f0946657194340f9abcecb6efff5ad753ee4a810ac628874d9af7e9960001b61088b565b610ad07f1cfd4bb9ff4d7b04472d64ac4c71f02514058461560de91cb2d6adf53c42b03760001b61088b565b6000479050610b017f2f887d90a6ab98f6d741d4f5e87bcff7d89d8ec3d643e5ce3fff9a84f8f0431560001b61088b565b610b2d7fff8f4728043ff8198c1aa493e774318cefee1508be4f7bcebfa10ad136884da160001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b95573d6000803e3d6000fd5b50610bc27ffaca8b38bad904074d007a99936885c24bd108a1a46b38f4c8a00f65f54cd4a460001b61088b565b610bee7f52257046d0c47f4ae30056e2e831a9c4ad542da6194311c529bbaca75e2091a460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b82604051610c569190615e2e565b60405180910390a250565b610c8d7fe37cf64a6e2d819f234a4ed5d51ffe87eeb65d17ad7e35edd2866d470c0e686360001b61088b565b610cb97f2c9a5bb9934ad26fd47b925cf7e21513a09ad2300a827ed2c6a3a289f35a1d9060001b61088b565b610ce57f610be81338132ba49157beb1959166f8826c8c0f9c6a3330c48198fd0eeb4dca60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610d629190615a31565b600060405180830381600087803b158015610d7c57600080fd5b505af1158015610d90573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b610dd57f1b7825aa90ae0390b7d08f70ab0ae77d4e3bb14784180749876c960ac9b0ac1f60001b61088b565b610e017fe5d6d09a3d2fb99a296c779de820bf5b47d0d6f14a8f234e9754c9e868ec0be760001b61088b565b610e2d7f9c1e4b135d12400212e4ad6cd2df6468eda7cf557ee72c89ff703f31750e7a6760001b61088b565b6000339050610e5e7f5910a6bcf8f721265348162504d272c5b0f807035f38eb0c6ca693a94e8deffa60001b61088b565b610e8a7f106075404d6754987900f9233375c5b2945bf733a624630b8d96373a6a8ae95660001b61088b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610efa7f822f65ddaf2e607f4c7a283fa11fc92b424479b67410f230d15ea4fb4865971560001b61088b565b610f267f7e47b30d64bd58c0773b828730e6c8c6229b9d619842fffda31181ed9a85574160001b61088b565b610f527f6b311aced70799415367572deedaaa37fc2d86dfa5e52389181ee2e4fe4ad8a560001b61088b565b60008111610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90615d0e565b60405180910390fd5b610fc17f55055761879b72e301ad794768d65cf85b05a5442eb810baa507aa0600b5b72260001b61088b565b610fed7fbf5f0e0c4cd66ac25aacc3651d4816f49e3dbeea067ba3e773c5cbec8a378f0760001b61088b565b6110197f597dde0e30053f3ea38523fa6f930598e34b609168b281c7abcbdc2fe7988b7a60001b61088b565b6110457fc33772c7445a06a14b8d406a5b8bb43db3ca4350b24f9f847631fdfba6f604a160001b61088b565b600960009054906101000a900460ff16611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90615d6e565b60405180910390fd5b6110c07f76d1ab5fb8855340dabcf4b821d1f68d704af7d2f9035659d48e2b4efaece8d660001b61088b565b6110ec7f47205d4b1d29ee305649aa041477551249ed1fa9f01ad462ffb65bae290a0ac260001b61088b565b6111187f49bdb3ce7951ecb7bea005dfd30a6772da8f08d236f36e6019501285080662a860001b61088b565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111679190615f83565b9250508190555061119a7fc032f76a87a7e2826ce0d5088a4138e028bdb3f2cada9ea0e5f689afd2d1ad2960001b61088b565b6111c67f4652e6dbc832be59bc667848acf85b891f1f58ef4839bab6506be1d9763b93a360001b61088b565b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611215919061600a565b925050819055506112487fb0eff535c822e8773d9caeb51f1a3846b17897c05af550dcbad61ee8fd400ca260001b61088b565b6112747f3662a377395bb0c84eac6698ba41046ef66cad594bc79b8a06f8f2d7f9330fcf60001b61088b565b8060066000828254611286919061600a565b925050819055506112b97f84aeb101a1c6c79818056f07d46d65854793d51300a53280f22f03d8cd365b7360001b61088b565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556113287f6e489e1dfb4efdce3e05d5112a935838636c1a0bc5ad16b2ffc03b2d6f1c2c2560001b61088b565b6113547fa3f97cae11f557a8e84ab2271a1e95206cdd9cd8843ccfc354eb6914467cc83160001b61088b565b6113807fb56281bb47c3206160a8b6d3ecb34db114633f9a0329b9e884d36fc6a6e7c65b60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b81526004016113df93929190615a4c565b602060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143191906154df565b611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790615cce565b60405180910390fd5b61149c7ffd80b2161784d2215aa16dfd2e9cc91de051ee762a169a1f26993e82048e822460001b61088b565b6114c87fddaa8e4211290e97a33eb5de792407763373670a9146580f0797ae8f6ed1f9f060001b61088b565b6114f47fe8a3fca5146ae0857120f0dd48ae60183563a99196a91a377b18d9a7c9e1db2d60001b61088b565b6115207fd47245ebdbc26f5b023f7c640f49a4b60c2afb5105846adb10a5b76622a9cfee60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161157d929190615ab5565b602060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cf91906154df565b61160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590615dae565b60405180910390fd5b61163a7f971f1c7f983e8348c3a489526c166137069c307e0ce33c5d5d3a060345f78c1660001b61088b565b6116667f857b0616aa26a6db7dbc70360d536dda2d077bcbeaab366731b87902c79fea1c60001b61088b565b6116927fc4b676c6a5574acbd0faa328db7a3daa0ae7a24af83cacd33f095d0f61a632ac60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af826040516116d89190615e2e565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b6117467fd253d371aa496259c53ff219dd6c2b30b672ca88f4e9ce6e35c4c5ecdad2a35860001b61088b565b6117727f5d397fee8e47be68ce42e27ab5a3a160235c2847699309a52e820e730996777160001b61088b565b61179e7f4317e362befb24472a05279a031e77edd03765f728350f384d1d1f4718072aac60001b61088b565b60003390506117cf7fb5328d63929cbd898986ae7afed33543de3b5c7a6c2015c4628db0a52fb80bf660001b61088b565b6117fb7f685ea125b5161ae63a97cedc43503512a137bc61a07314c52339db47435d909160001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061186b7f3a277c9cae702c6c504c89ac8f6a4b8177f7f11e3627814bd46813a2c9113a0c60001b61088b565b6118977f5840a65ca05aef07dced3d77a19d16920a7eeb814e3818c43166ab3290b4ec7160001b61088b565b6118c37fdb0b85bfdf80beecca5aecdbcdaca669f202a1a290ff92f2d1db5f858f8dcde860001b61088b565b60008311611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90615e0e565b60405180910390fd5b6119327fc446d280f23d3aac3cab23dc9c640c2beacde992c46bc46af3308bab77d592b560001b61088b565b61195e7ffe9e6910507ffb03cb54fcd55ac6e3d16b027ae4d336ef57fc75a51647949b4360001b61088b565b61198a7fcc32652760fe0ca43b7c58ad8814773cd7959dc9ef467bf74a793e7af907b8d560001b61088b565b6119b67f72d300426a293f62b4a23ffd15b541eda1a80d5e38aad8063bedb977c7e7388460001b61088b565b6000811180156119c65750828110155b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90615d2e565b60405180910390fd5b611a317f7156d2250145c89faded3bb8e741952a6c78e4c779df3048ff2b6ecf3113fe7d60001b61088b565b611a5d7fb962d4ce4ce9917d2af7dfd8414a0b44b434e50d0555617c9615fe314cfde03b60001b61088b565b611a897f114e7bdd036aa290c59e509dbc3a2c690180101b4f35d979b57cbfeea1db7d6360001b61088b565b611ab57f6b9ef942557d4e31d759cfdce44b891ab322c40bda685bf048ff376547949e4160001b61088b565b600960009054906101000a900460ff1615611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90615d8e565b60405180910390fd5b611b317ff436f224082ac585c31fb9f33d95d83113350cac3e1cbe81f8d737b3d65c32c960001b61088b565b611b5d7fbbd2725ab468a68cec20f820724ed618d3599533c2cd503eece66e8495bba69360001b61088b565b611b897f84e32760e32f5881d982bcd2e39de574f44bbfe7ed692571f4feab07537b328b60001b61088b565b8260056000828254611b9b919061600a565b92505081905550611bce7f582f26639188ba751f0d825ddff21eaf885840bd9195bcfcc9d0cda70e8ee2b060001b61088b565b611bfa7fe82805271728f16a8544fa042546935c187ba6662fcdc51fc578db660a93434c60001b61088b565b82600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c49919061600a565b92505081905550611c7c7f3d145496fb626ae282c1566beb8d9b6241fae437fb0e4bafd3e36a4968ef9c1a60001b61088b565b611ca87f2b99d4a62170ad60cd9311616b430637778c69f1c9d4216bc1a61f48703b3a5d60001b61088b565b611cd47f9be7c8d8a3dde1332838df312540a9b381968ed9358c283b67a994cf8e69e19f60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401611d31929190615ab5565b602060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8391906154df565b611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990615cae565b60405180910390fd5b611dee7f0d9de48cb15ac3d9337351b9cce4503ed84ca1681e6c727329d94a2775af4b8960001b61088b565b611e1a7f05cc821254c0266df6bc950cd27545caafe07f6e9a6fef19e132a0234c91737560001b61088b565b611e467fd013653b53b09cd103faa3406aa693b3ee9151c1974fa804824ae3bfdff1026260001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611e8c9190615e2e565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611ef290616181565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1e90616181565b8015611f6b5780601f10611f4057610100808354040283529160200191611f6b565b820191906000526020600020905b815481529060010190602001808311611f4e57829003601f168201915b505050505081565b60045481565b611fa57f1d30e19c0a3dccff1e6fc17ca4c1b94a05c7248f6679c42103df6a9640f1e52f60001b61088b565b611fd17f8f755842022f87b07e5323b604ab9e6bb3784a8d19bab58cb751435e9df3181760001b61088b565b611ffd7f1ed6ba9c1f073a5c1bee896b505100922b4af28491602884bb187f53876a59bf60001b61088b565b60008585604051602001612012929190615c10565b6040516020818303038152906040528051906020012090506120567fae6c306e62247c0d1c4994464d4a84d56441a757e3d71d10c29b594d8cd9202a60001b61088b565b6120827f263614f606e3e1374066fb66a7b1e0bfc76b2b9da372903a1d06d17e6d6ce1ad60001b61088b565b600083858360405160200161209993929190615e72565b6040516020818303038152906040528051906020012090506120dd7fa42606bea1394035bab4e8564fdfad92b2105e3bcf9924da9ff6f033206d32fc60001b61088b565b6121097f8349e9d560842c82407a62a9aff5e4f42cb779631a568028b95ea516bc3ebba060001b61088b565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016121669190615bee565b60206040518083038186803b15801561217e57600080fd5b505afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190615566565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016121f49493929190615af9565b602060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612246919061572b565b90506122747fb6a41f4dc948c75b618f7bd6304c2b98c7dc8163497ef57aae1304ebeb3079d460001b61088b565b6122a07fca567cf18071acdafbe1d94b7fb20f384a90f463eeeac1573df0f91d57c57d9860001b61088b565b6122df6040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082614e54565b61230b7f73f53fd5cf6da273b63f5f0dcdd6c37b37c856b26f91a72b138e83a5833e0a2e60001b61088b565b6123377f96ff8fe24babf7b2b785db85781763314634fd16d22e35569828445d64570b8360001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161237d9190615e2e565b60405180910390a25050505050505050565b60055481565b60006123c37f31a509deb94499dedc18c845a1da22a74fe4846b54425940d6a93cb3d118200660001b61088b565b6123ef7f3a66f13e243f61519a1b0cfbdfbbfe32a7ec0b8e57637f7de3fc7b2c34064ce360001b61088b565b61241b7fc217b4b50e2fb244bb873656335d721ed2fc97e1e354da90aa63d47dd20b207360001b61088b565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006124907fca487471bdd9aa13489eb5f3f32b62ad60b47bb56cb102ede63f4f0b579f73b760001b61088b565b6124bc7f2535d037b1683a14a92447b3be58ec0750b0b2b70bc9ef63f4ebd40ed571a97d60001b61088b565b6124e87f1d02e48e8d2f47776f581ba5b674c503fe65e743c18d90924ac99dae24a2d19a60001b61088b565b60003390506125197f25677934f7a8624c99feace478e3838c880e59096e3b901f7b530ba074cfa6a060001b61088b565b6125457f85b1b6126a5cce53ea175cb0f11e41fa19e9ef2d1d4c438f1c932ac6eed2d37b60001b61088b565b600061271090506125787ff8a4749223ccd8e9131763b16141e6068ddd41b0b78da9ce6b4283f70bf4d6aa60001b61088b565b6125a47f97da511c387193486c20c1f8c76ae3cc2c0cae6d88d113da83697f4593116cbb60001b61088b565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161260593929190615c40565b602060405180830381600087803b15801561261f57600080fd5b505af1158015612633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612657919061572b565b90506126857fd63c3bdf56ff9a0ed983ac64d4a9694f7cb8486971f2feaaecf13a416875695760001b61088b565b6126b17f32ff0076f11ddeaaae839726a7bf9f22d20f6e94cb8dea49dea61227090570ef60001b61088b565b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127217f8fed9a9f3f8b541522b3fe9ae95e41483ab8f28725343c6036ff1f3863c840a060001b61088b565b61274d7f40744a5adc7dede95171f7e6262bd372bff36aeacc869697c2251a9cc926dd9a60001b61088b565b8273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3258683604051612795929190615e49565b60405180910390a26127c97f1264f49a1a4af51bd542265fdd3e9dfc169dd7839195ce56013f71f967811e9360001b61088b565b6127f57fe668275fd30bb602dddfefeb82075f739e4d0fbd6b95e46d4a55559c5518009560001b61088b565b8093505050509392505050565b600c6020528060005260406000206000915090505481565b6128467f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6128727f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b61289e7f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6128ca7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129715750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a790615dce565b60405180910390fd5b6129dc7f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b612a087ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b612a347fc745dce6b4caa7abbb57e16fe5cc6ece34ef7cb67a7c6a322941b2e913039a8c60001b61088b565b612a607f598041f1972e682f66d793944094e7bd1558156146ae8e4e3e88da8ee30bbd7760001b61088b565b612a8c7f7a138529b906ac0b8444a00eec9b0a4fb5b817ad47804fc90a2482b1d48392c960001b61088b565b612ab87fed353c665479901eb496b4f04bd40aa56048fa154a005fa78d89774a48b4b2ac60001b61088b565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b159190615a31565b60206040518083038186803b158015612b2d57600080fd5b505afa158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b65919061572b565b11612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90615dee565b60405180910390fd5b612bd17f7a4bd7d3b5d4a0b88e7a7929e9102493a1e848c1fb0e60987ca4d0ced711935460001b61088b565b612bfd7fca81ba1a74f335042ae9c17057696a3cc8f51bc9d709a0d6cd8826e53292640b60001b61088b565b612c297f62e3df508415902ecf4b19c17e804dce5f329a8c98c2b74ae818f9f9c5e6b24b60001b61088b565b6000600960006101000a81548160ff021916908315150217905550612c707fa388602cccf298af3053c42d01ce8bcd71c151284b2c40438cc9bde2d32a936b60001b61088b565b612c9c7f81a35da6fbac67976f428cfc58221966c6b96694368149ddcf16417a2c2dd50260001b61088b565b7fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d667f26cbf179f7efd8b75a45afd485d03269335503c4c7d663a01da7abc1db505b5a60001b61088b565b612d927f0b35bd650e7f0f6af539cfef1d21764edfe4d988a8a85b7d4a2a7b6ad457939c60001b61088b565b612dbe7ff1f66c3fa7ecd0701591c2499bac3d3e0bbd3da7c2837e657659d89cb9c6b15c60001b61088b565b6000339050612def7ff5febd7ec3845aa06a6d9cf1efe47448a8f7cbb99feb84b68986dd3807dcc4b960001b61088b565b612e1b7fa59de6797f69e60dcc30d88a027c2f0c1f474b3242ea84af0c5cf2c328d76b0060001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e8b7f63b70bc7e84a11b91656cf54d5f0ae86a3b3a5c9e56803971e3e363bb422737460001b61088b565b612eb77fe05341f955bcb0cb8b81f870d8a0b8d8c3dc4ce360adfc4713a276f66f2448c560001b61088b565b612ee37fa5b2c5a92ab65f91a2b2b75c37de52338ce3ac7acc2837994cea8b42e9c3491760001b61088b565b60008311612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d90615e0e565b60405180910390fd5b612f527f1e45e73f6b9e4264577e35dc8ffc461a56844bf2ac7102bf0f93a47a9af1354060001b61088b565b612f7e7f657cdacd08421927f813c49d0d19085875e04d6c990b19d8d77a0e176e9f150760001b61088b565b612faa7f1165dd2ecb3273e9c0c8aa3106a83fcfea6bbeadc15cb70ef0581b2d572f052b60001b61088b565b612fd67f15e32cb322af197bb209048a33e9d342f4cee745660e28ff573d49a634ab875260001b61088b565b600081118015612fe65750828110155b613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c90615d2e565b60405180910390fd5b6130517f49df5a88bf96bfc8553fd325a0078b9eb3cf693032126677a117620c48088d6160001b61088b565b61307d7fb2fb3f9e569f6ba0e40e71632edce63429d381a386a32e5acc7e93ac9f1ed07260001b61088b565b6130a97f76e76c22ff5cfc1de547fdaef1c663c789f54cf0f035d888dedaae997f9a5af260001b61088b565b6130d57ff7ac82c9fe3334f99b376f7ccc15e3bd486f7608e704396d198c5fbee920910660001b61088b565b600960009054906101000a900460ff16613124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311b90615d6e565b60405180910390fd5b6131507fcf6a12e1cd198bf6ca60da02170f68d4b0e814d5658c2a50b77546e46ed27c0e60001b61088b565b61317c7f39159dbf78f3f0ac68f5624755f255b252ba73efcb09bb11e8a46f55c45a211a60001b61088b565b6131a87f15431f587883f96473e5ecba4d2475bd679f8afd7637a255a26cf99290d7049260001b61088b565b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132187fc94424670b2acc58f3a0711c9a20649d861090556658dad55c6c6fdc6e66291b60001b61088b565b6132447f0f351ab7469d1eeea658c04b5a24b4d5465fabefb1d6a152c7e194a2da2f8cf260001b61088b565b82600660008282546132569190615f83565b925050819055506132897f6b70f9eb11dd18a30449e9acff011df2739c2e3fc0a55bedad775864df885f4460001b61088b565b6132b57f08e3f956e37aa93868798b87ba511814ff2a4ed6329842984f7f211932f8929560001b61088b565b600960019054906101000a900460ff1680156132e0575060026004546132db9190615fd9565b600654115b15613376576133117fec092a5c98ddf912a2d86739fc961b862712ee89e85f1db7a177a396660299af60001b61088b565b61333d7f0c57ee4de6b3d52636fc9d97739148d781605612ae8a391edbbfea66c1118c5760001b61088b565b6133697f7f89d70b41db3472dc665c7438929780e988416820c8a638b01c538ee4eef2a660001b61088b565b613371614ef0565b6133a3565b6133a27fc15708d2924af7e37f1495dccfc0c4dc10aa06e6e6e0e0d71b88e00eab1a503a60001b61088b565b5b6133cf7fe0f35eabde6523d6038de32fc93d86b1cc186b0054941c8992e759d6d3c2df3860001b61088b565b6133fb7f07ad238c38e62635ae4f7548bba2ae6cd242311b88a9398a54bd7cdbbcb1e98160001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516134419190615e2e565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b60006134957f3fe2f4324a2e760f0766534b9d6e9f29f9cc27ade7d03a5a6f947093b345f1b860001b61088b565b6134c17f7df27044d66cb6219fbf90afd8ae6dd3bcdb0dc9c873ce799c75241424ee6fc060001b61088b565b6134ed7f468cb06af0b85c63d40b46798f28c621023247e9032f88fd3876e9d71d1d23c460001b61088b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016135489190615bee565b60206040518083038186803b15801561356057600080fd5b505afa158015613574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135989190615539565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d09190615a31565b60206040518083038186803b1580156135e857600080fd5b505afa1580156135fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613620919061572b565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6136797f6812cf59e4b81ddecd8f2b1f7fbfb48b5182a806c827c0dfd05826d7fdad744960001b61088b565b6136a57f6d077b16afa206e4b568904344b706c3bf698bc65745a3ab81ba91b666ba8bb160001b61088b565b6136d17f961b31b0eb150899b4350ba97c40fb4f4d6656a921731af079df31ea55c6db2560001b61088b565b60003390506137027f3100b3e748ce2c25beefad0a12161300b7eb7aa29cafb67305ef383dc277160f60001b61088b565b61372e7f385b5445321ce7fb324cebb72f2c150ebd70146da3cb1ded1086c09b2ccbec0060001b61088b565b61375a7ff55bde5e737caaf341b382e518d464d8c5b1aa65315865fb88f91b2534783fa260001b61088b565b600960009054906101000a900460ff16156137aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a190615d8e565b60405180910390fd5b6137d67f214b43e1a3ddb53264f0b0db58e7b94615fb4ae1c9edd4ed2bf1ddf7dfb68efb60001b61088b565b6138027f50901d754c8ff743aeb1bd9a17e9f767ec52d345e6dfd63e5e10a6fce53adcdf60001b61088b565b61382e7fbf5d8c928a34a9c5c5365b2256612c07d374f9064e0b0ee8d2b00ba83ba0055260001b61088b565b61385a7f501eeb26b24ce8a68e277150ad68774a06a38b18e81e167fba877d2d826d99ee60001b61088b565b6000821161389d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389490615e0e565b60405180910390fd5b6138c97fbb448e98ee5bd5bbc8e90971a18790d4ff69782ebb33c21b28f1d20078f3c6b360001b61088b565b6138f57f77bc78ed40585665c813ba7b08aa8cf6df2b82b2a7a9f5e13d9c65084bb6cdf260001b61088b565b6139217f9b51cdc0b1a01e554d06ae11a86eafd3ea29357887f30cef43e79b2ec6f07e5760001b61088b565b61394d7f89fb973c7fcef47842f79c7ef02a300b67e0b44fbefe8a63caec10f6a1d581cd60001b61088b565b6004546005548361395e9190615f83565b111561399f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399690615cee565b60405180910390fd5b6139cb7fac43ba5f87537e62e043ca97e2cee4541c0b1b8732e5d20736ee5d603909667360001b61088b565b6139f77f5be99f9f14ab7072461a997c5d413e55a81c32b63fd0d3cbf35e34bcf6ba2c0b60001b61088b565b613a237f3c53ff17b87feec27333ff84ed363b3f254d41cdbcf73d860090d7dd2a58fe4160001b61088b565b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a729190615f83565b92505081905550613aa57f3b65e0ed8fb8940554df654388f38b5444dbd30be91cb6b12bfbd1dbfe3fd55c60001b61088b565b613ad17fb8bcbe9c6ad2a8fac47c3fe3876d62e3fa450a2600649582b90710de362f701a60001b61088b565b8160056000828254613ae39190615f83565b92505081905550613b167fba9a374a98aba0dbe7dd86c7fd20661f0c15f66d54169df91b446c3d188788fc60001b61088b565b613b427fb1f191f0583e4bb4d953dc0f37ac771bdec7046a3d9b5f3b6a4ab7b8aac77f7d60001b61088b565b8073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051613b889190615e2e565b60405180910390a2613bbc7f486fb738975ecec9405ba5e2e93bb2b9065807aaa98d7e84313d1a769cd9174b60001b61088b565b613be87f216de3450f5e193a4873452e4fb786f63c5ab96875e7d91b9d72e9976c2dacb660001b61088b565b6004546005541415613c8557613c207f321714ea0ca82c0ae4ced0eea43387cb70df05aed21dc41a5edb1f2cbf2a544f60001b61088b565b613c4c7f13c519873b6a74031534ae786c5ecb3b839197d8653bd4dd3b886189f68585cf60001b61088b565b613c787ffb903ede64abab5c4a4dd814a6b2bea062f38014eea16741cb13d329498c6e2c60001b61088b565b613c80615098565b613cb2565b613cb17f3b38dc18f36c43c1cdc93d9c9afd8198487661d8fb689de9b4f2f0e6a0e2cd9260001b61088b565b5b613cde7fa59a194aee07e9449a5e12e6a9c1309f3a77274b2c41d17202832fa73cdbb9d260001b61088b565b613d0a7f8bff06d6c050958f0341bd5337c72cf3180a48ea8cffb7bd705e4a0ea2a2cdf860001b61088b565b613d367fc1bdf160f736625adbc4369faa91d20b26d5461ce70399b253a4b03105ee685460001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401613d9593929190615a4c565b602060405180830381600087803b158015613daf57600080fd5b505af1158015613dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de791906154df565b613e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1d90615cce565b60405180910390fd5b613e527f38c1730c33ac2ca7d80e3b8ec186a9f3f9b7dff06c2b8a678401a78413d288f660001b61088b565b5050565b613e827f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b613eae7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b613eda7f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b613f067f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8d90615dce565b60405180910390fd5b613fc27f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b613fee7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b61401a7f90d06bcd2ffadcd0c672766d630a5e192a6df47343607633bc683f5c0f131a8f60001b61088b565b6140467f4241bda9706ccd59d2f916698730326bae7836279367c2bfabaf6282d664a0e360001b61088b565b6140727f1ce7ed20e1651871d107033ede1384abc6575db7d46b56876fe8c43dbdf8bd1160001b61088b565b61409e7fd9a21af0d539c936097a5675a96c298c62ae82b94c030338d706a15ddf8e561c60001b61088b565b600960009054906101000a900460ff166140ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e490615d6e565b60405180910390fd5b6141197fc663d70129d4d863ec27f11d5bf1ea3c0238beeaab56b10f7a01d0344c7ad9de60001b61088b565b6141457fe2e45372a779b8f08033320b5550d0bac09caf08e95907923382ec79d0ff017f60001b61088b565b6141717ff6dc33cb68fee699ed81458de372a213024e78b15b0a015f46263bd8ce0dcdb260001b61088b565b61419d7f6b5feba8981a5b615a400148643de70390891b55899d721712cf9d6249c6573260001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161421e929190615ab5565b602060405180830381600087803b15801561423857600080fd5b505af115801561424c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427091906154df565b6142af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a690615d4e565b60405180910390fd5b6142db7fc014e6b3289b7ed79e4ca81e2c6abedd98221128b0e4d5deacdafb51f0d4c5bf60001b61088b565b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b61433b7f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6143677f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b6143937f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6143bf7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806144665750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6144a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161449c90615dce565b60405180910390fd5b6144d17f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b6144fd7ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b6145297f37315b138a4eb1f3e6961d3245e9f125c93e7013153d744cb4e744a5607a183660001b61088b565b6145557f6ed68854798f914348bf7c98baff5db65f282eaa9a709a788599507555af477260001b61088b565b6145817f79bf2ddfe07abf5f091c46b1951be01b9468b1cb19cc3ae745bf2f1a25aa5c2260001b61088b565b614589614ef0565b565b6145b77f9c1de37707e398b1ef2c8fd674c6d609a77b714460ef98eed74986a3e0c59a9b60001b61088b565b6145e37f9880b690349d44bd00c30d83a823c189c97351b9747b76f4821f133ce40a621760001b61088b565b61460f7f071f09138def1d09107b15f7cbd047359e4c5b24fe265bef940564ffd045f6dc60001b61088b565b60003390506146407fa4297625721f48f13f4c994dbac3d6214bc4a1a14b2d59dc565beef32dafc67b60001b61088b565b61466c7f25e231d523b598d7d8e9107f060d4480cceea8cef7acba5c23289a768ec080b960001b61088b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506146dc7f0945e46252f3b1bdd5d6b058f7cc014e184c7d21c76a983634d6269a65f0eb2c60001b61088b565b6147087f80eb402c0fc27561f19d1e7e68c0279eeae29207c8c857184b14ae4a19c79c8460001b61088b565b6147347f87185c95126b0a5b95a24765d79623c7a8a80645fe6ed86630f575973552247160001b61088b565b60008111614777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161476e90615d0e565b60405180910390fd5b6147a37f9479095e5c739fdfc501dd11d560a7418784699a4e1fa050ca62b420c9eb8f2560001b61088b565b6147cf7fbc7e949c9fa429aa39b9ce6abdf5c91a9aa383d19ae7aea7d461ef4962f26a6260001b61088b565b6147fb7ff40deae3c36b7474f3900bf336acd672fa06cc5b2faa275a99f60208a8b2415260001b61088b565b806006600082825461480d919061600a565b925050819055506148407ff3864655fb7564ff57fe9c6a439df1af0fece6a0db5471d85f113807bfae220860001b61088b565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556148af7f28de215e6016601450469219da10f355a14aa091c80520bcd791d2814f94895c60001b61088b565b6148db7f9a5bcbce21b940dba9cfbee6583452cde02592adaf1d35189ff586522fe4b3fb60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516149219190615e2e565b60405180910390a25050565b6149597f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b6149857fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6149b17f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6149dd7f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a6490615dce565b60405180910390fd5b614a997f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b614ac57fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b614af17f6474bc7b6c4c817e394a7770bcd8e9a3c367d41128bd02f30d9481664cc0edf260001b61088b565b614b1d7f35e3552e64d39c55309e0837bb68952eff825a965df10321e8ef06d8fa5a087960001b61088b565b614b497f5d1afb46bd1a2ae6aaa17481bd18b7019f1797881481135b1c94ccdcafb8339f60001b61088b565b614b757f298439278aab97593ed1479b65d64e72155e1d6df91562f07fe08092674c1a1a60001b61088b565b600960009054906101000a900460ff16614bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614bbb90615d6e565b60405180910390fd5b614bf07fefd324418f85207d4866beeb69e0fb6cccc15952ee8f4a6f7e88a2edd1345efc60001b61088b565b614c1c7fdb767e3aa2d03e1795b42198a2f94b68dfbc40904ef33967d1c7dcbd59ba0e6160001b61088b565b614c487fa60ba8065f646238e091b8e848671c7dd02b9e1940d25c74f3399ca8366eb6c860001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b8152600401614ca793929190615a83565b600060405180830381600087803b158015614cc157600080fd5b505af1158015614cd5573d6000803e3d6000fd5b50505050614d057f8d07e304d85e68966ea24bdf0fc6a7f038d59c72d847080d68a900c263e0a5d460001b61088b565b614d317f56450edd407148d8fa256d2068078a85def32b5856a9371ce8bb7686d799e22e60001b61088b565b6001600960016101000a81548160ff021916908315150217905550614d787f4a0abfe447e7e73bebebee8a0682f9e642fd53b3233707a6511f4541915448b360001b61088b565b614da47f81f757f4fb3bd969b74a83f57ca49e92c4cac6a4f3a8301c07ece5bcfa664ae560001b61088b565b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e117fd9e6438edd8d7ec14bbf4195a3d3b39e874ed0b07be368c470dc37504bc40db660001b61088b565b614e3d7ffa57c2a9e2e4cd25705c563e3ec471be7ee183591824200753623f34f81f46c460001b61088b565b818160039190614e4e9291906151e6565b50505050565b614eec8282604051602401614e6a929190615c7e565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151bd565b5050565b614f1c7fc6f0eafc16465fcff2bfcf5db8fed53bc9ab9d44b249407ebddca00225f75d8960001b61088b565b614f487f330533b22d1790e609a53398a705433950719ec56bed3778f077aaa3ca0c302660001b61088b565b614f747f5af90a19354250cb53a8c405d0803ec376193cbfcdf5858484dac343300b8e1a60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401614ff19190615a31565b600060405180830381600087803b15801561500b57600080fd5b505af115801561501f573d6000803e3d6000fd5b5050505061504f7fcaf230e320175de72e0c1dc3a48749cacdcf93e9f23fce2f32af0ab65a0509cf60001b61088b565b61507b7f6103720bb3d029f67142afa715f25ed641d66813a3c67b3f1a66238e4f5ea82560001b61088b565b6000600960016101000a81548160ff021916908315150217905550565b6150c47f83ea7233f89237db08578bb94cb062f0c8ec22c9edaade0226e2eb81487d9e5060001b61088b565b6150f07fe1dd018c6aee1cc9338e1dfa90d384822028d0488f4a450b9e38a0d19698239760001b61088b565b61511c7fc147cc81800e10a4c70cc63471c0b57923147deb30705b335733b00a7eb6cd9a60001b61088b565b6001600960006101000a81548160ff0219169083151502179055506151637f64007a2bab706e6aeedbb6cf3d4c9a346f4c38c22f8a31b10262e044d5e39fc860001b61088b565b61518f7f50f10bc90a015108201c5258518b8da2d5a55d32f4468a367423669e81727c1f60001b61088b565b7f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546151f290616181565b90600052602060002090601f016020900481019282615214576000855561525b565b82601f1061522d57803560ff191683800117855561525b565b8280016001018555821561525b579182015b8281111561525a57823582559160200191906001019061523f565b5b509050615268919061526c565b5090565b5b8082111561528557600081600090555060010161526d565b5090565b600061529c61529784615ee9565b615ec4565b9050828152602081018484840111156152b8576152b76162af565b5b6152c384828561613f565b509392505050565b60006152de6152d984615f1a565b615ec4565b9050828152602081018484840111156152fa576152f96162af565b5b61530584828561613f565b509392505050565b60008135905061531c816164bb565b92915050565b600081519050615331816164d2565b92915050565b600081359050615346816164e9565b92915050565b60008083601f840112615362576153616162a5565b5b8235905067ffffffffffffffff81111561537f5761537e6162a0565b5b60208301915083600182028301111561539b5761539a6162aa565b5b9250929050565b600082601f8301126153b7576153b66162a5565b5b81356153c7848260208601615289565b91505092915050565b6000815190506153df81616500565b92915050565b6000815190506153f481616517565b92915050565b600082601f83011261540f5761540e6162a5565b5b813561541f8482602086016152cb565b91505092915050565b6000813590506154378161652e565b92915050565b60008151905061544c8161652e565b92915050565b600060208284031215615468576154676162b9565b5b60006154768482850161530d565b91505092915050565b600080600060408486031215615498576154976162b9565b5b60006154a68682870161530d565b935050602084013567ffffffffffffffff8111156154c7576154c66162b4565b5b6154d38682870161534c565b92509250509250925092565b6000602082840312156154f5576154f46162b9565b5b600061550384828501615322565b91505092915050565b600060208284031215615522576155216162b9565b5b600061553084828501615337565b91505092915050565b60006020828403121561554f5761554e6162b9565b5b600061555d848285016153d0565b91505092915050565b60006020828403121561557c5761557b6162b9565b5b600061558a848285016153e5565b91505092915050565b6000602082840312156155a9576155a86162b9565b5b600082013567ffffffffffffffff8111156155c7576155c66162b4565b5b6155d3848285016153fa565b91505092915050565b6000806000606084860312156155f5576155f46162b9565b5b600084013567ffffffffffffffff811115615613576156126162b4565b5b61561f868287016153fa565b93505060206156308682870161530d565b925050604061564186828701615428565b9150509250925092565b600080600080600060a08688031215615667576156666162b9565b5b600086013567ffffffffffffffff811115615685576156846162b4565b5b615691888289016153fa565b95505060206156a28882890161530d565b94505060406156b388828901615428565b93505060606156c488828901615428565b925050608086013567ffffffffffffffff8111156156e5576156e46162b4565b5b6156f1888289016153a2565b9150509295509295909350565b600060208284031215615714576157136162b9565b5b600061572284828501615428565b91505092915050565b600060208284031215615741576157406162b9565b5b600061574f8482850161543d565b91505092915050565b6157618161603e565b82525050565b61577081616050565b82525050565b61577f8161605c565b82525050565b60006157918385615f61565b935061579e83858461613f565b6157a7836162be565b840190509392505050565b60006157bd82615f4b565b6157c78185615f61565b93506157d781856020860161614e565b6157e0816162be565b840191505092915050565b6157f4816160c1565b82525050565b615803816160d3565b82525050565b615812816160e5565b82525050565b615821816160f7565b82525050565b61583081616109565b82525050565b600061584182615f56565b61584b8185615f72565b935061585b81856020860161614e565b615864816162be565b840191505092915050565b600061587c601883615f72565b9150615887826162cf565b602082019050919050565b600061589f601783615f72565b91506158aa826162f8565b602082019050919050565b60006158c2601e83615f72565b91506158cd82616321565b602082019050919050565b60006158e5601783615f72565b91506158f08261634a565b602082019050919050565b6000615908601b83615f72565b915061591382616373565b602082019050919050565b600061592b601d83615f72565b91506159368261639c565b602082019050919050565b600061594e601b83615f72565b9150615959826163c5565b602082019050919050565b6000615971601783615f72565b915061597c826163ee565b602082019050919050565b6000615994601683615f72565b915061599f82616417565b602082019050919050565b60006159b7601583615f72565b91506159c282616440565b602082019050919050565b60006159da601d83615f72565b91506159e582616469565b602082019050919050565b60006159fd601783615f72565b9150615a0882616492565b602082019050919050565b615a1c816160aa565b82525050565b615a2b816160b4565b82525050565b6000602082019050615a466000830184615758565b92915050565b6000606082019050615a616000830186615758565b615a6e6020830185615758565b615a7b6040830184615a13565b949350505050565b6000604082019050615a986000830186615758565b8181036020830152615aab818486615785565b9050949350505050565b6000604082019050615aca6000830185615758565b615ad76020830184615a13565b9392505050565b6000602082019050615af36000830184615767565b92915050565b6000608082019050615b0e6000830187615776565b615b1b6020830186615a13565b615b286040830185615776565b8181036060830152615b3a81846157b2565b905095945050505050565b60006020820190508181036000830152615b5f81846157b2565b905092915050565b6000602082019050615b7c60008301846157eb565b92915050565b6000602082019050615b9760008301846157fa565b92915050565b6000602082019050615bb26000830184615809565b92915050565b6000602082019050615bcd6000830184615818565b92915050565b6000602082019050615be86000830184615827565b92915050565b60006020820190508181036000830152615c088184615836565b905092915050565b60006040820190508181036000830152615c2a8185615836565b9050615c396020830184615758565b9392505050565b60006060820190508181036000830152615c5a8186615836565b9050615c696020830185615758565b615c766040830184615a13565b949350505050565b60006040820190508181036000830152615c988185615836565b9050615ca76020830184615a13565b9392505050565b60006020820190508181036000830152615cc78161586f565b9050919050565b60006020820190508181036000830152615ce781615892565b9050919050565b60006020820190508181036000830152615d07816158b5565b9050919050565b60006020820190508181036000830152615d27816158d8565b9050919050565b60006020820190508181036000830152615d47816158fb565b9050919050565b60006020820190508181036000830152615d678161591e565b9050919050565b60006020820190508181036000830152615d8781615941565b9050919050565b60006020820190508181036000830152615da781615964565b9050919050565b60006020820190508181036000830152615dc781615987565b9050919050565b60006020820190508181036000830152615de7816159aa565b9050919050565b60006020820190508181036000830152615e07816159cd565b9050919050565b60006020820190508181036000830152615e27816159f0565b9050919050565b6000602082019050615e436000830184615a13565b92915050565b6000604082019050615e5e6000830185615a13565b615e6b6020830184615a13565b9392505050565b6000606082019050615e876000830186615a13565b615e946020830185615a13565b615ea16040830184615776565b949350505050565b6000602082019050615ebe6000830184615a22565b92915050565b6000615ece615edf565b9050615eda82826161b3565b919050565b6000604051905090565b600067ffffffffffffffff821115615f0457615f03616271565b5b615f0d826162be565b9050602081019050919050565b600067ffffffffffffffff821115615f3557615f34616271565b5b615f3e826162be565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615f8e826160aa565b9150615f99836160aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615fce57615fcd6161e4565b5b828201905092915050565b6000615fe4826160aa565b9150615fef836160aa565b925082615fff57615ffe616213565b5b828204905092915050565b6000616015826160aa565b9150616020836160aa565b925082821015616033576160326161e4565b5b828203905092915050565b60006160498261608a565b9050919050565b60008115159050919050565b6000819050919050565b60006160718261603e565b9050919050565b60006160838261603e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006160cc8261611b565b9050919050565b60006160de8261611b565b9050919050565b60006160f08261611b565b9050919050565b60006161028261611b565b9050919050565b60006161148261611b565b9050919050565b60006161268261612d565b9050919050565b60006161388261608a565b9050919050565b82818337600083830152505050565b60005b8381101561616c578082015181840152602081019050616151565b8381111561617b576000848401525b50505050565b6000600282049050600182168061619957607f821691505b602082108114156161ad576161ac616242565b5b50919050565b6161bc826162be565b810181811067ffffffffffffffff821117156161db576161da616271565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6164c48161603e565b81146164cf57600080fd5b50565b6164db81616050565b81146164e657600080fd5b50565b6164f28161605c565b81146164fd57600080fd5b50565b61650981616066565b811461651457600080fd5b50565b61652081616078565b811461652b57600080fd5b50565b616537816160aa565b811461654257600080fd5b5056fea2646970667358221220d1b413200c15d31cb3c760bb1c9647c7ae90a9b5213c395f6cb6b0cfc444f64664736f6c63430008070033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/test/RenPool.test.js b/test/RenPool.test.js index 15a064c..5bf6632 100644 --- a/test/RenPool.test.js +++ b/test/RenPool.test.js @@ -223,13 +223,13 @@ describe('RenPool contract test', function () { }); [bn(1), POOL_BOND].forEach(amount => { - it('should create a withdraw request', async function () { + it('should create a withdrawal request', async function () { // Lock pool await renToken.connect(bob).approve(renPool.address, POOL_BOND); await renPool.connect(bob).deposit(POOL_BOND); expect(await renPool.isLocked()).to.be.true; - // Request withdraw + // Request withdrawal await renPool.connect(bob).requestWithdrawal(amount); expect(await renPool.withdrawalRequests(bob.address)).to.equal(amount); expect(await renPool.totalWithdrawalRequested()).to.equal(amount); @@ -237,18 +237,18 @@ describe('RenPool contract test', function () { }); [bn(1), POOL_BOND].forEach(amount => { - it('should cancel a withdraw request', async function () { + it('should cancel a withdrawal request', async function () { // Lock pool await renToken.connect(bob).approve(renPool.address, POOL_BOND); await renPool.connect(bob).deposit(POOL_BOND); expect(await renPool.isLocked()).to.be.true; - // Request withdraw + // Request withdrawal await renPool.connect(bob).requestWithdrawal(amount); expect(await renPool.withdrawalRequests(bob.address)).to.equal(amount); expect(await renPool.totalWithdrawalRequested()).to.equal(amount); - // Cancel withdraw request + // Cancel withdrawal request await renPool.connect(bob).cancelWithdrawalRequest(); expect(await renPool.withdrawalRequests(bob.address)).to.equal(bn(0)); expect(await renPool.totalWithdrawalRequested()).to.equal(bn(0)); @@ -265,11 +265,11 @@ describe('RenPool contract test', function () { await renPool.connect(bob).deposit(POOL_BOND); expect(await renPool.isLocked()).to.be.true; - // Request withdraw + // Request withdrawal await renPool.connect(bob).requestWithdrawal(amount); expect(await renPool.withdrawalRequests(bob.address)).to.equal(amount); - // Fulfill withdraw request + // Fulfill withdrawal request await renToken.connect(alice).approve(renPool.address, POOL_BOND); await renPool.connect(alice).fulfillWithdrawalRequest(bob.address); From f7886b520513388565de2cb85212e447ee9d2ea8 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Tue, 21 Dec 2021 16:56:04 +0100 Subject: [PATCH 09/12] minor fixes --- artifacts/contracts/RenPool.sol/RenPool.json | 17 ++--------------- contracts/RenPool.sol | 4 ++-- test/RenPool.test.js | 2 +- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/artifacts/contracts/RenPool.sol/RenPool.json b/artifacts/contracts/RenPool.sol/RenPool.json index ad50666..22bd8a5 100644 --- a/artifacts/contracts/RenPool.sol/RenPool.json +++ b/artifacts/contracts/RenPool.sol/RenPool.json @@ -309,19 +309,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "c__0xd43f3d79", - "type": "bytes32" - } - ], - "name": "c_0xd43f3d79", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, { "inputs": [], "name": "cancelWithdrawalRequest", @@ -746,8 +733,8 @@ "type": "receive" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162006f4838038062006f4883398181016040528101906200003791906200087d565b6200006b7faeb8f7043815476442f6bf9e5e743cbf36f47021e588ec22839721db0c2a699560001b6200084c60201b60201c565b6200009f7fee0716639710833bc08a1f28ed48dbb6d7fb5b67243449270dfcb0c2902e08f660001b6200084c60201b60201c565b620000d37fa94ad612f9efec6e67ff634cb0fce98233b1c0bf8b3a5491c056a54073557af460001b6200084c60201b60201c565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001477f991f053a3e051d1c0b5968354a35b258d7965d31ae9e238444bdb0e6b12c194060001b6200084c60201b60201c565b6200017b7f52dfe979c9734161a4cac214b6139546872d7ea0df3a6165fe2e07e310b072c260001b6200084c60201b60201c565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f07f7d9a69b7d94fe72608ba163907dd22a7821111a273b1421e2f4322347004338460001b6200084c60201b60201c565b620002247f08467ed6af51ff92bfa8e4dab50b1dde3428baec5ae380c328bca8e69204a31260001b6200084c60201b60201c565b87600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002997f42a77a914b8ac9c1a21e5265b44877d6bfe834b52f8064636ac2f27c8f90f6a160001b6200084c60201b60201c565b620002cd7f04ddf44800722c370f6f16b688d0dbb4be0bafaac40fa63cc834321b979541e160001b6200084c60201b60201c565b86600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003427f961fa866a8842482a2b7d46c8745cfc977651b8e46114c732a1882de39c4092660001b6200084c60201b60201c565b620003767ffbdf111e1b916b4e15a69bbe3cd9044396a0d70a3f22a527913a15ff0f84c24d60001b6200084c60201b60201c565b85600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003eb7f6294b7ef317d432a171a0edcb5c9182d74ba183aecf0b6b98bb0d1a8692d6a0960001b6200084c60201b60201c565b6200041f7f8d9593c59a14360025628701067e12fa85f02adaa195737e109b2413e7ddb6bd60001b6200084c60201b60201c565b84601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004947f0e989f5fae379996d8cc34bd065116c3ecdf561c7a392fb8425ff96929dc8bc560001b6200084c60201b60201c565b620004c87f59832f60d6af7fb49ddb1e87f2e6e18e57651f434b8b1f0cb632705abc719ae960001b6200084c60201b60201c565b83601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053d7fb0ff7b25214d932280bcafa91237ac8169d8cbf0018cbfe60e8bbe92e498341960001b6200084c60201b60201c565b620005717f344c33e44ee21e4846bb7b26777d9ff9d6ef98493615139300940da22cd9c1ef60001b6200084c60201b60201c565b80600481905550620005ac7fbf3a83abe92f1c14d80922bed805484368438eceffdff1591d0409ca092e964360001b6200084c60201b60201c565b620005e07f6bc8805e78170ba2584fabceb6d4e9aa1820bbd8592db3c5c858b0c20442e95e60001b6200084c60201b60201c565b6000600960006101000a81548160ff0219169083151502179055506200062f7f0f6bf45b82fd65f9dd65c48eec7df21925ad6ae4cb2b16c5409d1a7bdd69728260001b6200084c60201b60201c565b620006637fea663307d0b960619fdf64c659143a72710a6c8eeca255bad8952de61361392760001b6200084c60201b60201c565b6000600960016101000a81548160ff021916908315150217905550620006b27f7275ced130991bad1b22db13905cbdac02c5d58cea00bcc0cc88c20ae91f545d60001b6200084c60201b60201c565b620006e67f12c8ded6a17958a45f9c92e331b036b3a9542b545973c6bebe9b1ccd39a4e30960001b6200084c60201b60201c565b6000600581905550620007227f40d83f9ffe45696483ccedfd792c70c053c8792f446a9e918049766944fd91b160001b6200084c60201b60201c565b620007567f69e3c493eeb29373fac2728f0299ae7097ac3a97c78c980721b7ca20e4f0ac7d60001b6200084c60201b60201c565b6000600681905550620007927f3f8938beb058ec148584c689eb134005a59c26a91717022ea12a8833322aa6ed60001b6200084c60201b60201c565b620007c67f266db05ec38475e2ac5d66546a45bc28efcc3b233aedaa26fee6be5d2533c26960001b6200084c60201b60201c565b6005600781905550620008027ffdec301f82d7ec02bec4c79c93fc7180950cfab513b43401fb3e2e6ac073040460001b6200084c60201b60201c565b620008367f4d59c4b5f1bd3ef8b6cd1dc716b672a1ff46aa9b76f1f69a8298874a506e22f260001b6200084c60201b60201c565b60056008819055505050505050505050620009bd565b50565b600081519050620008608162000989565b92915050565b6000815190506200087781620009a3565b92915050565b600080600080600080600080610100898b031215620008a157620008a062000984565b5b6000620008b18b828c016200084f565b9850506020620008c48b828c016200084f565b9750506040620008d78b828c016200084f565b9650506060620008ea8b828c016200084f565b9550506080620008fd8b828c016200084f565b94505060a0620009108b828c016200084f565b93505060c0620009238b828c016200084f565b92505060e0620009368b828c0162000866565b9150509295985092959890939650565b600062000953826200095a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620009948162000946565b8114620009a057600080fd5b50565b620009ae816200097a565b8114620009ba57600080fd5b50565b61657b80620009cd6000396000f3fe6080604052600436106102135760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e146107de578063e39f610114610809578063e438a77d14610834578063e714a0281461084b578063e7585aea1461086257610294565b8063b6b34c6714610748578063b6b55f2514610773578063b7eb85c41461079c578063d5b2a01a146107b357610294565b80639e45e0d0116100e75780639e45e0d0146106615780639ee679e81461068c578063a4e2d634146106b5578063aaaa0c4b146106e0578063ac3479871461070b57610294565b80637ecebe00146105b757806389026538146105f45780638da5cb5b1461060b578063901a64981461063657610294565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f146104be5780636664e42e146104e95780636ec21cc81461051257806370a082311461053d57806371bbef361461057a57610294565b80632e1a7d4d1461041457806334246f9b1461043d578063372500ab1461046857806363ffab311461049357610294565b806322366844116101e2578063223668441461031b578063270016fb1461034657806327b380f31461036f57806327e235e3146103ac5780632e0f2625146103e957610294565b8063023c5b08146102995780630d3daff4146102c45780631261795d146102ed57806313a0ae2b1461030457610294565b36610294576102447f75e2f740915a3cc8e356ba3de03b6311a994f3b3e237c881143a486c85f653bf60001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161028a9190615e2e565b60405180910390a2005b600080fd5b3480156102a557600080fd5b506102ae61088e565b6040516102bb9190615a31565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061550c565b61088b565b005b3480156102f957600080fd5b506103026108b4565b005b34801561031057600080fd5b50610319610c61565b005b34801561032757600080fd5b50610330610d96565b60405161033d9190615ade565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190615452565b610da9565b005b34801561037b57600080fd5b5061039660048036038101906103919190615452565b6116e5565b6040516103a39190615e2e565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190615452565b6116fd565b6040516103e09190615e2e565b60405180910390f35b3480156103f557600080fd5b506103fe611715565b60405161040b9190615ea9565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906156fe565b61171a565b005b34801561044957600080fd5b50610452611e99565b60405161045f9190615bb8565b60405180910390f35b34801561047457600080fd5b5061047d611ebf565b60405161048a9190615b67565b60405180910390f35b34801561049f57600080fd5b506104a8611ee5565b6040516104b59190615b45565b60405180910390f35b3480156104ca57600080fd5b506104d3611f73565b6040516104e09190615e2e565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061564b565b611f79565b005b34801561051e57600080fd5b5061052761238f565b6040516105349190615e2e565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190615452565b612395565b6040516105719190615e2e565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c91906155dc565b612462565b6040516105ae9190615e2e565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190615452565b612802565b6040516105eb9190615e2e565b60405180910390f35b34801561060057600080fd5b5061060961281a565b005b34801561061757600080fd5b50610620612cca565b60405161062d9190615a31565b60405180910390f35b34801561064257600080fd5b5061064b612cee565b6040516106589190615a31565b60405180910390f35b34801561066d57600080fd5b50610676612d14565b6040516106839190615b9d565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae91906156fe565b612d3a565b005b3480156106c157600080fd5b506106ca61344e565b6040516106d79190615ade565b60405180910390f35b3480156106ec57600080fd5b506106f5613461565b6040516107029190615e2e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190615593565b613467565b60405161073f9190615e2e565b60405180910390f35b34801561075457600080fd5b5061075d613627565b60405161076a9190615b82565b60405180910390f35b34801561077f57600080fd5b5061079a600480360381019061079591906156fe565b61364d565b005b3480156107a857600080fd5b506107b1613e56565b005b3480156107bf57600080fd5b506107c86142dd565b6040516107d59190615e2e565b60405180910390f35b3480156107ea57600080fd5b506107f36142e3565b6040516108009190615bd3565b60405180910390f35b34801561081557600080fd5b5061081e614309565b60405161082b9190615e2e565b60405180910390f35b34801561084057600080fd5b5061084961430f565b005b34801561085757600080fd5b5061086061458b565b005b34801561086e57600080fd5b506108896004803603810190610884919061547f565b61492d565b005b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e07f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b61090c7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6109387f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6109647f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90615dce565b60405180910390fd5b610a207f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b610a4c7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b610a787f05c52e2e757b704ee37cacc85bcd2ad31fe4940327f21c40eee49cc43f40b54c60001b61088b565b610aa47f4e365342f0946657194340f9abcecb6efff5ad753ee4a810ac628874d9af7e9960001b61088b565b610ad07f1cfd4bb9ff4d7b04472d64ac4c71f02514058461560de91cb2d6adf53c42b03760001b61088b565b6000479050610b017f2f887d90a6ab98f6d741d4f5e87bcff7d89d8ec3d643e5ce3fff9a84f8f0431560001b61088b565b610b2d7fff8f4728043ff8198c1aa493e774318cefee1508be4f7bcebfa10ad136884da160001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b95573d6000803e3d6000fd5b50610bc27ffaca8b38bad904074d007a99936885c24bd108a1a46b38f4c8a00f65f54cd4a460001b61088b565b610bee7f52257046d0c47f4ae30056e2e831a9c4ad542da6194311c529bbaca75e2091a460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b82604051610c569190615e2e565b60405180910390a250565b610c8d7fe37cf64a6e2d819f234a4ed5d51ffe87eeb65d17ad7e35edd2866d470c0e686360001b61088b565b610cb97f2c9a5bb9934ad26fd47b925cf7e21513a09ad2300a827ed2c6a3a289f35a1d9060001b61088b565b610ce57f610be81338132ba49157beb1959166f8826c8c0f9c6a3330c48198fd0eeb4dca60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610d629190615a31565b600060405180830381600087803b158015610d7c57600080fd5b505af1158015610d90573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b610dd57f1b7825aa90ae0390b7d08f70ab0ae77d4e3bb14784180749876c960ac9b0ac1f60001b61088b565b610e017fe5d6d09a3d2fb99a296c779de820bf5b47d0d6f14a8f234e9754c9e868ec0be760001b61088b565b610e2d7f9c1e4b135d12400212e4ad6cd2df6468eda7cf557ee72c89ff703f31750e7a6760001b61088b565b6000339050610e5e7f5910a6bcf8f721265348162504d272c5b0f807035f38eb0c6ca693a94e8deffa60001b61088b565b610e8a7f106075404d6754987900f9233375c5b2945bf733a624630b8d96373a6a8ae95660001b61088b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610efa7f822f65ddaf2e607f4c7a283fa11fc92b424479b67410f230d15ea4fb4865971560001b61088b565b610f267f7e47b30d64bd58c0773b828730e6c8c6229b9d619842fffda31181ed9a85574160001b61088b565b610f527f6b311aced70799415367572deedaaa37fc2d86dfa5e52389181ee2e4fe4ad8a560001b61088b565b60008111610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90615d0e565b60405180910390fd5b610fc17f55055761879b72e301ad794768d65cf85b05a5442eb810baa507aa0600b5b72260001b61088b565b610fed7fbf5f0e0c4cd66ac25aacc3651d4816f49e3dbeea067ba3e773c5cbec8a378f0760001b61088b565b6110197f597dde0e30053f3ea38523fa6f930598e34b609168b281c7abcbdc2fe7988b7a60001b61088b565b6110457fc33772c7445a06a14b8d406a5b8bb43db3ca4350b24f9f847631fdfba6f604a160001b61088b565b600960009054906101000a900460ff16611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90615d6e565b60405180910390fd5b6110c07f76d1ab5fb8855340dabcf4b821d1f68d704af7d2f9035659d48e2b4efaece8d660001b61088b565b6110ec7f47205d4b1d29ee305649aa041477551249ed1fa9f01ad462ffb65bae290a0ac260001b61088b565b6111187f49bdb3ce7951ecb7bea005dfd30a6772da8f08d236f36e6019501285080662a860001b61088b565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111679190615f83565b9250508190555061119a7fc032f76a87a7e2826ce0d5088a4138e028bdb3f2cada9ea0e5f689afd2d1ad2960001b61088b565b6111c67f4652e6dbc832be59bc667848acf85b891f1f58ef4839bab6506be1d9763b93a360001b61088b565b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611215919061600a565b925050819055506112487fb0eff535c822e8773d9caeb51f1a3846b17897c05af550dcbad61ee8fd400ca260001b61088b565b6112747f3662a377395bb0c84eac6698ba41046ef66cad594bc79b8a06f8f2d7f9330fcf60001b61088b565b8060066000828254611286919061600a565b925050819055506112b97f84aeb101a1c6c79818056f07d46d65854793d51300a53280f22f03d8cd365b7360001b61088b565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556113287f6e489e1dfb4efdce3e05d5112a935838636c1a0bc5ad16b2ffc03b2d6f1c2c2560001b61088b565b6113547fa3f97cae11f557a8e84ab2271a1e95206cdd9cd8843ccfc354eb6914467cc83160001b61088b565b6113807fb56281bb47c3206160a8b6d3ecb34db114633f9a0329b9e884d36fc6a6e7c65b60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b81526004016113df93929190615a4c565b602060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143191906154df565b611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790615cce565b60405180910390fd5b61149c7ffd80b2161784d2215aa16dfd2e9cc91de051ee762a169a1f26993e82048e822460001b61088b565b6114c87fddaa8e4211290e97a33eb5de792407763373670a9146580f0797ae8f6ed1f9f060001b61088b565b6114f47fe8a3fca5146ae0857120f0dd48ae60183563a99196a91a377b18d9a7c9e1db2d60001b61088b565b6115207fd47245ebdbc26f5b023f7c640f49a4b60c2afb5105846adb10a5b76622a9cfee60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161157d929190615ab5565b602060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cf91906154df565b61160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590615dae565b60405180910390fd5b61163a7f971f1c7f983e8348c3a489526c166137069c307e0ce33c5d5d3a060345f78c1660001b61088b565b6116667f857b0616aa26a6db7dbc70360d536dda2d077bcbeaab366731b87902c79fea1c60001b61088b565b6116927fc4b676c6a5574acbd0faa328db7a3daa0ae7a24af83cacd33f095d0f61a632ac60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af826040516116d89190615e2e565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b6117467fd253d371aa496259c53ff219dd6c2b30b672ca88f4e9ce6e35c4c5ecdad2a35860001b61088b565b6117727f5d397fee8e47be68ce42e27ab5a3a160235c2847699309a52e820e730996777160001b61088b565b61179e7f4317e362befb24472a05279a031e77edd03765f728350f384d1d1f4718072aac60001b61088b565b60003390506117cf7fb5328d63929cbd898986ae7afed33543de3b5c7a6c2015c4628db0a52fb80bf660001b61088b565b6117fb7f685ea125b5161ae63a97cedc43503512a137bc61a07314c52339db47435d909160001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061186b7f3a277c9cae702c6c504c89ac8f6a4b8177f7f11e3627814bd46813a2c9113a0c60001b61088b565b6118977f5840a65ca05aef07dced3d77a19d16920a7eeb814e3818c43166ab3290b4ec7160001b61088b565b6118c37fdb0b85bfdf80beecca5aecdbcdaca669f202a1a290ff92f2d1db5f858f8dcde860001b61088b565b60008311611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90615e0e565b60405180910390fd5b6119327fc446d280f23d3aac3cab23dc9c640c2beacde992c46bc46af3308bab77d592b560001b61088b565b61195e7ffe9e6910507ffb03cb54fcd55ac6e3d16b027ae4d336ef57fc75a51647949b4360001b61088b565b61198a7fcc32652760fe0ca43b7c58ad8814773cd7959dc9ef467bf74a793e7af907b8d560001b61088b565b6119b67f72d300426a293f62b4a23ffd15b541eda1a80d5e38aad8063bedb977c7e7388460001b61088b565b6000811180156119c65750828110155b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90615d2e565b60405180910390fd5b611a317f7156d2250145c89faded3bb8e741952a6c78e4c779df3048ff2b6ecf3113fe7d60001b61088b565b611a5d7fb962d4ce4ce9917d2af7dfd8414a0b44b434e50d0555617c9615fe314cfde03b60001b61088b565b611a897f114e7bdd036aa290c59e509dbc3a2c690180101b4f35d979b57cbfeea1db7d6360001b61088b565b611ab57f6b9ef942557d4e31d759cfdce44b891ab322c40bda685bf048ff376547949e4160001b61088b565b600960009054906101000a900460ff1615611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90615d8e565b60405180910390fd5b611b317ff436f224082ac585c31fb9f33d95d83113350cac3e1cbe81f8d737b3d65c32c960001b61088b565b611b5d7fbbd2725ab468a68cec20f820724ed618d3599533c2cd503eece66e8495bba69360001b61088b565b611b897f84e32760e32f5881d982bcd2e39de574f44bbfe7ed692571f4feab07537b328b60001b61088b565b8260056000828254611b9b919061600a565b92505081905550611bce7f582f26639188ba751f0d825ddff21eaf885840bd9195bcfcc9d0cda70e8ee2b060001b61088b565b611bfa7fe82805271728f16a8544fa042546935c187ba6662fcdc51fc578db660a93434c60001b61088b565b82600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c49919061600a565b92505081905550611c7c7f3d145496fb626ae282c1566beb8d9b6241fae437fb0e4bafd3e36a4968ef9c1a60001b61088b565b611ca87f2b99d4a62170ad60cd9311616b430637778c69f1c9d4216bc1a61f48703b3a5d60001b61088b565b611cd47f9be7c8d8a3dde1332838df312540a9b381968ed9358c283b67a994cf8e69e19f60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401611d31929190615ab5565b602060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8391906154df565b611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990615cae565b60405180910390fd5b611dee7f0d9de48cb15ac3d9337351b9cce4503ed84ca1681e6c727329d94a2775af4b8960001b61088b565b611e1a7f05cc821254c0266df6bc950cd27545caafe07f6e9a6fef19e132a0234c91737560001b61088b565b611e467fd013653b53b09cd103faa3406aa693b3ee9151c1974fa804824ae3bfdff1026260001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611e8c9190615e2e565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611ef290616181565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1e90616181565b8015611f6b5780601f10611f4057610100808354040283529160200191611f6b565b820191906000526020600020905b815481529060010190602001808311611f4e57829003601f168201915b505050505081565b60045481565b611fa57f1d30e19c0a3dccff1e6fc17ca4c1b94a05c7248f6679c42103df6a9640f1e52f60001b61088b565b611fd17f8f755842022f87b07e5323b604ab9e6bb3784a8d19bab58cb751435e9df3181760001b61088b565b611ffd7f1ed6ba9c1f073a5c1bee896b505100922b4af28491602884bb187f53876a59bf60001b61088b565b60008585604051602001612012929190615c10565b6040516020818303038152906040528051906020012090506120567fae6c306e62247c0d1c4994464d4a84d56441a757e3d71d10c29b594d8cd9202a60001b61088b565b6120827f263614f606e3e1374066fb66a7b1e0bfc76b2b9da372903a1d06d17e6d6ce1ad60001b61088b565b600083858360405160200161209993929190615e72565b6040516020818303038152906040528051906020012090506120dd7fa42606bea1394035bab4e8564fdfad92b2105e3bcf9924da9ff6f033206d32fc60001b61088b565b6121097f8349e9d560842c82407a62a9aff5e4f42cb779631a568028b95ea516bc3ebba060001b61088b565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016121669190615bee565b60206040518083038186803b15801561217e57600080fd5b505afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190615566565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016121f49493929190615af9565b602060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612246919061572b565b90506122747fb6a41f4dc948c75b618f7bd6304c2b98c7dc8163497ef57aae1304ebeb3079d460001b61088b565b6122a07fca567cf18071acdafbe1d94b7fb20f384a90f463eeeac1573df0f91d57c57d9860001b61088b565b6122df6040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082614e54565b61230b7f73f53fd5cf6da273b63f5f0dcdd6c37b37c856b26f91a72b138e83a5833e0a2e60001b61088b565b6123377f96ff8fe24babf7b2b785db85781763314634fd16d22e35569828445d64570b8360001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161237d9190615e2e565b60405180910390a25050505050505050565b60055481565b60006123c37f31a509deb94499dedc18c845a1da22a74fe4846b54425940d6a93cb3d118200660001b61088b565b6123ef7f3a66f13e243f61519a1b0cfbdfbbfe32a7ec0b8e57637f7de3fc7b2c34064ce360001b61088b565b61241b7fc217b4b50e2fb244bb873656335d721ed2fc97e1e354da90aa63d47dd20b207360001b61088b565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006124907fca487471bdd9aa13489eb5f3f32b62ad60b47bb56cb102ede63f4f0b579f73b760001b61088b565b6124bc7f2535d037b1683a14a92447b3be58ec0750b0b2b70bc9ef63f4ebd40ed571a97d60001b61088b565b6124e87f1d02e48e8d2f47776f581ba5b674c503fe65e743c18d90924ac99dae24a2d19a60001b61088b565b60003390506125197f25677934f7a8624c99feace478e3838c880e59096e3b901f7b530ba074cfa6a060001b61088b565b6125457f85b1b6126a5cce53ea175cb0f11e41fa19e9ef2d1d4c438f1c932ac6eed2d37b60001b61088b565b600061271090506125787ff8a4749223ccd8e9131763b16141e6068ddd41b0b78da9ce6b4283f70bf4d6aa60001b61088b565b6125a47f97da511c387193486c20c1f8c76ae3cc2c0cae6d88d113da83697f4593116cbb60001b61088b565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161260593929190615c40565b602060405180830381600087803b15801561261f57600080fd5b505af1158015612633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612657919061572b565b90506126857fd63c3bdf56ff9a0ed983ac64d4a9694f7cb8486971f2feaaecf13a416875695760001b61088b565b6126b17f32ff0076f11ddeaaae839726a7bf9f22d20f6e94cb8dea49dea61227090570ef60001b61088b565b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127217f8fed9a9f3f8b541522b3fe9ae95e41483ab8f28725343c6036ff1f3863c840a060001b61088b565b61274d7f40744a5adc7dede95171f7e6262bd372bff36aeacc869697c2251a9cc926dd9a60001b61088b565b8273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3258683604051612795929190615e49565b60405180910390a26127c97f1264f49a1a4af51bd542265fdd3e9dfc169dd7839195ce56013f71f967811e9360001b61088b565b6127f57fe668275fd30bb602dddfefeb82075f739e4d0fbd6b95e46d4a55559c5518009560001b61088b565b8093505050509392505050565b600c6020528060005260406000206000915090505481565b6128467f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6128727f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b61289e7f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6128ca7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129715750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a790615dce565b60405180910390fd5b6129dc7f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b612a087ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b612a347fc745dce6b4caa7abbb57e16fe5cc6ece34ef7cb67a7c6a322941b2e913039a8c60001b61088b565b612a607f598041f1972e682f66d793944094e7bd1558156146ae8e4e3e88da8ee30bbd7760001b61088b565b612a8c7f7a138529b906ac0b8444a00eec9b0a4fb5b817ad47804fc90a2482b1d48392c960001b61088b565b612ab87fed353c665479901eb496b4f04bd40aa56048fa154a005fa78d89774a48b4b2ac60001b61088b565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b159190615a31565b60206040518083038186803b158015612b2d57600080fd5b505afa158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b65919061572b565b11612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90615dee565b60405180910390fd5b612bd17f7a4bd7d3b5d4a0b88e7a7929e9102493a1e848c1fb0e60987ca4d0ced711935460001b61088b565b612bfd7fca81ba1a74f335042ae9c17057696a3cc8f51bc9d709a0d6cd8826e53292640b60001b61088b565b612c297f62e3df508415902ecf4b19c17e804dce5f329a8c98c2b74ae818f9f9c5e6b24b60001b61088b565b6000600960006101000a81548160ff021916908315150217905550612c707fa388602cccf298af3053c42d01ce8bcd71c151284b2c40438cc9bde2d32a936b60001b61088b565b612c9c7f81a35da6fbac67976f428cfc58221966c6b96694368149ddcf16417a2c2dd50260001b61088b565b7fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d667f26cbf179f7efd8b75a45afd485d03269335503c4c7d663a01da7abc1db505b5a60001b61088b565b612d927f0b35bd650e7f0f6af539cfef1d21764edfe4d988a8a85b7d4a2a7b6ad457939c60001b61088b565b612dbe7ff1f66c3fa7ecd0701591c2499bac3d3e0bbd3da7c2837e657659d89cb9c6b15c60001b61088b565b6000339050612def7ff5febd7ec3845aa06a6d9cf1efe47448a8f7cbb99feb84b68986dd3807dcc4b960001b61088b565b612e1b7fa59de6797f69e60dcc30d88a027c2f0c1f474b3242ea84af0c5cf2c328d76b0060001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e8b7f63b70bc7e84a11b91656cf54d5f0ae86a3b3a5c9e56803971e3e363bb422737460001b61088b565b612eb77fe05341f955bcb0cb8b81f870d8a0b8d8c3dc4ce360adfc4713a276f66f2448c560001b61088b565b612ee37fa5b2c5a92ab65f91a2b2b75c37de52338ce3ac7acc2837994cea8b42e9c3491760001b61088b565b60008311612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d90615e0e565b60405180910390fd5b612f527f1e45e73f6b9e4264577e35dc8ffc461a56844bf2ac7102bf0f93a47a9af1354060001b61088b565b612f7e7f657cdacd08421927f813c49d0d19085875e04d6c990b19d8d77a0e176e9f150760001b61088b565b612faa7f1165dd2ecb3273e9c0c8aa3106a83fcfea6bbeadc15cb70ef0581b2d572f052b60001b61088b565b612fd67f15e32cb322af197bb209048a33e9d342f4cee745660e28ff573d49a634ab875260001b61088b565b600081118015612fe65750828110155b613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c90615d2e565b60405180910390fd5b6130517f49df5a88bf96bfc8553fd325a0078b9eb3cf693032126677a117620c48088d6160001b61088b565b61307d7fb2fb3f9e569f6ba0e40e71632edce63429d381a386a32e5acc7e93ac9f1ed07260001b61088b565b6130a97f76e76c22ff5cfc1de547fdaef1c663c789f54cf0f035d888dedaae997f9a5af260001b61088b565b6130d57ff7ac82c9fe3334f99b376f7ccc15e3bd486f7608e704396d198c5fbee920910660001b61088b565b600960009054906101000a900460ff16613124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311b90615d6e565b60405180910390fd5b6131507fcf6a12e1cd198bf6ca60da02170f68d4b0e814d5658c2a50b77546e46ed27c0e60001b61088b565b61317c7f39159dbf78f3f0ac68f5624755f255b252ba73efcb09bb11e8a46f55c45a211a60001b61088b565b6131a87f15431f587883f96473e5ecba4d2475bd679f8afd7637a255a26cf99290d7049260001b61088b565b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132187fc94424670b2acc58f3a0711c9a20649d861090556658dad55c6c6fdc6e66291b60001b61088b565b6132447f0f351ab7469d1eeea658c04b5a24b4d5465fabefb1d6a152c7e194a2da2f8cf260001b61088b565b82600660008282546132569190615f83565b925050819055506132897f6b70f9eb11dd18a30449e9acff011df2739c2e3fc0a55bedad775864df885f4460001b61088b565b6132b57f08e3f956e37aa93868798b87ba511814ff2a4ed6329842984f7f211932f8929560001b61088b565b600960019054906101000a900460ff1680156132e0575060026004546132db9190615fd9565b600654115b15613376576133117fec092a5c98ddf912a2d86739fc961b862712ee89e85f1db7a177a396660299af60001b61088b565b61333d7f0c57ee4de6b3d52636fc9d97739148d781605612ae8a391edbbfea66c1118c5760001b61088b565b6133697f7f89d70b41db3472dc665c7438929780e988416820c8a638b01c538ee4eef2a660001b61088b565b613371614ef0565b6133a3565b6133a27fc15708d2924af7e37f1495dccfc0c4dc10aa06e6e6e0e0d71b88e00eab1a503a60001b61088b565b5b6133cf7fe0f35eabde6523d6038de32fc93d86b1cc186b0054941c8992e759d6d3c2df3860001b61088b565b6133fb7f07ad238c38e62635ae4f7548bba2ae6cd242311b88a9398a54bd7cdbbcb1e98160001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516134419190615e2e565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b60006134957f3fe2f4324a2e760f0766534b9d6e9f29f9cc27ade7d03a5a6f947093b345f1b860001b61088b565b6134c17f7df27044d66cb6219fbf90afd8ae6dd3bcdb0dc9c873ce799c75241424ee6fc060001b61088b565b6134ed7f468cb06af0b85c63d40b46798f28c621023247e9032f88fd3876e9d71d1d23c460001b61088b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016135489190615bee565b60206040518083038186803b15801561356057600080fd5b505afa158015613574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135989190615539565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d09190615a31565b60206040518083038186803b1580156135e857600080fd5b505afa1580156135fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613620919061572b565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6136797f6812cf59e4b81ddecd8f2b1f7fbfb48b5182a806c827c0dfd05826d7fdad744960001b61088b565b6136a57f6d077b16afa206e4b568904344b706c3bf698bc65745a3ab81ba91b666ba8bb160001b61088b565b6136d17f961b31b0eb150899b4350ba97c40fb4f4d6656a921731af079df31ea55c6db2560001b61088b565b60003390506137027f3100b3e748ce2c25beefad0a12161300b7eb7aa29cafb67305ef383dc277160f60001b61088b565b61372e7f385b5445321ce7fb324cebb72f2c150ebd70146da3cb1ded1086c09b2ccbec0060001b61088b565b61375a7ff55bde5e737caaf341b382e518d464d8c5b1aa65315865fb88f91b2534783fa260001b61088b565b600960009054906101000a900460ff16156137aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a190615d8e565b60405180910390fd5b6137d67f214b43e1a3ddb53264f0b0db58e7b94615fb4ae1c9edd4ed2bf1ddf7dfb68efb60001b61088b565b6138027f50901d754c8ff743aeb1bd9a17e9f767ec52d345e6dfd63e5e10a6fce53adcdf60001b61088b565b61382e7fbf5d8c928a34a9c5c5365b2256612c07d374f9064e0b0ee8d2b00ba83ba0055260001b61088b565b61385a7f501eeb26b24ce8a68e277150ad68774a06a38b18e81e167fba877d2d826d99ee60001b61088b565b6000821161389d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389490615e0e565b60405180910390fd5b6138c97fbb448e98ee5bd5bbc8e90971a18790d4ff69782ebb33c21b28f1d20078f3c6b360001b61088b565b6138f57f77bc78ed40585665c813ba7b08aa8cf6df2b82b2a7a9f5e13d9c65084bb6cdf260001b61088b565b6139217f9b51cdc0b1a01e554d06ae11a86eafd3ea29357887f30cef43e79b2ec6f07e5760001b61088b565b61394d7f89fb973c7fcef47842f79c7ef02a300b67e0b44fbefe8a63caec10f6a1d581cd60001b61088b565b6004546005548361395e9190615f83565b111561399f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399690615cee565b60405180910390fd5b6139cb7fac43ba5f87537e62e043ca97e2cee4541c0b1b8732e5d20736ee5d603909667360001b61088b565b6139f77f5be99f9f14ab7072461a997c5d413e55a81c32b63fd0d3cbf35e34bcf6ba2c0b60001b61088b565b613a237f3c53ff17b87feec27333ff84ed363b3f254d41cdbcf73d860090d7dd2a58fe4160001b61088b565b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a729190615f83565b92505081905550613aa57f3b65e0ed8fb8940554df654388f38b5444dbd30be91cb6b12bfbd1dbfe3fd55c60001b61088b565b613ad17fb8bcbe9c6ad2a8fac47c3fe3876d62e3fa450a2600649582b90710de362f701a60001b61088b565b8160056000828254613ae39190615f83565b92505081905550613b167fba9a374a98aba0dbe7dd86c7fd20661f0c15f66d54169df91b446c3d188788fc60001b61088b565b613b427fb1f191f0583e4bb4d953dc0f37ac771bdec7046a3d9b5f3b6a4ab7b8aac77f7d60001b61088b565b8073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051613b889190615e2e565b60405180910390a2613bbc7f486fb738975ecec9405ba5e2e93bb2b9065807aaa98d7e84313d1a769cd9174b60001b61088b565b613be87f216de3450f5e193a4873452e4fb786f63c5ab96875e7d91b9d72e9976c2dacb660001b61088b565b6004546005541415613c8557613c207f321714ea0ca82c0ae4ced0eea43387cb70df05aed21dc41a5edb1f2cbf2a544f60001b61088b565b613c4c7f13c519873b6a74031534ae786c5ecb3b839197d8653bd4dd3b886189f68585cf60001b61088b565b613c787ffb903ede64abab5c4a4dd814a6b2bea062f38014eea16741cb13d329498c6e2c60001b61088b565b613c80615098565b613cb2565b613cb17f3b38dc18f36c43c1cdc93d9c9afd8198487661d8fb689de9b4f2f0e6a0e2cd9260001b61088b565b5b613cde7fa59a194aee07e9449a5e12e6a9c1309f3a77274b2c41d17202832fa73cdbb9d260001b61088b565b613d0a7f8bff06d6c050958f0341bd5337c72cf3180a48ea8cffb7bd705e4a0ea2a2cdf860001b61088b565b613d367fc1bdf160f736625adbc4369faa91d20b26d5461ce70399b253a4b03105ee685460001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401613d9593929190615a4c565b602060405180830381600087803b158015613daf57600080fd5b505af1158015613dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de791906154df565b613e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1d90615cce565b60405180910390fd5b613e527f38c1730c33ac2ca7d80e3b8ec186a9f3f9b7dff06c2b8a678401a78413d288f660001b61088b565b5050565b613e827f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b613eae7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b613eda7f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b613f067f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8d90615dce565b60405180910390fd5b613fc27f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b613fee7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b61401a7f90d06bcd2ffadcd0c672766d630a5e192a6df47343607633bc683f5c0f131a8f60001b61088b565b6140467f4241bda9706ccd59d2f916698730326bae7836279367c2bfabaf6282d664a0e360001b61088b565b6140727f1ce7ed20e1651871d107033ede1384abc6575db7d46b56876fe8c43dbdf8bd1160001b61088b565b61409e7fd9a21af0d539c936097a5675a96c298c62ae82b94c030338d706a15ddf8e561c60001b61088b565b600960009054906101000a900460ff166140ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e490615d6e565b60405180910390fd5b6141197fc663d70129d4d863ec27f11d5bf1ea3c0238beeaab56b10f7a01d0344c7ad9de60001b61088b565b6141457fe2e45372a779b8f08033320b5550d0bac09caf08e95907923382ec79d0ff017f60001b61088b565b6141717ff6dc33cb68fee699ed81458de372a213024e78b15b0a015f46263bd8ce0dcdb260001b61088b565b61419d7f6b5feba8981a5b615a400148643de70390891b55899d721712cf9d6249c6573260001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161421e929190615ab5565b602060405180830381600087803b15801561423857600080fd5b505af115801561424c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427091906154df565b6142af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a690615d4e565b60405180910390fd5b6142db7fc014e6b3289b7ed79e4ca81e2c6abedd98221128b0e4d5deacdafb51f0d4c5bf60001b61088b565b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b61433b7f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6143677f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b6143937f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6143bf7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806144665750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6144a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161449c90615dce565b60405180910390fd5b6144d17f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b6144fd7ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b6145297f37315b138a4eb1f3e6961d3245e9f125c93e7013153d744cb4e744a5607a183660001b61088b565b6145557f6ed68854798f914348bf7c98baff5db65f282eaa9a709a788599507555af477260001b61088b565b6145817f79bf2ddfe07abf5f091c46b1951be01b9468b1cb19cc3ae745bf2f1a25aa5c2260001b61088b565b614589614ef0565b565b6145b77f9c1de37707e398b1ef2c8fd674c6d609a77b714460ef98eed74986a3e0c59a9b60001b61088b565b6145e37f9880b690349d44bd00c30d83a823c189c97351b9747b76f4821f133ce40a621760001b61088b565b61460f7f071f09138def1d09107b15f7cbd047359e4c5b24fe265bef940564ffd045f6dc60001b61088b565b60003390506146407fa4297625721f48f13f4c994dbac3d6214bc4a1a14b2d59dc565beef32dafc67b60001b61088b565b61466c7f25e231d523b598d7d8e9107f060d4480cceea8cef7acba5c23289a768ec080b960001b61088b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506146dc7f0945e46252f3b1bdd5d6b058f7cc014e184c7d21c76a983634d6269a65f0eb2c60001b61088b565b6147087f80eb402c0fc27561f19d1e7e68c0279eeae29207c8c857184b14ae4a19c79c8460001b61088b565b6147347f87185c95126b0a5b95a24765d79623c7a8a80645fe6ed86630f575973552247160001b61088b565b60008111614777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161476e90615d0e565b60405180910390fd5b6147a37f9479095e5c739fdfc501dd11d560a7418784699a4e1fa050ca62b420c9eb8f2560001b61088b565b6147cf7fbc7e949c9fa429aa39b9ce6abdf5c91a9aa383d19ae7aea7d461ef4962f26a6260001b61088b565b6147fb7ff40deae3c36b7474f3900bf336acd672fa06cc5b2faa275a99f60208a8b2415260001b61088b565b806006600082825461480d919061600a565b925050819055506148407ff3864655fb7564ff57fe9c6a439df1af0fece6a0db5471d85f113807bfae220860001b61088b565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556148af7f28de215e6016601450469219da10f355a14aa091c80520bcd791d2814f94895c60001b61088b565b6148db7f9a5bcbce21b940dba9cfbee6583452cde02592adaf1d35189ff586522fe4b3fb60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516149219190615e2e565b60405180910390a25050565b6149597f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b6149857fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6149b17f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6149dd7f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a6490615dce565b60405180910390fd5b614a997f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b614ac57fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b614af17f6474bc7b6c4c817e394a7770bcd8e9a3c367d41128bd02f30d9481664cc0edf260001b61088b565b614b1d7f35e3552e64d39c55309e0837bb68952eff825a965df10321e8ef06d8fa5a087960001b61088b565b614b497f5d1afb46bd1a2ae6aaa17481bd18b7019f1797881481135b1c94ccdcafb8339f60001b61088b565b614b757f298439278aab97593ed1479b65d64e72155e1d6df91562f07fe08092674c1a1a60001b61088b565b600960009054906101000a900460ff16614bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614bbb90615d6e565b60405180910390fd5b614bf07fefd324418f85207d4866beeb69e0fb6cccc15952ee8f4a6f7e88a2edd1345efc60001b61088b565b614c1c7fdb767e3aa2d03e1795b42198a2f94b68dfbc40904ef33967d1c7dcbd59ba0e6160001b61088b565b614c487fa60ba8065f646238e091b8e848671c7dd02b9e1940d25c74f3399ca8366eb6c860001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b8152600401614ca793929190615a83565b600060405180830381600087803b158015614cc157600080fd5b505af1158015614cd5573d6000803e3d6000fd5b50505050614d057f8d07e304d85e68966ea24bdf0fc6a7f038d59c72d847080d68a900c263e0a5d460001b61088b565b614d317f56450edd407148d8fa256d2068078a85def32b5856a9371ce8bb7686d799e22e60001b61088b565b6001600960016101000a81548160ff021916908315150217905550614d787f4a0abfe447e7e73bebebee8a0682f9e642fd53b3233707a6511f4541915448b360001b61088b565b614da47f81f757f4fb3bd969b74a83f57ca49e92c4cac6a4f3a8301c07ece5bcfa664ae560001b61088b565b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e117fd9e6438edd8d7ec14bbf4195a3d3b39e874ed0b07be368c470dc37504bc40db660001b61088b565b614e3d7ffa57c2a9e2e4cd25705c563e3ec471be7ee183591824200753623f34f81f46c460001b61088b565b818160039190614e4e9291906151e6565b50505050565b614eec8282604051602401614e6a929190615c7e565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151bd565b5050565b614f1c7fc6f0eafc16465fcff2bfcf5db8fed53bc9ab9d44b249407ebddca00225f75d8960001b61088b565b614f487f330533b22d1790e609a53398a705433950719ec56bed3778f077aaa3ca0c302660001b61088b565b614f747f5af90a19354250cb53a8c405d0803ec376193cbfcdf5858484dac343300b8e1a60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401614ff19190615a31565b600060405180830381600087803b15801561500b57600080fd5b505af115801561501f573d6000803e3d6000fd5b5050505061504f7fcaf230e320175de72e0c1dc3a48749cacdcf93e9f23fce2f32af0ab65a0509cf60001b61088b565b61507b7f6103720bb3d029f67142afa715f25ed641d66813a3c67b3f1a66238e4f5ea82560001b61088b565b6000600960016101000a81548160ff021916908315150217905550565b6150c47f83ea7233f89237db08578bb94cb062f0c8ec22c9edaade0226e2eb81487d9e5060001b61088b565b6150f07fe1dd018c6aee1cc9338e1dfa90d384822028d0488f4a450b9e38a0d19698239760001b61088b565b61511c7fc147cc81800e10a4c70cc63471c0b57923147deb30705b335733b00a7eb6cd9a60001b61088b565b6001600960006101000a81548160ff0219169083151502179055506151637f64007a2bab706e6aeedbb6cf3d4c9a346f4c38c22f8a31b10262e044d5e39fc860001b61088b565b61518f7f50f10bc90a015108201c5258518b8da2d5a55d32f4468a367423669e81727c1f60001b61088b565b7f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546151f290616181565b90600052602060002090601f016020900481019282615214576000855561525b565b82601f1061522d57803560ff191683800117855561525b565b8280016001018555821561525b579182015b8281111561525a57823582559160200191906001019061523f565b5b509050615268919061526c565b5090565b5b8082111561528557600081600090555060010161526d565b5090565b600061529c61529784615ee9565b615ec4565b9050828152602081018484840111156152b8576152b76162af565b5b6152c384828561613f565b509392505050565b60006152de6152d984615f1a565b615ec4565b9050828152602081018484840111156152fa576152f96162af565b5b61530584828561613f565b509392505050565b60008135905061531c816164bb565b92915050565b600081519050615331816164d2565b92915050565b600081359050615346816164e9565b92915050565b60008083601f840112615362576153616162a5565b5b8235905067ffffffffffffffff81111561537f5761537e6162a0565b5b60208301915083600182028301111561539b5761539a6162aa565b5b9250929050565b600082601f8301126153b7576153b66162a5565b5b81356153c7848260208601615289565b91505092915050565b6000815190506153df81616500565b92915050565b6000815190506153f481616517565b92915050565b600082601f83011261540f5761540e6162a5565b5b813561541f8482602086016152cb565b91505092915050565b6000813590506154378161652e565b92915050565b60008151905061544c8161652e565b92915050565b600060208284031215615468576154676162b9565b5b60006154768482850161530d565b91505092915050565b600080600060408486031215615498576154976162b9565b5b60006154a68682870161530d565b935050602084013567ffffffffffffffff8111156154c7576154c66162b4565b5b6154d38682870161534c565b92509250509250925092565b6000602082840312156154f5576154f46162b9565b5b600061550384828501615322565b91505092915050565b600060208284031215615522576155216162b9565b5b600061553084828501615337565b91505092915050565b60006020828403121561554f5761554e6162b9565b5b600061555d848285016153d0565b91505092915050565b60006020828403121561557c5761557b6162b9565b5b600061558a848285016153e5565b91505092915050565b6000602082840312156155a9576155a86162b9565b5b600082013567ffffffffffffffff8111156155c7576155c66162b4565b5b6155d3848285016153fa565b91505092915050565b6000806000606084860312156155f5576155f46162b9565b5b600084013567ffffffffffffffff811115615613576156126162b4565b5b61561f868287016153fa565b93505060206156308682870161530d565b925050604061564186828701615428565b9150509250925092565b600080600080600060a08688031215615667576156666162b9565b5b600086013567ffffffffffffffff811115615685576156846162b4565b5b615691888289016153fa565b95505060206156a28882890161530d565b94505060406156b388828901615428565b93505060606156c488828901615428565b925050608086013567ffffffffffffffff8111156156e5576156e46162b4565b5b6156f1888289016153a2565b9150509295509295909350565b600060208284031215615714576157136162b9565b5b600061572284828501615428565b91505092915050565b600060208284031215615741576157406162b9565b5b600061574f8482850161543d565b91505092915050565b6157618161603e565b82525050565b61577081616050565b82525050565b61577f8161605c565b82525050565b60006157918385615f61565b935061579e83858461613f565b6157a7836162be565b840190509392505050565b60006157bd82615f4b565b6157c78185615f61565b93506157d781856020860161614e565b6157e0816162be565b840191505092915050565b6157f4816160c1565b82525050565b615803816160d3565b82525050565b615812816160e5565b82525050565b615821816160f7565b82525050565b61583081616109565b82525050565b600061584182615f56565b61584b8185615f72565b935061585b81856020860161614e565b615864816162be565b840191505092915050565b600061587c601883615f72565b9150615887826162cf565b602082019050919050565b600061589f601783615f72565b91506158aa826162f8565b602082019050919050565b60006158c2601e83615f72565b91506158cd82616321565b602082019050919050565b60006158e5601783615f72565b91506158f08261634a565b602082019050919050565b6000615908601b83615f72565b915061591382616373565b602082019050919050565b600061592b601d83615f72565b91506159368261639c565b602082019050919050565b600061594e601b83615f72565b9150615959826163c5565b602082019050919050565b6000615971601783615f72565b915061597c826163ee565b602082019050919050565b6000615994601683615f72565b915061599f82616417565b602082019050919050565b60006159b7601583615f72565b91506159c282616440565b602082019050919050565b60006159da601d83615f72565b91506159e582616469565b602082019050919050565b60006159fd601783615f72565b9150615a0882616492565b602082019050919050565b615a1c816160aa565b82525050565b615a2b816160b4565b82525050565b6000602082019050615a466000830184615758565b92915050565b6000606082019050615a616000830186615758565b615a6e6020830185615758565b615a7b6040830184615a13565b949350505050565b6000604082019050615a986000830186615758565b8181036020830152615aab818486615785565b9050949350505050565b6000604082019050615aca6000830185615758565b615ad76020830184615a13565b9392505050565b6000602082019050615af36000830184615767565b92915050565b6000608082019050615b0e6000830187615776565b615b1b6020830186615a13565b615b286040830185615776565b8181036060830152615b3a81846157b2565b905095945050505050565b60006020820190508181036000830152615b5f81846157b2565b905092915050565b6000602082019050615b7c60008301846157eb565b92915050565b6000602082019050615b9760008301846157fa565b92915050565b6000602082019050615bb26000830184615809565b92915050565b6000602082019050615bcd6000830184615818565b92915050565b6000602082019050615be86000830184615827565b92915050565b60006020820190508181036000830152615c088184615836565b905092915050565b60006040820190508181036000830152615c2a8185615836565b9050615c396020830184615758565b9392505050565b60006060820190508181036000830152615c5a8186615836565b9050615c696020830185615758565b615c766040830184615a13565b949350505050565b60006040820190508181036000830152615c988185615836565b9050615ca76020830184615a13565b9392505050565b60006020820190508181036000830152615cc78161586f565b9050919050565b60006020820190508181036000830152615ce781615892565b9050919050565b60006020820190508181036000830152615d07816158b5565b9050919050565b60006020820190508181036000830152615d27816158d8565b9050919050565b60006020820190508181036000830152615d47816158fb565b9050919050565b60006020820190508181036000830152615d678161591e565b9050919050565b60006020820190508181036000830152615d8781615941565b9050919050565b60006020820190508181036000830152615da781615964565b9050919050565b60006020820190508181036000830152615dc781615987565b9050919050565b60006020820190508181036000830152615de7816159aa565b9050919050565b60006020820190508181036000830152615e07816159cd565b9050919050565b60006020820190508181036000830152615e27816159f0565b9050919050565b6000602082019050615e436000830184615a13565b92915050565b6000604082019050615e5e6000830185615a13565b615e6b6020830184615a13565b9392505050565b6000606082019050615e876000830186615a13565b615e946020830185615a13565b615ea16040830184615776565b949350505050565b6000602082019050615ebe6000830184615a22565b92915050565b6000615ece615edf565b9050615eda82826161b3565b919050565b6000604051905090565b600067ffffffffffffffff821115615f0457615f03616271565b5b615f0d826162be565b9050602081019050919050565b600067ffffffffffffffff821115615f3557615f34616271565b5b615f3e826162be565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615f8e826160aa565b9150615f99836160aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615fce57615fcd6161e4565b5b828201905092915050565b6000615fe4826160aa565b9150615fef836160aa565b925082615fff57615ffe616213565b5b828204905092915050565b6000616015826160aa565b9150616020836160aa565b925082821015616033576160326161e4565b5b828203905092915050565b60006160498261608a565b9050919050565b60008115159050919050565b6000819050919050565b60006160718261603e565b9050919050565b60006160838261603e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006160cc8261611b565b9050919050565b60006160de8261611b565b9050919050565b60006160f08261611b565b9050919050565b60006161028261611b565b9050919050565b60006161148261611b565b9050919050565b60006161268261612d565b9050919050565b60006161388261608a565b9050919050565b82818337600083830152505050565b60005b8381101561616c578082015181840152602081019050616151565b8381111561617b576000848401525b50505050565b6000600282049050600182168061619957607f821691505b602082108114156161ad576161ac616242565b5b50919050565b6161bc826162be565b810181811067ffffffffffffffff821117156161db576161da616271565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6164c48161603e565b81146164cf57600080fd5b50565b6164db81616050565b81146164e657600080fd5b50565b6164f28161605c565b81146164fd57600080fd5b50565b61650981616066565b811461651457600080fd5b50565b61652081616078565b811461652b57600080fd5b50565b616537816160aa565b811461654257600080fd5b5056fea2646970667358221220d1b413200c15d31cb3c760bb1c9647c7ae90a9b5213c395f6cb6b0cfc444f64664736f6c63430008070033", - "deployedBytecode": "0x6080604052600436106102135760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e146107de578063e39f610114610809578063e438a77d14610834578063e714a0281461084b578063e7585aea1461086257610294565b8063b6b34c6714610748578063b6b55f2514610773578063b7eb85c41461079c578063d5b2a01a146107b357610294565b80639e45e0d0116100e75780639e45e0d0146106615780639ee679e81461068c578063a4e2d634146106b5578063aaaa0c4b146106e0578063ac3479871461070b57610294565b80637ecebe00146105b757806389026538146105f45780638da5cb5b1461060b578063901a64981461063657610294565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f146104be5780636664e42e146104e95780636ec21cc81461051257806370a082311461053d57806371bbef361461057a57610294565b80632e1a7d4d1461041457806334246f9b1461043d578063372500ab1461046857806363ffab311461049357610294565b806322366844116101e2578063223668441461031b578063270016fb1461034657806327b380f31461036f57806327e235e3146103ac5780632e0f2625146103e957610294565b8063023c5b08146102995780630d3daff4146102c45780631261795d146102ed57806313a0ae2b1461030457610294565b36610294576102447f75e2f740915a3cc8e356ba3de03b6311a994f3b3e237c881143a486c85f653bf60001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c3460405161028a9190615e2e565b60405180910390a2005b600080fd5b3480156102a557600080fd5b506102ae61088e565b6040516102bb9190615a31565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061550c565b61088b565b005b3480156102f957600080fd5b506103026108b4565b005b34801561031057600080fd5b50610319610c61565b005b34801561032757600080fd5b50610330610d96565b60405161033d9190615ade565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190615452565b610da9565b005b34801561037b57600080fd5b5061039660048036038101906103919190615452565b6116e5565b6040516103a39190615e2e565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190615452565b6116fd565b6040516103e09190615e2e565b60405180910390f35b3480156103f557600080fd5b506103fe611715565b60405161040b9190615ea9565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906156fe565b61171a565b005b34801561044957600080fd5b50610452611e99565b60405161045f9190615bb8565b60405180910390f35b34801561047457600080fd5b5061047d611ebf565b60405161048a9190615b67565b60405180910390f35b34801561049f57600080fd5b506104a8611ee5565b6040516104b59190615b45565b60405180910390f35b3480156104ca57600080fd5b506104d3611f73565b6040516104e09190615e2e565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061564b565b611f79565b005b34801561051e57600080fd5b5061052761238f565b6040516105349190615e2e565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190615452565b612395565b6040516105719190615e2e565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c91906155dc565b612462565b6040516105ae9190615e2e565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190615452565b612802565b6040516105eb9190615e2e565b60405180910390f35b34801561060057600080fd5b5061060961281a565b005b34801561061757600080fd5b50610620612cca565b60405161062d9190615a31565b60405180910390f35b34801561064257600080fd5b5061064b612cee565b6040516106589190615a31565b60405180910390f35b34801561066d57600080fd5b50610676612d14565b6040516106839190615b9d565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae91906156fe565b612d3a565b005b3480156106c157600080fd5b506106ca61344e565b6040516106d79190615ade565b60405180910390f35b3480156106ec57600080fd5b506106f5613461565b6040516107029190615e2e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190615593565b613467565b60405161073f9190615e2e565b60405180910390f35b34801561075457600080fd5b5061075d613627565b60405161076a9190615b82565b60405180910390f35b34801561077f57600080fd5b5061079a600480360381019061079591906156fe565b61364d565b005b3480156107a857600080fd5b506107b1613e56565b005b3480156107bf57600080fd5b506107c86142dd565b6040516107d59190615e2e565b60405180910390f35b3480156107ea57600080fd5b506107f36142e3565b6040516108009190615bd3565b60405180910390f35b34801561081557600080fd5b5061081e614309565b60405161082b9190615e2e565b60405180910390f35b34801561084057600080fd5b5061084961430f565b005b34801561085757600080fd5b5061086061458b565b005b34801561086e57600080fd5b506108896004803603810190610884919061547f565b61492d565b005b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e07f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b61090c7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6109387f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6109647f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90615dce565b60405180910390fd5b610a207f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b610a4c7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b610a787f05c52e2e757b704ee37cacc85bcd2ad31fe4940327f21c40eee49cc43f40b54c60001b61088b565b610aa47f4e365342f0946657194340f9abcecb6efff5ad753ee4a810ac628874d9af7e9960001b61088b565b610ad07f1cfd4bb9ff4d7b04472d64ac4c71f02514058461560de91cb2d6adf53c42b03760001b61088b565b6000479050610b017f2f887d90a6ab98f6d741d4f5e87bcff7d89d8ec3d643e5ce3fff9a84f8f0431560001b61088b565b610b2d7fff8f4728043ff8198c1aa493e774318cefee1508be4f7bcebfa10ad136884da160001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b95573d6000803e3d6000fd5b50610bc27ffaca8b38bad904074d007a99936885c24bd108a1a46b38f4c8a00f65f54cd4a460001b61088b565b610bee7f52257046d0c47f4ae30056e2e831a9c4ad542da6194311c529bbaca75e2091a460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b82604051610c569190615e2e565b60405180910390a250565b610c8d7fe37cf64a6e2d819f234a4ed5d51ffe87eeb65d17ad7e35edd2866d470c0e686360001b61088b565b610cb97f2c9a5bb9934ad26fd47b925cf7e21513a09ad2300a827ed2c6a3a289f35a1d9060001b61088b565b610ce57f610be81338132ba49157beb1959166f8826c8c0f9c6a3330c48198fd0eeb4dca60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610d629190615a31565b600060405180830381600087803b158015610d7c57600080fd5b505af1158015610d90573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b610dd57f1b7825aa90ae0390b7d08f70ab0ae77d4e3bb14784180749876c960ac9b0ac1f60001b61088b565b610e017fe5d6d09a3d2fb99a296c779de820bf5b47d0d6f14a8f234e9754c9e868ec0be760001b61088b565b610e2d7f9c1e4b135d12400212e4ad6cd2df6468eda7cf557ee72c89ff703f31750e7a6760001b61088b565b6000339050610e5e7f5910a6bcf8f721265348162504d272c5b0f807035f38eb0c6ca693a94e8deffa60001b61088b565b610e8a7f106075404d6754987900f9233375c5b2945bf733a624630b8d96373a6a8ae95660001b61088b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610efa7f822f65ddaf2e607f4c7a283fa11fc92b424479b67410f230d15ea4fb4865971560001b61088b565b610f267f7e47b30d64bd58c0773b828730e6c8c6229b9d619842fffda31181ed9a85574160001b61088b565b610f527f6b311aced70799415367572deedaaa37fc2d86dfa5e52389181ee2e4fe4ad8a560001b61088b565b60008111610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90615d0e565b60405180910390fd5b610fc17f55055761879b72e301ad794768d65cf85b05a5442eb810baa507aa0600b5b72260001b61088b565b610fed7fbf5f0e0c4cd66ac25aacc3651d4816f49e3dbeea067ba3e773c5cbec8a378f0760001b61088b565b6110197f597dde0e30053f3ea38523fa6f930598e34b609168b281c7abcbdc2fe7988b7a60001b61088b565b6110457fc33772c7445a06a14b8d406a5b8bb43db3ca4350b24f9f847631fdfba6f604a160001b61088b565b600960009054906101000a900460ff16611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90615d6e565b60405180910390fd5b6110c07f76d1ab5fb8855340dabcf4b821d1f68d704af7d2f9035659d48e2b4efaece8d660001b61088b565b6110ec7f47205d4b1d29ee305649aa041477551249ed1fa9f01ad462ffb65bae290a0ac260001b61088b565b6111187f49bdb3ce7951ecb7bea005dfd30a6772da8f08d236f36e6019501285080662a860001b61088b565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111679190615f83565b9250508190555061119a7fc032f76a87a7e2826ce0d5088a4138e028bdb3f2cada9ea0e5f689afd2d1ad2960001b61088b565b6111c67f4652e6dbc832be59bc667848acf85b891f1f58ef4839bab6506be1d9763b93a360001b61088b565b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611215919061600a565b925050819055506112487fb0eff535c822e8773d9caeb51f1a3846b17897c05af550dcbad61ee8fd400ca260001b61088b565b6112747f3662a377395bb0c84eac6698ba41046ef66cad594bc79b8a06f8f2d7f9330fcf60001b61088b565b8060066000828254611286919061600a565b925050819055506112b97f84aeb101a1c6c79818056f07d46d65854793d51300a53280f22f03d8cd365b7360001b61088b565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556113287f6e489e1dfb4efdce3e05d5112a935838636c1a0bc5ad16b2ffc03b2d6f1c2c2560001b61088b565b6113547fa3f97cae11f557a8e84ab2271a1e95206cdd9cd8843ccfc354eb6914467cc83160001b61088b565b6113807fb56281bb47c3206160a8b6d3ecb34db114633f9a0329b9e884d36fc6a6e7c65b60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b81526004016113df93929190615a4c565b602060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143191906154df565b611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790615cce565b60405180910390fd5b61149c7ffd80b2161784d2215aa16dfd2e9cc91de051ee762a169a1f26993e82048e822460001b61088b565b6114c87fddaa8e4211290e97a33eb5de792407763373670a9146580f0797ae8f6ed1f9f060001b61088b565b6114f47fe8a3fca5146ae0857120f0dd48ae60183563a99196a91a377b18d9a7c9e1db2d60001b61088b565b6115207fd47245ebdbc26f5b023f7c640f49a4b60c2afb5105846adb10a5b76622a9cfee60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161157d929190615ab5565b602060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cf91906154df565b61160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590615dae565b60405180910390fd5b61163a7f971f1c7f983e8348c3a489526c166137069c307e0ce33c5d5d3a060345f78c1660001b61088b565b6116667f857b0616aa26a6db7dbc70360d536dda2d077bcbeaab366731b87902c79fea1c60001b61088b565b6116927fc4b676c6a5574acbd0faa328db7a3daa0ae7a24af83cacd33f095d0f61a632ac60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af826040516116d89190615e2e565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b6117467fd253d371aa496259c53ff219dd6c2b30b672ca88f4e9ce6e35c4c5ecdad2a35860001b61088b565b6117727f5d397fee8e47be68ce42e27ab5a3a160235c2847699309a52e820e730996777160001b61088b565b61179e7f4317e362befb24472a05279a031e77edd03765f728350f384d1d1f4718072aac60001b61088b565b60003390506117cf7fb5328d63929cbd898986ae7afed33543de3b5c7a6c2015c4628db0a52fb80bf660001b61088b565b6117fb7f685ea125b5161ae63a97cedc43503512a137bc61a07314c52339db47435d909160001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061186b7f3a277c9cae702c6c504c89ac8f6a4b8177f7f11e3627814bd46813a2c9113a0c60001b61088b565b6118977f5840a65ca05aef07dced3d77a19d16920a7eeb814e3818c43166ab3290b4ec7160001b61088b565b6118c37fdb0b85bfdf80beecca5aecdbcdaca669f202a1a290ff92f2d1db5f858f8dcde860001b61088b565b60008311611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90615e0e565b60405180910390fd5b6119327fc446d280f23d3aac3cab23dc9c640c2beacde992c46bc46af3308bab77d592b560001b61088b565b61195e7ffe9e6910507ffb03cb54fcd55ac6e3d16b027ae4d336ef57fc75a51647949b4360001b61088b565b61198a7fcc32652760fe0ca43b7c58ad8814773cd7959dc9ef467bf74a793e7af907b8d560001b61088b565b6119b67f72d300426a293f62b4a23ffd15b541eda1a80d5e38aad8063bedb977c7e7388460001b61088b565b6000811180156119c65750828110155b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90615d2e565b60405180910390fd5b611a317f7156d2250145c89faded3bb8e741952a6c78e4c779df3048ff2b6ecf3113fe7d60001b61088b565b611a5d7fb962d4ce4ce9917d2af7dfd8414a0b44b434e50d0555617c9615fe314cfde03b60001b61088b565b611a897f114e7bdd036aa290c59e509dbc3a2c690180101b4f35d979b57cbfeea1db7d6360001b61088b565b611ab57f6b9ef942557d4e31d759cfdce44b891ab322c40bda685bf048ff376547949e4160001b61088b565b600960009054906101000a900460ff1615611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90615d8e565b60405180910390fd5b611b317ff436f224082ac585c31fb9f33d95d83113350cac3e1cbe81f8d737b3d65c32c960001b61088b565b611b5d7fbbd2725ab468a68cec20f820724ed618d3599533c2cd503eece66e8495bba69360001b61088b565b611b897f84e32760e32f5881d982bcd2e39de574f44bbfe7ed692571f4feab07537b328b60001b61088b565b8260056000828254611b9b919061600a565b92505081905550611bce7f582f26639188ba751f0d825ddff21eaf885840bd9195bcfcc9d0cda70e8ee2b060001b61088b565b611bfa7fe82805271728f16a8544fa042546935c187ba6662fcdc51fc578db660a93434c60001b61088b565b82600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c49919061600a565b92505081905550611c7c7f3d145496fb626ae282c1566beb8d9b6241fae437fb0e4bafd3e36a4968ef9c1a60001b61088b565b611ca87f2b99d4a62170ad60cd9311616b430637778c69f1c9d4216bc1a61f48703b3a5d60001b61088b565b611cd47f9be7c8d8a3dde1332838df312540a9b381968ed9358c283b67a994cf8e69e19f60001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401611d31929190615ab5565b602060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8391906154df565b611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990615cae565b60405180910390fd5b611dee7f0d9de48cb15ac3d9337351b9cce4503ed84ca1681e6c727329d94a2775af4b8960001b61088b565b611e1a7f05cc821254c0266df6bc950cd27545caafe07f6e9a6fef19e132a0234c91737560001b61088b565b611e467fd013653b53b09cd103faa3406aa693b3ee9151c1974fa804824ae3bfdff1026260001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611e8c9190615e2e565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054611ef290616181565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1e90616181565b8015611f6b5780601f10611f4057610100808354040283529160200191611f6b565b820191906000526020600020905b815481529060010190602001808311611f4e57829003601f168201915b505050505081565b60045481565b611fa57f1d30e19c0a3dccff1e6fc17ca4c1b94a05c7248f6679c42103df6a9640f1e52f60001b61088b565b611fd17f8f755842022f87b07e5323b604ab9e6bb3784a8d19bab58cb751435e9df3181760001b61088b565b611ffd7f1ed6ba9c1f073a5c1bee896b505100922b4af28491602884bb187f53876a59bf60001b61088b565b60008585604051602001612012929190615c10565b6040516020818303038152906040528051906020012090506120567fae6c306e62247c0d1c4994464d4a84d56441a757e3d71d10c29b594d8cd9202a60001b61088b565b6120827f263614f606e3e1374066fb66a7b1e0bfc76b2b9da372903a1d06d17e6d6ce1ad60001b61088b565b600083858360405160200161209993929190615e72565b6040516020818303038152906040528051906020012090506120dd7fa42606bea1394035bab4e8564fdfad92b2105e3bcf9924da9ff6f033206d32fc60001b61088b565b6121097f8349e9d560842c82407a62a9aff5e4f42cb779631a568028b95ea516bc3ebba060001b61088b565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b81526004016121669190615bee565b60206040518083038186803b15801561217e57600080fd5b505afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190615566565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016121f49493929190615af9565b602060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612246919061572b565b90506122747fb6a41f4dc948c75b618f7bd6304c2b98c7dc8163497ef57aae1304ebeb3079d460001b61088b565b6122a07fca567cf18071acdafbe1d94b7fb20f384a90f463eeeac1573df0f91d57c57d9860001b61088b565b6122df6040518060400160405280600a81526020017f6d696e74416d6f756e740000000000000000000000000000000000000000000081525082614e54565b61230b7f73f53fd5cf6da273b63f5f0dcdd6c37b37c856b26f91a72b138e83a5833e0a2e60001b61088b565b6123377f96ff8fe24babf7b2b785db85781763314634fd16d22e35569828445d64570b8360001b61088b565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161237d9190615e2e565b60405180910390a25050505050505050565b60055481565b60006123c37f31a509deb94499dedc18c845a1da22a74fe4846b54425940d6a93cb3d118200660001b61088b565b6123ef7f3a66f13e243f61519a1b0cfbdfbbfe32a7ec0b8e57637f7de3fc7b2c34064ce360001b61088b565b61241b7fc217b4b50e2fb244bb873656335d721ed2fc97e1e354da90aa63d47dd20b207360001b61088b565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006124907fca487471bdd9aa13489eb5f3f32b62ad60b47bb56cb102ede63f4f0b579f73b760001b61088b565b6124bc7f2535d037b1683a14a92447b3be58ec0750b0b2b70bc9ef63f4ebd40ed571a97d60001b61088b565b6124e87f1d02e48e8d2f47776f581ba5b674c503fe65e743c18d90924ac99dae24a2d19a60001b61088b565b60003390506125197f25677934f7a8624c99feace478e3838c880e59096e3b901f7b530ba074cfa6a060001b61088b565b6125457f85b1b6126a5cce53ea175cb0f11e41fa19e9ef2d1d4c438f1c932ac6eed2d37b60001b61088b565b600061271090506125787ff8a4749223ccd8e9131763b16141e6068ddd41b0b78da9ce6b4283f70bf4d6aa60001b61088b565b6125a47f97da511c387193486c20c1f8c76ae3cc2c0cae6d88d113da83697f4593116cbb60001b61088b565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161260593929190615c40565b602060405180830381600087803b15801561261f57600080fd5b505af1158015612633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612657919061572b565b90506126857fd63c3bdf56ff9a0ed983ac64d4a9694f7cb8486971f2feaaecf13a416875695760001b61088b565b6126b17f32ff0076f11ddeaaae839726a7bf9f22d20f6e94cb8dea49dea61227090570ef60001b61088b565b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127217f8fed9a9f3f8b541522b3fe9ae95e41483ab8f28725343c6036ff1f3863c840a060001b61088b565b61274d7f40744a5adc7dede95171f7e6262bd372bff36aeacc869697c2251a9cc926dd9a60001b61088b565b8273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3258683604051612795929190615e49565b60405180910390a26127c97f1264f49a1a4af51bd542265fdd3e9dfc169dd7839195ce56013f71f967811e9360001b61088b565b6127f57fe668275fd30bb602dddfefeb82075f739e4d0fbd6b95e46d4a55559c5518009560001b61088b565b8093505050509392505050565b600c6020528060005260406000206000915090505481565b6128467f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6128727f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b61289e7f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6128ca7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129715750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a790615dce565b60405180910390fd5b6129dc7f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b612a087ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b612a347fc745dce6b4caa7abbb57e16fe5cc6ece34ef7cb67a7c6a322941b2e913039a8c60001b61088b565b612a607f598041f1972e682f66d793944094e7bd1558156146ae8e4e3e88da8ee30bbd7760001b61088b565b612a8c7f7a138529b906ac0b8444a00eec9b0a4fb5b817ad47804fc90a2482b1d48392c960001b61088b565b612ab87fed353c665479901eb496b4f04bd40aa56048fa154a005fa78d89774a48b4b2ac60001b61088b565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b159190615a31565b60206040518083038186803b158015612b2d57600080fd5b505afa158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b65919061572b565b11612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90615dee565b60405180910390fd5b612bd17f7a4bd7d3b5d4a0b88e7a7929e9102493a1e848c1fb0e60987ca4d0ced711935460001b61088b565b612bfd7fca81ba1a74f335042ae9c17057696a3cc8f51bc9d709a0d6cd8826e53292640b60001b61088b565b612c297f62e3df508415902ecf4b19c17e804dce5f329a8c98c2b74ae818f9f9c5e6b24b60001b61088b565b6000600960006101000a81548160ff021916908315150217905550612c707fa388602cccf298af3053c42d01ce8bcd71c151284b2c40438cc9bde2d32a936b60001b61088b565b612c9c7f81a35da6fbac67976f428cfc58221966c6b96694368149ddcf16417a2c2dd50260001b61088b565b7fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d667f26cbf179f7efd8b75a45afd485d03269335503c4c7d663a01da7abc1db505b5a60001b61088b565b612d927f0b35bd650e7f0f6af539cfef1d21764edfe4d988a8a85b7d4a2a7b6ad457939c60001b61088b565b612dbe7ff1f66c3fa7ecd0701591c2499bac3d3e0bbd3da7c2837e657659d89cb9c6b15c60001b61088b565b6000339050612def7ff5febd7ec3845aa06a6d9cf1efe47448a8f7cbb99feb84b68986dd3807dcc4b960001b61088b565b612e1b7fa59de6797f69e60dcc30d88a027c2f0c1f474b3242ea84af0c5cf2c328d76b0060001b61088b565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e8b7f63b70bc7e84a11b91656cf54d5f0ae86a3b3a5c9e56803971e3e363bb422737460001b61088b565b612eb77fe05341f955bcb0cb8b81f870d8a0b8d8c3dc4ce360adfc4713a276f66f2448c560001b61088b565b612ee37fa5b2c5a92ab65f91a2b2b75c37de52338ce3ac7acc2837994cea8b42e9c3491760001b61088b565b60008311612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d90615e0e565b60405180910390fd5b612f527f1e45e73f6b9e4264577e35dc8ffc461a56844bf2ac7102bf0f93a47a9af1354060001b61088b565b612f7e7f657cdacd08421927f813c49d0d19085875e04d6c990b19d8d77a0e176e9f150760001b61088b565b612faa7f1165dd2ecb3273e9c0c8aa3106a83fcfea6bbeadc15cb70ef0581b2d572f052b60001b61088b565b612fd67f15e32cb322af197bb209048a33e9d342f4cee745660e28ff573d49a634ab875260001b61088b565b600081118015612fe65750828110155b613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c90615d2e565b60405180910390fd5b6130517f49df5a88bf96bfc8553fd325a0078b9eb3cf693032126677a117620c48088d6160001b61088b565b61307d7fb2fb3f9e569f6ba0e40e71632edce63429d381a386a32e5acc7e93ac9f1ed07260001b61088b565b6130a97f76e76c22ff5cfc1de547fdaef1c663c789f54cf0f035d888dedaae997f9a5af260001b61088b565b6130d57ff7ac82c9fe3334f99b376f7ccc15e3bd486f7608e704396d198c5fbee920910660001b61088b565b600960009054906101000a900460ff16613124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311b90615d6e565b60405180910390fd5b6131507fcf6a12e1cd198bf6ca60da02170f68d4b0e814d5658c2a50b77546e46ed27c0e60001b61088b565b61317c7f39159dbf78f3f0ac68f5624755f255b252ba73efcb09bb11e8a46f55c45a211a60001b61088b565b6131a87f15431f587883f96473e5ecba4d2475bd679f8afd7637a255a26cf99290d7049260001b61088b565b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132187fc94424670b2acc58f3a0711c9a20649d861090556658dad55c6c6fdc6e66291b60001b61088b565b6132447f0f351ab7469d1eeea658c04b5a24b4d5465fabefb1d6a152c7e194a2da2f8cf260001b61088b565b82600660008282546132569190615f83565b925050819055506132897f6b70f9eb11dd18a30449e9acff011df2739c2e3fc0a55bedad775864df885f4460001b61088b565b6132b57f08e3f956e37aa93868798b87ba511814ff2a4ed6329842984f7f211932f8929560001b61088b565b600960019054906101000a900460ff1680156132e0575060026004546132db9190615fd9565b600654115b15613376576133117fec092a5c98ddf912a2d86739fc961b862712ee89e85f1db7a177a396660299af60001b61088b565b61333d7f0c57ee4de6b3d52636fc9d97739148d781605612ae8a391edbbfea66c1118c5760001b61088b565b6133697f7f89d70b41db3472dc665c7438929780e988416820c8a638b01c538ee4eef2a660001b61088b565b613371614ef0565b6133a3565b6133a27fc15708d2924af7e37f1495dccfc0c4dc10aa06e6e6e0e0d71b88e00eab1a503a60001b61088b565b5b6133cf7fe0f35eabde6523d6038de32fc93d86b1cc186b0054941c8992e759d6d3c2df3860001b61088b565b6133fb7f07ad238c38e62635ae4f7548bba2ae6cd242311b88a9398a54bd7cdbbcb1e98160001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c082590846040516134419190615e2e565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b60006134957f3fe2f4324a2e760f0766534b9d6e9f29f9cc27ade7d03a5a6f947093b345f1b860001b61088b565b6134c17f7df27044d66cb6219fbf90afd8ae6dd3bcdb0dc9c873ce799c75241424ee6fc060001b61088b565b6134ed7f468cb06af0b85c63d40b46798f28c621023247e9032f88fd3876e9d71d1d23c460001b61088b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b81526004016135489190615bee565b60206040518083038186803b15801561356057600080fd5b505afa158015613574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135989190615539565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d09190615a31565b60206040518083038186803b1580156135e857600080fd5b505afa1580156135fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613620919061572b565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6136797f6812cf59e4b81ddecd8f2b1f7fbfb48b5182a806c827c0dfd05826d7fdad744960001b61088b565b6136a57f6d077b16afa206e4b568904344b706c3bf698bc65745a3ab81ba91b666ba8bb160001b61088b565b6136d17f961b31b0eb150899b4350ba97c40fb4f4d6656a921731af079df31ea55c6db2560001b61088b565b60003390506137027f3100b3e748ce2c25beefad0a12161300b7eb7aa29cafb67305ef383dc277160f60001b61088b565b61372e7f385b5445321ce7fb324cebb72f2c150ebd70146da3cb1ded1086c09b2ccbec0060001b61088b565b61375a7ff55bde5e737caaf341b382e518d464d8c5b1aa65315865fb88f91b2534783fa260001b61088b565b600960009054906101000a900460ff16156137aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a190615d8e565b60405180910390fd5b6137d67f214b43e1a3ddb53264f0b0db58e7b94615fb4ae1c9edd4ed2bf1ddf7dfb68efb60001b61088b565b6138027f50901d754c8ff743aeb1bd9a17e9f767ec52d345e6dfd63e5e10a6fce53adcdf60001b61088b565b61382e7fbf5d8c928a34a9c5c5365b2256612c07d374f9064e0b0ee8d2b00ba83ba0055260001b61088b565b61385a7f501eeb26b24ce8a68e277150ad68774a06a38b18e81e167fba877d2d826d99ee60001b61088b565b6000821161389d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389490615e0e565b60405180910390fd5b6138c97fbb448e98ee5bd5bbc8e90971a18790d4ff69782ebb33c21b28f1d20078f3c6b360001b61088b565b6138f57f77bc78ed40585665c813ba7b08aa8cf6df2b82b2a7a9f5e13d9c65084bb6cdf260001b61088b565b6139217f9b51cdc0b1a01e554d06ae11a86eafd3ea29357887f30cef43e79b2ec6f07e5760001b61088b565b61394d7f89fb973c7fcef47842f79c7ef02a300b67e0b44fbefe8a63caec10f6a1d581cd60001b61088b565b6004546005548361395e9190615f83565b111561399f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399690615cee565b60405180910390fd5b6139cb7fac43ba5f87537e62e043ca97e2cee4541c0b1b8732e5d20736ee5d603909667360001b61088b565b6139f77f5be99f9f14ab7072461a997c5d413e55a81c32b63fd0d3cbf35e34bcf6ba2c0b60001b61088b565b613a237f3c53ff17b87feec27333ff84ed363b3f254d41cdbcf73d860090d7dd2a58fe4160001b61088b565b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a729190615f83565b92505081905550613aa57f3b65e0ed8fb8940554df654388f38b5444dbd30be91cb6b12bfbd1dbfe3fd55c60001b61088b565b613ad17fb8bcbe9c6ad2a8fac47c3fe3876d62e3fa450a2600649582b90710de362f701a60001b61088b565b8160056000828254613ae39190615f83565b92505081905550613b167fba9a374a98aba0dbe7dd86c7fd20661f0c15f66d54169df91b446c3d188788fc60001b61088b565b613b427fb1f191f0583e4bb4d953dc0f37ac771bdec7046a3d9b5f3b6a4ab7b8aac77f7d60001b61088b565b8073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051613b889190615e2e565b60405180910390a2613bbc7f486fb738975ecec9405ba5e2e93bb2b9065807aaa98d7e84313d1a769cd9174b60001b61088b565b613be87f216de3450f5e193a4873452e4fb786f63c5ab96875e7d91b9d72e9976c2dacb660001b61088b565b6004546005541415613c8557613c207f321714ea0ca82c0ae4ced0eea43387cb70df05aed21dc41a5edb1f2cbf2a544f60001b61088b565b613c4c7f13c519873b6a74031534ae786c5ecb3b839197d8653bd4dd3b886189f68585cf60001b61088b565b613c787ffb903ede64abab5c4a4dd814a6b2bea062f38014eea16741cb13d329498c6e2c60001b61088b565b613c80615098565b613cb2565b613cb17f3b38dc18f36c43c1cdc93d9c9afd8198487661d8fb689de9b4f2f0e6a0e2cd9260001b61088b565b5b613cde7fa59a194aee07e9449a5e12e6a9c1309f3a77274b2c41d17202832fa73cdbb9d260001b61088b565b613d0a7f8bff06d6c050958f0341bd5337c72cf3180a48ea8cffb7bd705e4a0ea2a2cdf860001b61088b565b613d367fc1bdf160f736625adbc4369faa91d20b26d5461ce70399b253a4b03105ee685460001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401613d9593929190615a4c565b602060405180830381600087803b158015613daf57600080fd5b505af1158015613dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de791906154df565b613e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1d90615cce565b60405180910390fd5b613e527f38c1730c33ac2ca7d80e3b8ec186a9f3f9b7dff06c2b8a678401a78413d288f660001b61088b565b5050565b613e827f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b613eae7fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b613eda7f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b613f067f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8d90615dce565b60405180910390fd5b613fc27f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b613fee7fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b61401a7f90d06bcd2ffadcd0c672766d630a5e192a6df47343607633bc683f5c0f131a8f60001b61088b565b6140467f4241bda9706ccd59d2f916698730326bae7836279367c2bfabaf6282d664a0e360001b61088b565b6140727f1ce7ed20e1651871d107033ede1384abc6575db7d46b56876fe8c43dbdf8bd1160001b61088b565b61409e7fd9a21af0d539c936097a5675a96c298c62ae82b94c030338d706a15ddf8e561c60001b61088b565b600960009054906101000a900460ff166140ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e490615d6e565b60405180910390fd5b6141197fc663d70129d4d863ec27f11d5bf1ea3c0238beeaab56b10f7a01d0344c7ad9de60001b61088b565b6141457fe2e45372a779b8f08033320b5550d0bac09caf08e95907923382ec79d0ff017f60001b61088b565b6141717ff6dc33cb68fee699ed81458de372a213024e78b15b0a015f46263bd8ce0dcdb260001b61088b565b61419d7f6b5feba8981a5b615a400148643de70390891b55899d721712cf9d6249c6573260001b61088b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b815260040161421e929190615ab5565b602060405180830381600087803b15801561423857600080fd5b505af115801561424c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427091906154df565b6142af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a690615d4e565b60405180910390fd5b6142db7fc014e6b3289b7ed79e4ca81e2c6abedd98221128b0e4d5deacdafb51f0d4c5bf60001b61088b565b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b61433b7f818cdb410e4f26c078fdba77940fe30a00d621e0051b80ccd30aad089d34f8b860001b61088b565b6143677f2ae4b6a05b2cb4a71fc8b8c177f6f7dd78c9ce106d3059ffd4f1f0317b1213e260001b61088b565b6143937f2e374785db23084721a5fe2e0870a9722f9744b85d19158b4abf53d1270de4b460001b61088b565b6143bf7f5eb57810cc4e65df7db68e0d2bb9f027200c44845bc767a35320e27e6b5b1bde60001b61088b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806144665750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6144a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161449c90615dce565b60405180910390fd5b6144d17f72a661c9ab45ade2bae827d243bd06e4ddf3324183be097bbfb9d9881ec6a90760001b61088b565b6144fd7ffe209fe01cc143db98cc47788beb782a65fe34bbc35c50359f21821166dd64bb60001b61088b565b6145297f37315b138a4eb1f3e6961d3245e9f125c93e7013153d744cb4e744a5607a183660001b61088b565b6145557f6ed68854798f914348bf7c98baff5db65f282eaa9a709a788599507555af477260001b61088b565b6145817f79bf2ddfe07abf5f091c46b1951be01b9468b1cb19cc3ae745bf2f1a25aa5c2260001b61088b565b614589614ef0565b565b6145b77f9c1de37707e398b1ef2c8fd674c6d609a77b714460ef98eed74986a3e0c59a9b60001b61088b565b6145e37f9880b690349d44bd00c30d83a823c189c97351b9747b76f4821f133ce40a621760001b61088b565b61460f7f071f09138def1d09107b15f7cbd047359e4c5b24fe265bef940564ffd045f6dc60001b61088b565b60003390506146407fa4297625721f48f13f4c994dbac3d6214bc4a1a14b2d59dc565beef32dafc67b60001b61088b565b61466c7f25e231d523b598d7d8e9107f060d4480cceea8cef7acba5c23289a768ec080b960001b61088b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506146dc7f0945e46252f3b1bdd5d6b058f7cc014e184c7d21c76a983634d6269a65f0eb2c60001b61088b565b6147087f80eb402c0fc27561f19d1e7e68c0279eeae29207c8c857184b14ae4a19c79c8460001b61088b565b6147347f87185c95126b0a5b95a24765d79623c7a8a80645fe6ed86630f575973552247160001b61088b565b60008111614777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161476e90615d0e565b60405180910390fd5b6147a37f9479095e5c739fdfc501dd11d560a7418784699a4e1fa050ca62b420c9eb8f2560001b61088b565b6147cf7fbc7e949c9fa429aa39b9ce6abdf5c91a9aa383d19ae7aea7d461ef4962f26a6260001b61088b565b6147fb7ff40deae3c36b7474f3900bf336acd672fa06cc5b2faa275a99f60208a8b2415260001b61088b565b806006600082825461480d919061600a565b925050819055506148407ff3864655fb7564ff57fe9c6a439df1af0fece6a0db5471d85f113807bfae220860001b61088b565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090556148af7f28de215e6016601450469219da10f355a14aa091c80520bcd791d2814f94895c60001b61088b565b6148db7f9a5bcbce21b940dba9cfbee6583452cde02592adaf1d35189ff586522fe4b3fb60001b61088b565b8173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f05713826040516149219190615e2e565b60405180910390a25050565b6149597f983ba2bce402edb5e92b90bd7d72b8def43e16f742b9152a29a0555ae14774f760001b61088b565b6149857fc0ff43dfd4918538ac6640d01df5d5bfb760597e93c293cf9281da95f15e529d60001b61088b565b6149b17f9d2840af77f934b6f40881db99243220eb9b1203441258bb5a07eadf1c6561c860001b61088b565b6149dd7f970d69fd5eb3bd783025af47566ad16251bec33ad1a6802925dc4f19b13af92460001b61088b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a6490615dce565b60405180910390fd5b614a997f95683d0c9fef982b0eecb1405d0fc9bfe6371cc1ed9c06dd6c7ca33a2fbad19460001b61088b565b614ac57fef1ac27622e100adeb7093e414284239fbf589c6794b9fd720f96a65bf7d467260001b61088b565b614af17f6474bc7b6c4c817e394a7770bcd8e9a3c367d41128bd02f30d9481664cc0edf260001b61088b565b614b1d7f35e3552e64d39c55309e0837bb68952eff825a965df10321e8ef06d8fa5a087960001b61088b565b614b497f5d1afb46bd1a2ae6aaa17481bd18b7019f1797881481135b1c94ccdcafb8339f60001b61088b565b614b757f298439278aab97593ed1479b65d64e72155e1d6df91562f07fe08092674c1a1a60001b61088b565b600960009054906101000a900460ff16614bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614bbb90615d6e565b60405180910390fd5b614bf07fefd324418f85207d4866beeb69e0fb6cccc15952ee8f4a6f7e88a2edd1345efc60001b61088b565b614c1c7fdb767e3aa2d03e1795b42198a2f94b68dfbc40904ef33967d1c7dcbd59ba0e6160001b61088b565b614c487fa60ba8065f646238e091b8e848671c7dd02b9e1940d25c74f3399ca8366eb6c860001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b8152600401614ca793929190615a83565b600060405180830381600087803b158015614cc157600080fd5b505af1158015614cd5573d6000803e3d6000fd5b50505050614d057f8d07e304d85e68966ea24bdf0fc6a7f038d59c72d847080d68a900c263e0a5d460001b61088b565b614d317f56450edd407148d8fa256d2068078a85def32b5856a9371ce8bb7686d799e22e60001b61088b565b6001600960016101000a81548160ff021916908315150217905550614d787f4a0abfe447e7e73bebebee8a0682f9e642fd53b3233707a6511f4541915448b360001b61088b565b614da47f81f757f4fb3bd969b74a83f57ca49e92c4cac6a4f3a8301c07ece5bcfa664ae560001b61088b565b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e117fd9e6438edd8d7ec14bbf4195a3d3b39e874ed0b07be368c470dc37504bc40db660001b61088b565b614e3d7ffa57c2a9e2e4cd25705c563e3ec471be7ee183591824200753623f34f81f46c460001b61088b565b818160039190614e4e9291906151e6565b50505050565b614eec8282604051602401614e6a929190615c7e565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151bd565b5050565b614f1c7fc6f0eafc16465fcff2bfcf5db8fed53bc9ab9d44b249407ebddca00225f75d8960001b61088b565b614f487f330533b22d1790e609a53398a705433950719ec56bed3778f077aaa3ca0c302660001b61088b565b614f747f5af90a19354250cb53a8c405d0803ec376193cbfcdf5858484dac343300b8e1a60001b61088b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401614ff19190615a31565b600060405180830381600087803b15801561500b57600080fd5b505af115801561501f573d6000803e3d6000fd5b5050505061504f7fcaf230e320175de72e0c1dc3a48749cacdcf93e9f23fce2f32af0ab65a0509cf60001b61088b565b61507b7f6103720bb3d029f67142afa715f25ed641d66813a3c67b3f1a66238e4f5ea82560001b61088b565b6000600960016101000a81548160ff021916908315150217905550565b6150c47f83ea7233f89237db08578bb94cb062f0c8ec22c9edaade0226e2eb81487d9e5060001b61088b565b6150f07fe1dd018c6aee1cc9338e1dfa90d384822028d0488f4a450b9e38a0d19698239760001b61088b565b61511c7fc147cc81800e10a4c70cc63471c0b57923147deb30705b335733b00a7eb6cd9a60001b61088b565b6001600960006101000a81548160ff0219169083151502179055506151637f64007a2bab706e6aeedbb6cf3d4c9a346f4c38c22f8a31b10262e044d5e39fc860001b61088b565b61518f7f50f10bc90a015108201c5258518b8da2d5a55d32f4468a367423669e81727c1f60001b61088b565b7f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546151f290616181565b90600052602060002090601f016020900481019282615214576000855561525b565b82601f1061522d57803560ff191683800117855561525b565b8280016001018555821561525b579182015b8281111561525a57823582559160200191906001019061523f565b5b509050615268919061526c565b5090565b5b8082111561528557600081600090555060010161526d565b5090565b600061529c61529784615ee9565b615ec4565b9050828152602081018484840111156152b8576152b76162af565b5b6152c384828561613f565b509392505050565b60006152de6152d984615f1a565b615ec4565b9050828152602081018484840111156152fa576152f96162af565b5b61530584828561613f565b509392505050565b60008135905061531c816164bb565b92915050565b600081519050615331816164d2565b92915050565b600081359050615346816164e9565b92915050565b60008083601f840112615362576153616162a5565b5b8235905067ffffffffffffffff81111561537f5761537e6162a0565b5b60208301915083600182028301111561539b5761539a6162aa565b5b9250929050565b600082601f8301126153b7576153b66162a5565b5b81356153c7848260208601615289565b91505092915050565b6000815190506153df81616500565b92915050565b6000815190506153f481616517565b92915050565b600082601f83011261540f5761540e6162a5565b5b813561541f8482602086016152cb565b91505092915050565b6000813590506154378161652e565b92915050565b60008151905061544c8161652e565b92915050565b600060208284031215615468576154676162b9565b5b60006154768482850161530d565b91505092915050565b600080600060408486031215615498576154976162b9565b5b60006154a68682870161530d565b935050602084013567ffffffffffffffff8111156154c7576154c66162b4565b5b6154d38682870161534c565b92509250509250925092565b6000602082840312156154f5576154f46162b9565b5b600061550384828501615322565b91505092915050565b600060208284031215615522576155216162b9565b5b600061553084828501615337565b91505092915050565b60006020828403121561554f5761554e6162b9565b5b600061555d848285016153d0565b91505092915050565b60006020828403121561557c5761557b6162b9565b5b600061558a848285016153e5565b91505092915050565b6000602082840312156155a9576155a86162b9565b5b600082013567ffffffffffffffff8111156155c7576155c66162b4565b5b6155d3848285016153fa565b91505092915050565b6000806000606084860312156155f5576155f46162b9565b5b600084013567ffffffffffffffff811115615613576156126162b4565b5b61561f868287016153fa565b93505060206156308682870161530d565b925050604061564186828701615428565b9150509250925092565b600080600080600060a08688031215615667576156666162b9565b5b600086013567ffffffffffffffff811115615685576156846162b4565b5b615691888289016153fa565b95505060206156a28882890161530d565b94505060406156b388828901615428565b93505060606156c488828901615428565b925050608086013567ffffffffffffffff8111156156e5576156e46162b4565b5b6156f1888289016153a2565b9150509295509295909350565b600060208284031215615714576157136162b9565b5b600061572284828501615428565b91505092915050565b600060208284031215615741576157406162b9565b5b600061574f8482850161543d565b91505092915050565b6157618161603e565b82525050565b61577081616050565b82525050565b61577f8161605c565b82525050565b60006157918385615f61565b935061579e83858461613f565b6157a7836162be565b840190509392505050565b60006157bd82615f4b565b6157c78185615f61565b93506157d781856020860161614e565b6157e0816162be565b840191505092915050565b6157f4816160c1565b82525050565b615803816160d3565b82525050565b615812816160e5565b82525050565b615821816160f7565b82525050565b61583081616109565b82525050565b600061584182615f56565b61584b8185615f72565b935061585b81856020860161614e565b615864816162be565b840191505092915050565b600061587c601883615f72565b9150615887826162cf565b602082019050919050565b600061589f601783615f72565b91506158aa826162f8565b602082019050919050565b60006158c2601e83615f72565b91506158cd82616321565b602082019050919050565b60006158e5601783615f72565b91506158f08261634a565b602082019050919050565b6000615908601b83615f72565b915061591382616373565b602082019050919050565b600061592b601d83615f72565b91506159368261639c565b602082019050919050565b600061594e601b83615f72565b9150615959826163c5565b602082019050919050565b6000615971601783615f72565b915061597c826163ee565b602082019050919050565b6000615994601683615f72565b915061599f82616417565b602082019050919050565b60006159b7601583615f72565b91506159c282616440565b602082019050919050565b60006159da601d83615f72565b91506159e582616469565b602082019050919050565b60006159fd601783615f72565b9150615a0882616492565b602082019050919050565b615a1c816160aa565b82525050565b615a2b816160b4565b82525050565b6000602082019050615a466000830184615758565b92915050565b6000606082019050615a616000830186615758565b615a6e6020830185615758565b615a7b6040830184615a13565b949350505050565b6000604082019050615a986000830186615758565b8181036020830152615aab818486615785565b9050949350505050565b6000604082019050615aca6000830185615758565b615ad76020830184615a13565b9392505050565b6000602082019050615af36000830184615767565b92915050565b6000608082019050615b0e6000830187615776565b615b1b6020830186615a13565b615b286040830185615776565b8181036060830152615b3a81846157b2565b905095945050505050565b60006020820190508181036000830152615b5f81846157b2565b905092915050565b6000602082019050615b7c60008301846157eb565b92915050565b6000602082019050615b9760008301846157fa565b92915050565b6000602082019050615bb26000830184615809565b92915050565b6000602082019050615bcd6000830184615818565b92915050565b6000602082019050615be86000830184615827565b92915050565b60006020820190508181036000830152615c088184615836565b905092915050565b60006040820190508181036000830152615c2a8185615836565b9050615c396020830184615758565b9392505050565b60006060820190508181036000830152615c5a8186615836565b9050615c696020830185615758565b615c766040830184615a13565b949350505050565b60006040820190508181036000830152615c988185615836565b9050615ca76020830184615a13565b9392505050565b60006020820190508181036000830152615cc78161586f565b9050919050565b60006020820190508181036000830152615ce781615892565b9050919050565b60006020820190508181036000830152615d07816158b5565b9050919050565b60006020820190508181036000830152615d27816158d8565b9050919050565b60006020820190508181036000830152615d47816158fb565b9050919050565b60006020820190508181036000830152615d678161591e565b9050919050565b60006020820190508181036000830152615d8781615941565b9050919050565b60006020820190508181036000830152615da781615964565b9050919050565b60006020820190508181036000830152615dc781615987565b9050919050565b60006020820190508181036000830152615de7816159aa565b9050919050565b60006020820190508181036000830152615e07816159cd565b9050919050565b60006020820190508181036000830152615e27816159f0565b9050919050565b6000602082019050615e436000830184615a13565b92915050565b6000604082019050615e5e6000830185615a13565b615e6b6020830184615a13565b9392505050565b6000606082019050615e876000830186615a13565b615e946020830185615a13565b615ea16040830184615776565b949350505050565b6000602082019050615ebe6000830184615a22565b92915050565b6000615ece615edf565b9050615eda82826161b3565b919050565b6000604051905090565b600067ffffffffffffffff821115615f0457615f03616271565b5b615f0d826162be565b9050602081019050919050565b600067ffffffffffffffff821115615f3557615f34616271565b5b615f3e826162be565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615f8e826160aa565b9150615f99836160aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615fce57615fcd6161e4565b5b828201905092915050565b6000615fe4826160aa565b9150615fef836160aa565b925082615fff57615ffe616213565b5b828204905092915050565b6000616015826160aa565b9150616020836160aa565b925082821015616033576160326161e4565b5b828203905092915050565b60006160498261608a565b9050919050565b60008115159050919050565b6000819050919050565b60006160718261603e565b9050919050565b60006160838261603e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006160cc8261611b565b9050919050565b60006160de8261611b565b9050919050565b60006160f08261611b565b9050919050565b60006161028261611b565b9050919050565b60006161148261611b565b9050919050565b60006161268261612d565b9050919050565b60006161388261608a565b9050919050565b82818337600083830152505050565b60005b8381101561616c578082015181840152602081019050616151565b8381111561617b576000848401525b50505050565b6000600282049050600182168061619957607f821691505b602082108114156161ad576161ac616242565b5b50919050565b6161bc826162be565b810181811067ffffffffffffffff821117156161db576161da616271565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6164c48161603e565b81146164cf57600080fd5b50565b6164db81616050565b81146164e657600080fd5b50565b6164f28161605c565b81146164fd57600080fd5b50565b61650981616066565b811461651457600080fd5b50565b61652081616078565b811461652b57600080fd5b50565b616537816160aa565b811461654257600080fd5b5056fea2646970667358221220d1b413200c15d31cb3c760bb1c9647c7ae90a9b5213c395f6cb6b0cfc444f64664736f6c63430008070033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162003e6638038062003e66833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613a8080620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c34604051610253919061334a565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f4d565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190612ffa565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061299b565b610a86565b005b34801561031b57600080fd5b506103366004803603810190610331919061299b565b610e9a565b604051610343919061334a565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061299b565b610eb2565b604051610380919061334a565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133c5565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c1a565b610ecf565b005b3480156103e957600080fd5b506103f261119e565b6040516103ff91906130d4565b60405180910390f35b34801561041457600080fd5b5061041d6111c4565b60405161042a9190613083565b60405180910390f35b34801561043f57600080fd5b506104486111ea565b6040516104559190613061565b60405180910390f35b34801561046a57600080fd5b50610473611278565b604051610480919061334a565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b67565b61127e565b005b3480156104be57600080fd5b506104c76114b0565b6040516104d4919061334a565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061299b565b6114b6565b604051610511919061334a565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612af8565b6114ff565b60405161054e919061334a565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061299b565b611662565b60405161058b919061334a565b60405180910390f35b3480156105a057600080fd5b506105a961167a565b005b3480156105b757600080fd5b506105c0611896565b6040516105cd9190612f4d565b60405180910390f35b3480156105e257600080fd5b506105eb6118ba565b6040516105f89190612f4d565b60405180910390f35b34801561060d57600080fd5b506106166118e0565b60405161062391906130b9565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c1a565b611906565b005b34801561066157600080fd5b5061066a611b0d565b6040516106779190612ffa565b60405180910390f35b34801561068c57600080fd5b50610695611b20565b6040516106a2919061334a565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612aaf565b611b26565b6040516106df919061334a565b60405180910390f35b3480156106f457600080fd5b506106fd611c62565b60405161070a919061309e565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c1a565b611c88565b005b34801561074857600080fd5b50610751611f38565b005b34801561075f57600080fd5b5061076861212b565b604051610775919061334a565b60405180910390f35b34801561078a57600080fd5b50610793612131565b6040516107a091906130ef565b60405180910390f35b3480156107b557600080fd5b506107be612157565b6040516107cb919061334a565b60405180910390f35b3480156107e057600080fd5b506107e961215d565b005b3480156107f757600080fd5b5061080061224d565b005b34801561080e57600080fd5b50610829600480360381019061082491906129c8565b612387565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d8906132ea565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b7919061334a565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f4d565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b099061322a565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b589061328a565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb0919061349f565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c069190613526565b925050819055508060066000828254610c1f9190613526565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f68565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a28565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906131ea565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fd1565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a28565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d919061334a565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061332a565b60405180910390fd5b82811015610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f959061324a565b60405180910390fd5b600960009054906101000a900460ff1615610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe5906132aa565b60405180910390fd5b82600560008282546110009190613526565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110569190613526565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110ba929190612fd1565b602060405180830381600087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612a28565b61114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906131ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611191919061334a565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600380546111f79061369d565b80601f01602080910402602001604051908101604052809291908181526020018280546112239061369d565b80156112705780601f1061124557610100808354040283529160200191611270565b820191906000526020600020905b81548152906001019060200180831161125357829003601f168201915b505050505081565b60045481565b6000858560405160200161129392919061312c565b60405160208183030381529060405280519060200120905060008385836040516020016112c29392919061338e565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401611337919061310a565b60206040518083038186803b15801561134f57600080fd5b505afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113879190612a82565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113c59493929190613015565b602060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114179190612c47565b90506114586040518060400160405280600a81526020017f6d696e74416d6f756e74000000000000000000000000000000000000000000008152508261256a565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161149e919061334a565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161156d9392919061315c565b602060405180830381600087803b15801561158757600080fd5b505af115801561159b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bf9190612c47565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161164d929190613365565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117215750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611757906132ea565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117bd9190612f4d565b60206040518083038186803b1580156117d557600080fd5b505afa1580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180d9190612c47565b1161184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118449061330a565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311611992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119899061332a565b60405180910390fd5b828110156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc9061324a565b60405180910390fd5b600960009054906101000a900460ff16611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b9061328a565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a7a919061349f565b92505081905550600960019054906101000a900460ff168015611aac57506002600454611aa791906134f5565b600654115b15611aba57611ab9612606565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b00919061334a565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b83919061310a565b60206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd39190612a55565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c0b9190612f4d565b60206040518083038186803b158015611c2357600080fd5b505afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612c47565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906132aa565b60405180910390fd5b60008211611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d179061332a565b60405180910390fd5b60045460055483611d31919061349f565b1115611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061320a565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc1919061349f565b925050819055508160056000828254611dda919061349f565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e27919061334a565b60405180910390a26004546005541415611e4457611e436126d2565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ea393929190612f68565b602060405180830381600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef59190612a28565b611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906131ea565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf906132ea565b60405180910390fd5b600960009054906101000a900460ff16612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e9061328a565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b8152600401612098929190612fd1565b602060405180830381600087803b1580156120b257600080fd5b505af11580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190612a28565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061326a565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806122045750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906132ea565b60405180910390fd5b61224b612606565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d09061322a565b60405180910390fd5b80600660008282546122eb9190613526565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161237b919061334a565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e906132ea565b60405180910390fd5b600960009054906101000a900460ff16612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d9061328a565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124c593929190612f9f565b600060405180830381600087803b1580156124df57600080fd5b505af11580156124f3573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160039190612564929190612744565b50505050565b612602828260405160240161258092919061319a565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061271b565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016126839190612f4d565b600060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546127509061369d565b90600052602060002090601f01602090048101928261277257600085556127b9565b82601f1061278b57803560ff19168380011785556127b9565b828001600101855582156127b9579182015b828111156127b857823582559160200191906001019061279d565b5b5090506127c691906127ca565b5090565b5b808211156127e35760008160009055506001016127cb565b5090565b60006127fa6127f584613405565b6133e0565b905082815260208101848484011115612816576128156137cb565b5b61282184828561365b565b509392505050565b600061283c61283784613436565b6133e0565b905082815260208101848484011115612858576128576137cb565b5b61286384828561365b565b509392505050565b60008135905061287a816139d7565b92915050565b60008151905061288f816139ee565b92915050565b60008083601f8401126128ab576128aa6137c1565b5b8235905067ffffffffffffffff8111156128c8576128c76137bc565b5b6020830191508360018202830111156128e4576128e36137c6565b5b9250929050565b600082601f830112612900576128ff6137c1565b5b81356129108482602086016127e7565b91505092915050565b60008151905061292881613a05565b92915050565b60008151905061293d81613a1c565b92915050565b600082601f830112612958576129576137c1565b5b8135612968848260208601612829565b91505092915050565b60008135905061298081613a33565b92915050565b60008151905061299581613a33565b92915050565b6000602082840312156129b1576129b06137d5565b5b60006129bf8482850161286b565b91505092915050565b6000806000604084860312156129e1576129e06137d5565b5b60006129ef8682870161286b565b935050602084013567ffffffffffffffff811115612a1057612a0f6137d0565b5b612a1c86828701612895565b92509250509250925092565b600060208284031215612a3e57612a3d6137d5565b5b6000612a4c84828501612880565b91505092915050565b600060208284031215612a6b57612a6a6137d5565b5b6000612a7984828501612919565b91505092915050565b600060208284031215612a9857612a976137d5565b5b6000612aa68482850161292e565b91505092915050565b600060208284031215612ac557612ac46137d5565b5b600082013567ffffffffffffffff811115612ae357612ae26137d0565b5b612aef84828501612943565b91505092915050565b600080600060608486031215612b1157612b106137d5565b5b600084013567ffffffffffffffff811115612b2f57612b2e6137d0565b5b612b3b86828701612943565b9350506020612b4c8682870161286b565b9250506040612b5d86828701612971565b9150509250925092565b600080600080600060a08688031215612b8357612b826137d5565b5b600086013567ffffffffffffffff811115612ba157612ba06137d0565b5b612bad88828901612943565b9550506020612bbe8882890161286b565b9450506040612bcf88828901612971565b9350506060612be088828901612971565b925050608086013567ffffffffffffffff811115612c0157612c006137d0565b5b612c0d888289016128eb565b9150509295509295909350565b600060208284031215612c3057612c2f6137d5565b5b6000612c3e84828501612971565b91505092915050565b600060208284031215612c5d57612c5c6137d5565b5b6000612c6b84828501612986565b91505092915050565b612c7d8161355a565b82525050565b612c8c8161356c565b82525050565b612c9b81613578565b82525050565b6000612cad838561347d565b9350612cba83858461365b565b612cc3836137da565b840190509392505050565b6000612cd982613467565b612ce3818561347d565b9350612cf381856020860161366a565b612cfc816137da565b840191505092915050565b612d10816135dd565b82525050565b612d1f816135ef565b82525050565b612d2e81613601565b82525050565b612d3d81613613565b82525050565b612d4c81613625565b82525050565b6000612d5d82613472565b612d67818561348e565b9350612d7781856020860161366a565b612d80816137da565b840191505092915050565b6000612d9860188361348e565b9150612da3826137eb565b602082019050919050565b6000612dbb60178361348e565b9150612dc682613814565b602082019050919050565b6000612dde601e8361348e565b9150612de98261383d565b602082019050919050565b6000612e0160178361348e565b9150612e0c82613866565b602082019050919050565b6000612e24601b8361348e565b9150612e2f8261388f565b602082019050919050565b6000612e47601d8361348e565b9150612e52826138b8565b602082019050919050565b6000612e6a601b8361348e565b9150612e75826138e1565b602082019050919050565b6000612e8d60178361348e565b9150612e988261390a565b602082019050919050565b6000612eb060168361348e565b9150612ebb82613933565b602082019050919050565b6000612ed360158361348e565b9150612ede8261395c565b602082019050919050565b6000612ef6601d8361348e565b9150612f0182613985565b602082019050919050565b6000612f1960178361348e565b9150612f24826139ae565b602082019050919050565b612f38816135c6565b82525050565b612f47816135d0565b82525050565b6000602082019050612f626000830184612c74565b92915050565b6000606082019050612f7d6000830186612c74565b612f8a6020830185612c74565b612f976040830184612f2f565b949350505050565b6000604082019050612fb46000830186612c74565b8181036020830152612fc7818486612ca1565b9050949350505050565b6000604082019050612fe66000830185612c74565b612ff36020830184612f2f565b9392505050565b600060208201905061300f6000830184612c83565b92915050565b600060808201905061302a6000830187612c92565b6130376020830186612f2f565b6130446040830185612c92565b81810360608301526130568184612cce565b905095945050505050565b6000602082019050818103600083015261307b8184612cce565b905092915050565b60006020820190506130986000830184612d07565b92915050565b60006020820190506130b36000830184612d16565b92915050565b60006020820190506130ce6000830184612d25565b92915050565b60006020820190506130e96000830184612d34565b92915050565b60006020820190506131046000830184612d43565b92915050565b600060208201905081810360008301526131248184612d52565b905092915050565b600060408201905081810360008301526131468185612d52565b90506131556020830184612c74565b9392505050565b600060608201905081810360008301526131768186612d52565b90506131856020830185612c74565b6131926040830184612f2f565b949350505050565b600060408201905081810360008301526131b48185612d52565b90506131c36020830184612f2f565b9392505050565b600060208201905081810360008301526131e381612d8b565b9050919050565b6000602082019050818103600083015261320381612dae565b9050919050565b6000602082019050818103600083015261322381612dd1565b9050919050565b6000602082019050818103600083015261324381612df4565b9050919050565b6000602082019050818103600083015261326381612e17565b9050919050565b6000602082019050818103600083015261328381612e3a565b9050919050565b600060208201905081810360008301526132a381612e5d565b9050919050565b600060208201905081810360008301526132c381612e80565b9050919050565b600060208201905081810360008301526132e381612ea3565b9050919050565b6000602082019050818103600083015261330381612ec6565b9050919050565b6000602082019050818103600083015261332381612ee9565b9050919050565b6000602082019050818103600083015261334381612f0c565b9050919050565b600060208201905061335f6000830184612f2f565b92915050565b600060408201905061337a6000830185612f2f565b6133876020830184612f2f565b9392505050565b60006060820190506133a36000830186612f2f565b6133b06020830185612f2f565b6133bd6040830184612c92565b949350505050565b60006020820190506133da6000830184612f3e565b92915050565b60006133ea6133fb565b90506133f682826136cf565b919050565b6000604051905090565b600067ffffffffffffffff8211156134205761341f61378d565b5b613429826137da565b9050602081019050919050565b600067ffffffffffffffff8211156134515761345061378d565b5b61345a826137da565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134aa826135c6565b91506134b5836135c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134ea576134e9613700565b5b828201905092915050565b6000613500826135c6565b915061350b836135c6565b92508261351b5761351a61372f565b5b828204905092915050565b6000613531826135c6565b915061353c836135c6565b92508282101561354f5761354e613700565b5b828203905092915050565b6000613565826135a6565b9050919050565b60008115159050919050565b6000819050919050565b600061358d8261355a565b9050919050565b600061359f8261355a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135e882613637565b9050919050565b60006135fa82613637565b9050919050565b600061360c82613637565b9050919050565b600061361e82613637565b9050919050565b600061363082613637565b9050919050565b600061364282613649565b9050919050565b6000613654826135a6565b9050919050565b82818337600083830152505050565b60005b8381101561368857808201518184015260208101905061366d565b83811115613697576000848401525b50505050565b600060028204905060018216806136b557607f821691505b602082108114156136c9576136c861375e565b5b50919050565b6136d8826137da565b810181811067ffffffffffffffff821117156136f7576136f661378d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139e08161355a565b81146139eb57600080fd5b50565b6139f78161356c565b8114613a0257600080fd5b50565b613a0e81613582565b8114613a1957600080fd5b50565b613a2581613594565b8114613a3057600080fd5b50565b613a3c816135c6565b8114613a4757600080fd5b5056fea26469706673582212200d75bb3d56461e8449387630b7f2039001d77c46cf625fab3f151f5223547a2464736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c34604051610253919061334a565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f4d565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190612ffa565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061299b565b610a86565b005b34801561031b57600080fd5b506103366004803603810190610331919061299b565b610e9a565b604051610343919061334a565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061299b565b610eb2565b604051610380919061334a565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133c5565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c1a565b610ecf565b005b3480156103e957600080fd5b506103f261119e565b6040516103ff91906130d4565b60405180910390f35b34801561041457600080fd5b5061041d6111c4565b60405161042a9190613083565b60405180910390f35b34801561043f57600080fd5b506104486111ea565b6040516104559190613061565b60405180910390f35b34801561046a57600080fd5b50610473611278565b604051610480919061334a565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b67565b61127e565b005b3480156104be57600080fd5b506104c76114b0565b6040516104d4919061334a565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061299b565b6114b6565b604051610511919061334a565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612af8565b6114ff565b60405161054e919061334a565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061299b565b611662565b60405161058b919061334a565b60405180910390f35b3480156105a057600080fd5b506105a961167a565b005b3480156105b757600080fd5b506105c0611896565b6040516105cd9190612f4d565b60405180910390f35b3480156105e257600080fd5b506105eb6118ba565b6040516105f89190612f4d565b60405180910390f35b34801561060d57600080fd5b506106166118e0565b60405161062391906130b9565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c1a565b611906565b005b34801561066157600080fd5b5061066a611b0d565b6040516106779190612ffa565b60405180910390f35b34801561068c57600080fd5b50610695611b20565b6040516106a2919061334a565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612aaf565b611b26565b6040516106df919061334a565b60405180910390f35b3480156106f457600080fd5b506106fd611c62565b60405161070a919061309e565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c1a565b611c88565b005b34801561074857600080fd5b50610751611f38565b005b34801561075f57600080fd5b5061076861212b565b604051610775919061334a565b60405180910390f35b34801561078a57600080fd5b50610793612131565b6040516107a091906130ef565b60405180910390f35b3480156107b557600080fd5b506107be612157565b6040516107cb919061334a565b60405180910390f35b3480156107e057600080fd5b506107e961215d565b005b3480156107f757600080fd5b5061080061224d565b005b34801561080e57600080fd5b50610829600480360381019061082491906129c8565b612387565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d8906132ea565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b7919061334a565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f4d565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b099061322a565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b589061328a565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb0919061349f565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c069190613526565b925050819055508060066000828254610c1f9190613526565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f68565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a28565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906131ea565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fd1565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a28565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d919061334a565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061332a565b60405180910390fd5b82811015610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f959061324a565b60405180910390fd5b600960009054906101000a900460ff1615610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe5906132aa565b60405180910390fd5b82600560008282546110009190613526565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110569190613526565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110ba929190612fd1565b602060405180830381600087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612a28565b61114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906131ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611191919061334a565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600380546111f79061369d565b80601f01602080910402602001604051908101604052809291908181526020018280546112239061369d565b80156112705780601f1061124557610100808354040283529160200191611270565b820191906000526020600020905b81548152906001019060200180831161125357829003601f168201915b505050505081565b60045481565b6000858560405160200161129392919061312c565b60405160208183030381529060405280519060200120905060008385836040516020016112c29392919061338e565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401611337919061310a565b60206040518083038186803b15801561134f57600080fd5b505afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113879190612a82565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113c59493929190613015565b602060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114179190612c47565b90506114586040518060400160405280600a81526020017f6d696e74416d6f756e74000000000000000000000000000000000000000000008152508261256a565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161149e919061334a565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161156d9392919061315c565b602060405180830381600087803b15801561158757600080fd5b505af115801561159b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bf9190612c47565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161164d929190613365565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117215750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611757906132ea565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117bd9190612f4d565b60206040518083038186803b1580156117d557600080fd5b505afa1580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180d9190612c47565b1161184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118449061330a565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311611992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119899061332a565b60405180910390fd5b828110156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc9061324a565b60405180910390fd5b600960009054906101000a900460ff16611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b9061328a565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a7a919061349f565b92505081905550600960019054906101000a900460ff168015611aac57506002600454611aa791906134f5565b600654115b15611aba57611ab9612606565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b00919061334a565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b83919061310a565b60206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd39190612a55565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c0b9190612f4d565b60206040518083038186803b158015611c2357600080fd5b505afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612c47565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906132aa565b60405180910390fd5b60008211611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d179061332a565b60405180910390fd5b60045460055483611d31919061349f565b1115611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061320a565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc1919061349f565b925050819055508160056000828254611dda919061349f565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e27919061334a565b60405180910390a26004546005541415611e4457611e436126d2565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ea393929190612f68565b602060405180830381600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef59190612a28565b611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906131ea565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf906132ea565b60405180910390fd5b600960009054906101000a900460ff16612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e9061328a565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b8152600401612098929190612fd1565b602060405180830381600087803b1580156120b257600080fd5b505af11580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190612a28565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061326a565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806122045750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906132ea565b60405180910390fd5b61224b612606565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d09061322a565b60405180910390fd5b80600660008282546122eb9190613526565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161237b919061334a565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e906132ea565b60405180910390fd5b600960009054906101000a900460ff16612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d9061328a565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124c593929190612f9f565b600060405180830381600087803b1580156124df57600080fd5b505af11580156124f3573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160039190612564929190612744565b50505050565b612602828260405160240161258092919061319a565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061271b565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016126839190612f4d565b600060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546127509061369d565b90600052602060002090601f01602090048101928261277257600085556127b9565b82601f1061278b57803560ff19168380011785556127b9565b828001600101855582156127b9579182015b828111156127b857823582559160200191906001019061279d565b5b5090506127c691906127ca565b5090565b5b808211156127e35760008160009055506001016127cb565b5090565b60006127fa6127f584613405565b6133e0565b905082815260208101848484011115612816576128156137cb565b5b61282184828561365b565b509392505050565b600061283c61283784613436565b6133e0565b905082815260208101848484011115612858576128576137cb565b5b61286384828561365b565b509392505050565b60008135905061287a816139d7565b92915050565b60008151905061288f816139ee565b92915050565b60008083601f8401126128ab576128aa6137c1565b5b8235905067ffffffffffffffff8111156128c8576128c76137bc565b5b6020830191508360018202830111156128e4576128e36137c6565b5b9250929050565b600082601f830112612900576128ff6137c1565b5b81356129108482602086016127e7565b91505092915050565b60008151905061292881613a05565b92915050565b60008151905061293d81613a1c565b92915050565b600082601f830112612958576129576137c1565b5b8135612968848260208601612829565b91505092915050565b60008135905061298081613a33565b92915050565b60008151905061299581613a33565b92915050565b6000602082840312156129b1576129b06137d5565b5b60006129bf8482850161286b565b91505092915050565b6000806000604084860312156129e1576129e06137d5565b5b60006129ef8682870161286b565b935050602084013567ffffffffffffffff811115612a1057612a0f6137d0565b5b612a1c86828701612895565b92509250509250925092565b600060208284031215612a3e57612a3d6137d5565b5b6000612a4c84828501612880565b91505092915050565b600060208284031215612a6b57612a6a6137d5565b5b6000612a7984828501612919565b91505092915050565b600060208284031215612a9857612a976137d5565b5b6000612aa68482850161292e565b91505092915050565b600060208284031215612ac557612ac46137d5565b5b600082013567ffffffffffffffff811115612ae357612ae26137d0565b5b612aef84828501612943565b91505092915050565b600080600060608486031215612b1157612b106137d5565b5b600084013567ffffffffffffffff811115612b2f57612b2e6137d0565b5b612b3b86828701612943565b9350506020612b4c8682870161286b565b9250506040612b5d86828701612971565b9150509250925092565b600080600080600060a08688031215612b8357612b826137d5565b5b600086013567ffffffffffffffff811115612ba157612ba06137d0565b5b612bad88828901612943565b9550506020612bbe8882890161286b565b9450506040612bcf88828901612971565b9350506060612be088828901612971565b925050608086013567ffffffffffffffff811115612c0157612c006137d0565b5b612c0d888289016128eb565b9150509295509295909350565b600060208284031215612c3057612c2f6137d5565b5b6000612c3e84828501612971565b91505092915050565b600060208284031215612c5d57612c5c6137d5565b5b6000612c6b84828501612986565b91505092915050565b612c7d8161355a565b82525050565b612c8c8161356c565b82525050565b612c9b81613578565b82525050565b6000612cad838561347d565b9350612cba83858461365b565b612cc3836137da565b840190509392505050565b6000612cd982613467565b612ce3818561347d565b9350612cf381856020860161366a565b612cfc816137da565b840191505092915050565b612d10816135dd565b82525050565b612d1f816135ef565b82525050565b612d2e81613601565b82525050565b612d3d81613613565b82525050565b612d4c81613625565b82525050565b6000612d5d82613472565b612d67818561348e565b9350612d7781856020860161366a565b612d80816137da565b840191505092915050565b6000612d9860188361348e565b9150612da3826137eb565b602082019050919050565b6000612dbb60178361348e565b9150612dc682613814565b602082019050919050565b6000612dde601e8361348e565b9150612de98261383d565b602082019050919050565b6000612e0160178361348e565b9150612e0c82613866565b602082019050919050565b6000612e24601b8361348e565b9150612e2f8261388f565b602082019050919050565b6000612e47601d8361348e565b9150612e52826138b8565b602082019050919050565b6000612e6a601b8361348e565b9150612e75826138e1565b602082019050919050565b6000612e8d60178361348e565b9150612e988261390a565b602082019050919050565b6000612eb060168361348e565b9150612ebb82613933565b602082019050919050565b6000612ed360158361348e565b9150612ede8261395c565b602082019050919050565b6000612ef6601d8361348e565b9150612f0182613985565b602082019050919050565b6000612f1960178361348e565b9150612f24826139ae565b602082019050919050565b612f38816135c6565b82525050565b612f47816135d0565b82525050565b6000602082019050612f626000830184612c74565b92915050565b6000606082019050612f7d6000830186612c74565b612f8a6020830185612c74565b612f976040830184612f2f565b949350505050565b6000604082019050612fb46000830186612c74565b8181036020830152612fc7818486612ca1565b9050949350505050565b6000604082019050612fe66000830185612c74565b612ff36020830184612f2f565b9392505050565b600060208201905061300f6000830184612c83565b92915050565b600060808201905061302a6000830187612c92565b6130376020830186612f2f565b6130446040830185612c92565b81810360608301526130568184612cce565b905095945050505050565b6000602082019050818103600083015261307b8184612cce565b905092915050565b60006020820190506130986000830184612d07565b92915050565b60006020820190506130b36000830184612d16565b92915050565b60006020820190506130ce6000830184612d25565b92915050565b60006020820190506130e96000830184612d34565b92915050565b60006020820190506131046000830184612d43565b92915050565b600060208201905081810360008301526131248184612d52565b905092915050565b600060408201905081810360008301526131468185612d52565b90506131556020830184612c74565b9392505050565b600060608201905081810360008301526131768186612d52565b90506131856020830185612c74565b6131926040830184612f2f565b949350505050565b600060408201905081810360008301526131b48185612d52565b90506131c36020830184612f2f565b9392505050565b600060208201905081810360008301526131e381612d8b565b9050919050565b6000602082019050818103600083015261320381612dae565b9050919050565b6000602082019050818103600083015261322381612dd1565b9050919050565b6000602082019050818103600083015261324381612df4565b9050919050565b6000602082019050818103600083015261326381612e17565b9050919050565b6000602082019050818103600083015261328381612e3a565b9050919050565b600060208201905081810360008301526132a381612e5d565b9050919050565b600060208201905081810360008301526132c381612e80565b9050919050565b600060208201905081810360008301526132e381612ea3565b9050919050565b6000602082019050818103600083015261330381612ec6565b9050919050565b6000602082019050818103600083015261332381612ee9565b9050919050565b6000602082019050818103600083015261334381612f0c565b9050919050565b600060208201905061335f6000830184612f2f565b92915050565b600060408201905061337a6000830185612f2f565b6133876020830184612f2f565b9392505050565b60006060820190506133a36000830186612f2f565b6133b06020830185612f2f565b6133bd6040830184612c92565b949350505050565b60006020820190506133da6000830184612f3e565b92915050565b60006133ea6133fb565b90506133f682826136cf565b919050565b6000604051905090565b600067ffffffffffffffff8211156134205761341f61378d565b5b613429826137da565b9050602081019050919050565b600067ffffffffffffffff8211156134515761345061378d565b5b61345a826137da565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134aa826135c6565b91506134b5836135c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134ea576134e9613700565b5b828201905092915050565b6000613500826135c6565b915061350b836135c6565b92508261351b5761351a61372f565b5b828204905092915050565b6000613531826135c6565b915061353c836135c6565b92508282101561354f5761354e613700565b5b828203905092915050565b6000613565826135a6565b9050919050565b60008115159050919050565b6000819050919050565b600061358d8261355a565b9050919050565b600061359f8261355a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135e882613637565b9050919050565b60006135fa82613637565b9050919050565b600061360c82613637565b9050919050565b600061361e82613637565b9050919050565b600061363082613637565b9050919050565b600061364282613649565b9050919050565b6000613654826135a6565b9050919050565b82818337600083830152505050565b60005b8381101561368857808201518184015260208101905061366d565b83811115613697576000848401525b50505050565b600060028204905060018216806136b557607f821691505b602082108114156136c9576136c861375e565b5b50919050565b6136d8826137da565b810181811067ffffffffffffffff821117156136f7576136f661378d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139e08161355a565b81146139eb57600080fd5b50565b6139f78161356c565b8114613a0257600080fd5b50565b613a0e81613582565b8114613a1957600080fd5b50565b613a2581613594565b8114613a3057600080fd5b50565b613a3c816135c6565b8114613a4757600080fd5b5056fea26469706673582212200d75bb3d56461e8449387630b7f2039001d77c46cf625fab3f151f5223547a2464736f6c63430008070033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/RenPool.sol b/contracts/RenPool.sol index cbf022a..2a04cb3 100644 --- a/contracts/RenPool.sol +++ b/contracts/RenPool.sol @@ -172,7 +172,7 @@ contract RenPool { uint256 senderBalance = balances[sender]; require(_amount > 0, "RenPool: Invalid amount"); - require(senderBalance > 0 && senderBalance >= _amount, "RenPool: Insufficient funds"); + require(senderBalance >= _amount, "RenPool: Insufficient funds"); require(!isLocked, "RenPool: Pool is locked"); totalPooled -= _amount; @@ -201,7 +201,7 @@ contract RenPool { uint256 senderBalance = balances[sender]; require(_amount > 0, "RenPool: Invalid amount"); - require(senderBalance > 0 && senderBalance >= _amount, "RenPool: Insufficient funds"); + require(senderBalance >= _amount, "RenPool: Insufficient funds"); require(isLocked, "RenPool: Pool is not locked"); withdrawalRequests[sender] = _amount; diff --git a/test/RenPool.test.js b/test/RenPool.test.js index 5bf6632..110de93 100644 --- a/test/RenPool.test.js +++ b/test/RenPool.test.js @@ -340,7 +340,7 @@ describe('RenPool contract test', function () { expect(await darknodeRegistry.getDarknodeOperator(NODE_ID)).to.equal(renPool.address); }); - it('should fail when bond transfer is not aproved by node operator', async () => { + it('should fail when bond transfer is not approved by node operator', async () => { expect(alice).to.not.equal(nodeOperator); // Lock pool From 13bc51e3b59b892311aeefb96844d70937caed09 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Tue, 28 Dec 2021 17:14:54 +0100 Subject: [PATCH 10/12] update deploy script using ren pool factory --- index.js | 4 ++- scripts/deploy.js | 68 ++++++++++++++++++++++++----------------------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/index.js b/index.js index cb3bff8..507636e 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,12 @@ -const RenPool = require('./artifacts/contracts/RenPool.sol/RenPool.json'); +const RenPool= require('./artifacts/contracts/RenPool.sol/RenPool.json'); +const RenPoolFactory = require('./artifacts/contracts/RenPoolFactory.sol/RenPoolFactory.json'); const IERC20Standard = require('./artifacts/@renproject/gateway-sol/contracts/Gateway/interfaces/IERC20Standard.sol/IERC20Standard.json'); const IDarknodeRegistry = require('./artifacts/interfaces/IDarknodeRegistry.sol/IDarknodeRegistry.json'); const deployments = require('./ren-deployments.js'); module.exports = { RenPool, + RenPoolFactory, IERC20Standard, IDarknodeRegistry, deployments, diff --git a/scripts/deploy.js b/scripts/deploy.js index 25f32bb..c502027 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -40,32 +40,34 @@ async function faucet(renToken, account) { } async function main() { - print(`${chalk.italic('\u{1F680} RenPool contract deployment')}`); + print(`${chalk.italic('\u{1F680} RenPoolFactory contract deployment')}`); print(`Using network ${chalk.bold(hre.network.name)} (${chalk.bold(hre.network.config.chainId)})`); - print(`Getting signers to deploy RenPool contract`); + print(`Getting signers to deploy RenPoolFactory contract`); const [owner] = await ethers.getSigners(); - const nodeOperator = owner; - - print(`Deploying ${chalk.bold('RenPool')} contract`); - const RenPool = await ethers.getContractFactory('RenPool'); - const renPool = await RenPool.connect(nodeOperator).deploy( - renTokenAddr, - darknodeRegistryAddr, - darknodePaymentAddr, - claimRewardsAddr, - gatewayRegistryAddr, - owner.address, - nodeOperator.address, - POOL_BOND); - await renPool.deployed(); - - print(`Deployed to ${chalk.bold(renPool.address)} TX ${chalk.bold(renPool.deployTransaction.hash)}`); + // const nodeOperator = owner; + + print(`Deploying ${chalk.bold('RenPoolFactory')} contract`); + const RenPoolFactory = await ethers.getContractFactory('RenPoolFactory'); + const renPoolFactory = await RenPoolFactory.connect(owner).deploy(); + await renPoolFactory.deployed(); + // const renPool = await RenPoolFactory.connect(nodeOperator).deploy( + // renTokenAddr, + // darknodeRegistryAddr, + // darknodePaymentAddr, + // claimRewardsAddr, + // gatewayRegistryAddr, + // owner.address, + // nodeOperator.address, + // POOL_BOND); + // await renPool.deployed(); + + print(`Deployed to ${chalk.bold(renPoolFactory.address)} TX ${chalk.bold(renPoolFactory.deployTransaction.hash)}`); const renToken = new ethers.Contract(renTokenAddr, RenToken.abi, owner); if (hre.network.name === 'hardhat') { - print('Skipping RenPool contract Etherscan verification') + print('Skipping RenPoolFactory contract Etherscan verification') await provider.request({ method: 'hardhat_impersonateAccount', params: [topRenTokenHolderAddr] }); @@ -88,26 +90,26 @@ async function main() { } else { print('Waiting before verification'); await sleep(30000); - const balance = await renPool.balanceOf(owner.address); - print(` Owner's balance is ${chalk.yellow(balance)}`); + // const balance = await renPool.balanceOf(owner.address); + // print(` Owner's balance is ${chalk.yellow(balance)}`); - print('Verifying RenPool smart contract in Etherscan') + print('Verifying RenPoolFactory smart contract in Etherscan') await hre.run("verify:verify", { - address: renPool.address, - constructorArguments: [ - renTokenAddr, - darknodeRegistryAddr, - darknodePaymentAddr, - claimRewardsAddr, - gatewayRegistryAddr, - owner.address, - POOL_BOND - ], + address: renPoolFactory.address, + constructorArguments: [] + // renTokenAddr, + // darknodeRegistryAddr, + // darknodePaymentAddr, + // claimRewardsAddr, + // gatewayRegistryAddr, + // owner.address, + // POOL_BOND + // ], }); } - return { renPool, renToken, faucet }; + return { renPoolFactory, renToken, faucet }; } if (require.main === module) { From 57b9095037f09c6f4477a8c9907a17dbf806f6a5 Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Tue, 4 Jan 2022 13:05:17 +0100 Subject: [PATCH 11/12] removing RenPoolFactory from gitignore --- .gitignore | 1 + .../RenPoolFactory.sol/RenPoolFactory.json | 124 ++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 artifacts/contracts/RenPoolFactory.sol/RenPoolFactory.json diff --git a/.gitignore b/.gitignore index 971bc59..8250e11 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ /node_modules/ /artifacts/**/*.json !/artifacts/contracts/RenPool.sol/RenPool.json +!/artifacts/contracts/RenPoolFactory.sol/RenPoolFactory.json !/artifacts/@renproject/gateway-sol/contracts/Gateway/interfaces/IERC20Standard.sol/IERC20Standard.json !/artifacts/interfaces/IDarknodeRegistry.sol/IDarknodeRegistry.json /cache/ diff --git a/artifacts/contracts/RenPoolFactory.sol/RenPoolFactory.json b/artifacts/contracts/RenPoolFactory.sol/RenPoolFactory.json new file mode 100644 index 0000000..b68af2b --- /dev/null +++ b/artifacts/contracts/RenPoolFactory.sol/RenPoolFactory.json @@ -0,0 +1,124 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RenPoolFactory", + "sourceName": "contracts/RenPoolFactory.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_pool", + "type": "address" + } + ], + "name": "PoolDeployed", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_renTokenAddr", + "type": "address" + }, + { + "internalType": "address", + "name": "_darknodeRegistryAddr", + "type": "address" + }, + { + "internalType": "address", + "name": "_darknodePaymentAddr", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimRewardsAddr", + "type": "address" + }, + { + "internalType": "address", + "name": "_gatewayRegistryAddr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_bond", + "type": "uint256" + } + ], + "name": "deployNewPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getPools", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614528806100606000396000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80632d0d18911462000057578063673a2a1f146200008d5780638da5cb5b14620000af578063ac4afa3814620000d1575b600080fd5b6200007560048036038101906200006f91906200035b565b62000107565b604051620000849190620004e0565b60405180910390f35b620000976200022b565b604051620000a69190620005b8565b60405180910390f35b620000b9620002bb565b604051620000c89190620004e0565b60405180910390f35b620000ef6004803603810190620000e99190620003f7565b620002df565b604051620000fe9190620004e0565b60405180910390f35b6000803390506000888888888860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16878a60405162000145906200031f565b620001589897969594939291906200052a565b604051809103906000f08015801562000175573d6000803e3d6000fd5b50905060008190506001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8dc1358b8a9cf262058f5f7944b19b8d0884556e191652c63859d2bd85724f33838260405162000213929190620004fd565b60405180910390a18093505050509695505050505050565b60606001805480602002602001604051908101604052809291908181526020018280548015620002b157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162000266575b5050505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018181548110620002f057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613e66806200068d83390190565b6000813590506200033e8162000658565b92915050565b600081359050620003558162000672565b92915050565b60008060008060008060c087890312156200037b576200037a62000653565b5b60006200038b89828a016200032d565b96505060206200039e89828a016200032d565b9550506040620003b189828a016200032d565b9450506060620003c489828a016200032d565b9350506080620003d789828a016200032d565b92505060a0620003ea89828a0162000344565b9150509295509295509295565b60006020828403121562000410576200040f62000653565b5b6000620004208482850162000344565b91505092915050565b600062000437838362000443565b60208301905092915050565b6200044e8162000615565b82525050565b6200045f8162000615565b82525050565b60006200047282620005ec565b6200047e818562000604565b93506200048b83620005dc565b8060005b83811015620004c2578151620004a6888262000429565b9750620004b383620005f7565b9250506001810190506200048f565b5085935050505092915050565b620004da8162000649565b82525050565b6000602082019050620004f7600083018462000454565b92915050565b600060408201905062000514600083018562000454565b62000523602083018462000454565b9392505050565b60006101008201905062000542600083018b62000454565b62000551602083018a62000454565b62000560604083018962000454565b6200056f606083018862000454565b6200057e608083018762000454565b6200058d60a083018662000454565b6200059c60c083018562000454565b620005ab60e0830184620004cf565b9998505050505050505050565b60006020820190508181036000830152620005d4818462000465565b905092915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b6000620006228262000629565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620006638162000615565b81146200066f57600080fd5b50565b6200067d8162000649565b81146200068957600080fd5b5056fe60806040523480156200001157600080fd5b5060405162003e6638038062003e66833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613a8080620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c34604051610253919061334a565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f4d565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190612ffa565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061299b565b610a86565b005b34801561031b57600080fd5b506103366004803603810190610331919061299b565b610e9a565b604051610343919061334a565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061299b565b610eb2565b604051610380919061334a565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133c5565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c1a565b610ecf565b005b3480156103e957600080fd5b506103f261119e565b6040516103ff91906130d4565b60405180910390f35b34801561041457600080fd5b5061041d6111c4565b60405161042a9190613083565b60405180910390f35b34801561043f57600080fd5b506104486111ea565b6040516104559190613061565b60405180910390f35b34801561046a57600080fd5b50610473611278565b604051610480919061334a565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b67565b61127e565b005b3480156104be57600080fd5b506104c76114b0565b6040516104d4919061334a565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061299b565b6114b6565b604051610511919061334a565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612af8565b6114ff565b60405161054e919061334a565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061299b565b611662565b60405161058b919061334a565b60405180910390f35b3480156105a057600080fd5b506105a961167a565b005b3480156105b757600080fd5b506105c0611896565b6040516105cd9190612f4d565b60405180910390f35b3480156105e257600080fd5b506105eb6118ba565b6040516105f89190612f4d565b60405180910390f35b34801561060d57600080fd5b506106166118e0565b60405161062391906130b9565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c1a565b611906565b005b34801561066157600080fd5b5061066a611b0d565b6040516106779190612ffa565b60405180910390f35b34801561068c57600080fd5b50610695611b20565b6040516106a2919061334a565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612aaf565b611b26565b6040516106df919061334a565b60405180910390f35b3480156106f457600080fd5b506106fd611c62565b60405161070a919061309e565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c1a565b611c88565b005b34801561074857600080fd5b50610751611f38565b005b34801561075f57600080fd5b5061076861212b565b604051610775919061334a565b60405180910390f35b34801561078a57600080fd5b50610793612131565b6040516107a091906130ef565b60405180910390f35b3480156107b557600080fd5b506107be612157565b6040516107cb919061334a565b60405180910390f35b3480156107e057600080fd5b506107e961215d565b005b3480156107f757600080fd5b5061080061224d565b005b34801561080e57600080fd5b50610829600480360381019061082491906129c8565b612387565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d8906132ea565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b7919061334a565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f4d565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b099061322a565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b589061328a565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb0919061349f565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c069190613526565b925050819055508060066000828254610c1f9190613526565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f68565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a28565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906131ea565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fd1565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a28565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d919061334a565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061332a565b60405180910390fd5b82811015610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f959061324a565b60405180910390fd5b600960009054906101000a900460ff1615610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe5906132aa565b60405180910390fd5b82600560008282546110009190613526565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110569190613526565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110ba929190612fd1565b602060405180830381600087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612a28565b61114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906131ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611191919061334a565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600380546111f79061369d565b80601f01602080910402602001604051908101604052809291908181526020018280546112239061369d565b80156112705780601f1061124557610100808354040283529160200191611270565b820191906000526020600020905b81548152906001019060200180831161125357829003601f168201915b505050505081565b60045481565b6000858560405160200161129392919061312c565b60405160208183030381529060405280519060200120905060008385836040516020016112c29392919061338e565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401611337919061310a565b60206040518083038186803b15801561134f57600080fd5b505afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113879190612a82565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113c59493929190613015565b602060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114179190612c47565b90506114586040518060400160405280600a81526020017f6d696e74416d6f756e74000000000000000000000000000000000000000000008152508261256a565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161149e919061334a565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161156d9392919061315c565b602060405180830381600087803b15801561158757600080fd5b505af115801561159b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bf9190612c47565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161164d929190613365565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117215750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611757906132ea565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117bd9190612f4d565b60206040518083038186803b1580156117d557600080fd5b505afa1580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180d9190612c47565b1161184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118449061330a565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311611992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119899061332a565b60405180910390fd5b828110156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc9061324a565b60405180910390fd5b600960009054906101000a900460ff16611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b9061328a565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a7a919061349f565b92505081905550600960019054906101000a900460ff168015611aac57506002600454611aa791906134f5565b600654115b15611aba57611ab9612606565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b00919061334a565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b83919061310a565b60206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd39190612a55565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c0b9190612f4d565b60206040518083038186803b158015611c2357600080fd5b505afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612c47565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906132aa565b60405180910390fd5b60008211611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d179061332a565b60405180910390fd5b60045460055483611d31919061349f565b1115611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061320a565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc1919061349f565b925050819055508160056000828254611dda919061349f565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e27919061334a565b60405180910390a26004546005541415611e4457611e436126d2565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ea393929190612f68565b602060405180830381600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef59190612a28565b611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906131ea565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf906132ea565b60405180910390fd5b600960009054906101000a900460ff16612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e9061328a565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b8152600401612098929190612fd1565b602060405180830381600087803b1580156120b257600080fd5b505af11580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190612a28565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061326a565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806122045750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906132ea565b60405180910390fd5b61224b612606565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d09061322a565b60405180910390fd5b80600660008282546122eb9190613526565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161237b919061334a565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e906132ea565b60405180910390fd5b600960009054906101000a900460ff16612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d9061328a565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124c593929190612f9f565b600060405180830381600087803b1580156124df57600080fd5b505af11580156124f3573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160039190612564929190612744565b50505050565b612602828260405160240161258092919061319a565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061271b565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016126839190612f4d565b600060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546127509061369d565b90600052602060002090601f01602090048101928261277257600085556127b9565b82601f1061278b57803560ff19168380011785556127b9565b828001600101855582156127b9579182015b828111156127b857823582559160200191906001019061279d565b5b5090506127c691906127ca565b5090565b5b808211156127e35760008160009055506001016127cb565b5090565b60006127fa6127f584613405565b6133e0565b905082815260208101848484011115612816576128156137cb565b5b61282184828561365b565b509392505050565b600061283c61283784613436565b6133e0565b905082815260208101848484011115612858576128576137cb565b5b61286384828561365b565b509392505050565b60008135905061287a816139d7565b92915050565b60008151905061288f816139ee565b92915050565b60008083601f8401126128ab576128aa6137c1565b5b8235905067ffffffffffffffff8111156128c8576128c76137bc565b5b6020830191508360018202830111156128e4576128e36137c6565b5b9250929050565b600082601f830112612900576128ff6137c1565b5b81356129108482602086016127e7565b91505092915050565b60008151905061292881613a05565b92915050565b60008151905061293d81613a1c565b92915050565b600082601f830112612958576129576137c1565b5b8135612968848260208601612829565b91505092915050565b60008135905061298081613a33565b92915050565b60008151905061299581613a33565b92915050565b6000602082840312156129b1576129b06137d5565b5b60006129bf8482850161286b565b91505092915050565b6000806000604084860312156129e1576129e06137d5565b5b60006129ef8682870161286b565b935050602084013567ffffffffffffffff811115612a1057612a0f6137d0565b5b612a1c86828701612895565b92509250509250925092565b600060208284031215612a3e57612a3d6137d5565b5b6000612a4c84828501612880565b91505092915050565b600060208284031215612a6b57612a6a6137d5565b5b6000612a7984828501612919565b91505092915050565b600060208284031215612a9857612a976137d5565b5b6000612aa68482850161292e565b91505092915050565b600060208284031215612ac557612ac46137d5565b5b600082013567ffffffffffffffff811115612ae357612ae26137d0565b5b612aef84828501612943565b91505092915050565b600080600060608486031215612b1157612b106137d5565b5b600084013567ffffffffffffffff811115612b2f57612b2e6137d0565b5b612b3b86828701612943565b9350506020612b4c8682870161286b565b9250506040612b5d86828701612971565b9150509250925092565b600080600080600060a08688031215612b8357612b826137d5565b5b600086013567ffffffffffffffff811115612ba157612ba06137d0565b5b612bad88828901612943565b9550506020612bbe8882890161286b565b9450506040612bcf88828901612971565b9350506060612be088828901612971565b925050608086013567ffffffffffffffff811115612c0157612c006137d0565b5b612c0d888289016128eb565b9150509295509295909350565b600060208284031215612c3057612c2f6137d5565b5b6000612c3e84828501612971565b91505092915050565b600060208284031215612c5d57612c5c6137d5565b5b6000612c6b84828501612986565b91505092915050565b612c7d8161355a565b82525050565b612c8c8161356c565b82525050565b612c9b81613578565b82525050565b6000612cad838561347d565b9350612cba83858461365b565b612cc3836137da565b840190509392505050565b6000612cd982613467565b612ce3818561347d565b9350612cf381856020860161366a565b612cfc816137da565b840191505092915050565b612d10816135dd565b82525050565b612d1f816135ef565b82525050565b612d2e81613601565b82525050565b612d3d81613613565b82525050565b612d4c81613625565b82525050565b6000612d5d82613472565b612d67818561348e565b9350612d7781856020860161366a565b612d80816137da565b840191505092915050565b6000612d9860188361348e565b9150612da3826137eb565b602082019050919050565b6000612dbb60178361348e565b9150612dc682613814565b602082019050919050565b6000612dde601e8361348e565b9150612de98261383d565b602082019050919050565b6000612e0160178361348e565b9150612e0c82613866565b602082019050919050565b6000612e24601b8361348e565b9150612e2f8261388f565b602082019050919050565b6000612e47601d8361348e565b9150612e52826138b8565b602082019050919050565b6000612e6a601b8361348e565b9150612e75826138e1565b602082019050919050565b6000612e8d60178361348e565b9150612e988261390a565b602082019050919050565b6000612eb060168361348e565b9150612ebb82613933565b602082019050919050565b6000612ed360158361348e565b9150612ede8261395c565b602082019050919050565b6000612ef6601d8361348e565b9150612f0182613985565b602082019050919050565b6000612f1960178361348e565b9150612f24826139ae565b602082019050919050565b612f38816135c6565b82525050565b612f47816135d0565b82525050565b6000602082019050612f626000830184612c74565b92915050565b6000606082019050612f7d6000830186612c74565b612f8a6020830185612c74565b612f976040830184612f2f565b949350505050565b6000604082019050612fb46000830186612c74565b8181036020830152612fc7818486612ca1565b9050949350505050565b6000604082019050612fe66000830185612c74565b612ff36020830184612f2f565b9392505050565b600060208201905061300f6000830184612c83565b92915050565b600060808201905061302a6000830187612c92565b6130376020830186612f2f565b6130446040830185612c92565b81810360608301526130568184612cce565b905095945050505050565b6000602082019050818103600083015261307b8184612cce565b905092915050565b60006020820190506130986000830184612d07565b92915050565b60006020820190506130b36000830184612d16565b92915050565b60006020820190506130ce6000830184612d25565b92915050565b60006020820190506130e96000830184612d34565b92915050565b60006020820190506131046000830184612d43565b92915050565b600060208201905081810360008301526131248184612d52565b905092915050565b600060408201905081810360008301526131468185612d52565b90506131556020830184612c74565b9392505050565b600060608201905081810360008301526131768186612d52565b90506131856020830185612c74565b6131926040830184612f2f565b949350505050565b600060408201905081810360008301526131b48185612d52565b90506131c36020830184612f2f565b9392505050565b600060208201905081810360008301526131e381612d8b565b9050919050565b6000602082019050818103600083015261320381612dae565b9050919050565b6000602082019050818103600083015261322381612dd1565b9050919050565b6000602082019050818103600083015261324381612df4565b9050919050565b6000602082019050818103600083015261326381612e17565b9050919050565b6000602082019050818103600083015261328381612e3a565b9050919050565b600060208201905081810360008301526132a381612e5d565b9050919050565b600060208201905081810360008301526132c381612e80565b9050919050565b600060208201905081810360008301526132e381612ea3565b9050919050565b6000602082019050818103600083015261330381612ec6565b9050919050565b6000602082019050818103600083015261332381612ee9565b9050919050565b6000602082019050818103600083015261334381612f0c565b9050919050565b600060208201905061335f6000830184612f2f565b92915050565b600060408201905061337a6000830185612f2f565b6133876020830184612f2f565b9392505050565b60006060820190506133a36000830186612f2f565b6133b06020830185612f2f565b6133bd6040830184612c92565b949350505050565b60006020820190506133da6000830184612f3e565b92915050565b60006133ea6133fb565b90506133f682826136cf565b919050565b6000604051905090565b600067ffffffffffffffff8211156134205761341f61378d565b5b613429826137da565b9050602081019050919050565b600067ffffffffffffffff8211156134515761345061378d565b5b61345a826137da565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134aa826135c6565b91506134b5836135c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134ea576134e9613700565b5b828201905092915050565b6000613500826135c6565b915061350b836135c6565b92508261351b5761351a61372f565b5b828204905092915050565b6000613531826135c6565b915061353c836135c6565b92508282101561354f5761354e613700565b5b828203905092915050565b6000613565826135a6565b9050919050565b60008115159050919050565b6000819050919050565b600061358d8261355a565b9050919050565b600061359f8261355a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135e882613637565b9050919050565b60006135fa82613637565b9050919050565b600061360c82613637565b9050919050565b600061361e82613637565b9050919050565b600061363082613637565b9050919050565b600061364282613649565b9050919050565b6000613654826135a6565b9050919050565b82818337600083830152505050565b60005b8381101561368857808201518184015260208101905061366d565b83811115613697576000848401525b50505050565b600060028204905060018216806136b557607f821691505b602082108114156136c9576136c861375e565b5b50919050565b6136d8826137da565b810181811067ffffffffffffffff821117156136f7576136f661378d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139e08161355a565b81146139eb57600080fd5b50565b6139f78161356c565b8114613a0257600080fd5b50565b613a0e81613582565b8114613a1957600080fd5b50565b613a2581613594565b8114613a3057600080fd5b50565b613a3c816135c6565b8114613a4757600080fd5b5056fea26469706673582212200d75bb3d56461e8449387630b7f2039001d77c46cf625fab3f151f5223547a2464736f6c63430008070033a264697066735822122040d353be8d6af5f0f46e5291a4164d45d1bafde35fdbe8539543281e80e4494964736f6c63430008070033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000525760003560e01c80632d0d18911462000057578063673a2a1f146200008d5780638da5cb5b14620000af578063ac4afa3814620000d1575b600080fd5b6200007560048036038101906200006f91906200035b565b62000107565b604051620000849190620004e0565b60405180910390f35b620000976200022b565b604051620000a69190620005b8565b60405180910390f35b620000b9620002bb565b604051620000c89190620004e0565b60405180910390f35b620000ef6004803603810190620000e99190620003f7565b620002df565b604051620000fe9190620004e0565b60405180910390f35b6000803390506000888888888860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16878a60405162000145906200031f565b620001589897969594939291906200052a565b604051809103906000f08015801562000175573d6000803e3d6000fd5b50905060008190506001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8dc1358b8a9cf262058f5f7944b19b8d0884556e191652c63859d2bd85724f33838260405162000213929190620004fd565b60405180910390a18093505050509695505050505050565b60606001805480602002602001604051908101604052809291908181526020018280548015620002b157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162000266575b5050505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018181548110620002f057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613e66806200068d83390190565b6000813590506200033e8162000658565b92915050565b600081359050620003558162000672565b92915050565b60008060008060008060c087890312156200037b576200037a62000653565b5b60006200038b89828a016200032d565b96505060206200039e89828a016200032d565b9550506040620003b189828a016200032d565b9450506060620003c489828a016200032d565b9350506080620003d789828a016200032d565b92505060a0620003ea89828a0162000344565b9150509295509295509295565b60006020828403121562000410576200040f62000653565b5b6000620004208482850162000344565b91505092915050565b600062000437838362000443565b60208301905092915050565b6200044e8162000615565b82525050565b6200045f8162000615565b82525050565b60006200047282620005ec565b6200047e818562000604565b93506200048b83620005dc565b8060005b83811015620004c2578151620004a6888262000429565b9750620004b383620005f7565b9250506001810190506200048f565b5085935050505092915050565b620004da8162000649565b82525050565b6000602082019050620004f7600083018462000454565b92915050565b600060408201905062000514600083018562000454565b62000523602083018462000454565b9392505050565b60006101008201905062000542600083018b62000454565b62000551602083018a62000454565b62000560604083018962000454565b6200056f606083018862000454565b6200057e608083018762000454565b6200058d60a083018662000454565b6200059c60c083018562000454565b620005ab60e0830184620004cf565b9998505050505050505050565b60006020820190508181036000830152620005d4818462000465565b905092915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b6000620006228262000629565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620006638162000615565b81146200066f57600080fd5b50565b6200067d8162000649565b81146200068957600080fd5b5056fe60806040523480156200001157600080fd5b5060405162003e6638038062003e66833981810160405281019062000037919062000296565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555060006005819055506000600681905550600560078190555060056008819055505050505050505050620003d6565b6000815190506200027981620003a2565b92915050565b6000815190506200029081620003bc565b92915050565b600080600080600080600080610100898b031215620002ba57620002b96200039d565b5b6000620002ca8b828c0162000268565b9850506020620002dd8b828c0162000268565b9750506040620002f08b828c0162000268565b9650506060620003038b828c0162000268565b9550506080620003168b828c0162000268565b94505060a0620003298b828c0162000268565b93505060c06200033c8b828c0162000268565b92505060e06200034f8b828c016200027f565b9150509295985092959890939650565b60006200036c8262000373565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b620003ad816200035f565b8114620003b957600080fd5b50565b620003c78162000393565b8114620003d357600080fd5b50565b613a8080620003e66000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b6b34c67116100a0578063d693452e1161006f578063d693452e1461077e578063e39f6101146107a9578063e438a77d146107d4578063e714a028146107eb578063e7585aea146108025761025d565b8063b6b34c67146106e8578063b6b55f2514610713578063b7eb85c41461073c578063d5b2a01a146107535761025d565b80639e45e0d0116100e75780639e45e0d0146106015780639ee679e81461062c578063a4e2d63414610655578063aaaa0c4b14610680578063ac347987146106ab5761025d565b80637ecebe001461055757806389026538146105945780638da5cb5b146105ab578063901a6498146105d65761025d565b80632e1a7d4d1161019b57806364c9ec6f1161016a57806364c9ec6f1461045e5780636664e42e146104895780636ec21cc8146104b257806370a08231146104dd57806371bbef361461051a5761025d565b80632e1a7d4d146103b457806334246f9b146103dd578063372500ab1461040857806363ffab31146104335761025d565b8063270016fb116101d7578063270016fb146102e657806327b380f31461030f57806327e235e31461034c5780632e0f2625146103895761025d565b8063023c5b08146102625780631261795d1461028d57806313a0ae2b146102a457806322366844146102bb5761025d565b3661025d573373ffffffffffffffffffffffffffffffffffffffff167f66ff7c8f71ccc7c36152a41920d0d3b46ef3034359f76aa1498ed4478c204b5c34604051610253919061334a565b60405180910390a2005b600080fd5b34801561026e57600080fd5b5061027761082b565b6040516102849190612f4d565b60405180910390f35b34801561029957600080fd5b506102a2610851565b005b3480156102b057600080fd5b506102b96109c2565b005b3480156102c757600080fd5b506102d0610a73565b6040516102dd9190612ffa565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061299b565b610a86565b005b34801561031b57600080fd5b506103366004803603810190610331919061299b565b610e9a565b604051610343919061334a565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061299b565b610eb2565b604051610380919061334a565b60405180910390f35b34801561039557600080fd5b5061039e610eca565b6040516103ab91906133c5565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612c1a565b610ecf565b005b3480156103e957600080fd5b506103f261119e565b6040516103ff91906130d4565b60405180910390f35b34801561041457600080fd5b5061041d6111c4565b60405161042a9190613083565b60405180910390f35b34801561043f57600080fd5b506104486111ea565b6040516104559190613061565b60405180910390f35b34801561046a57600080fd5b50610473611278565b604051610480919061334a565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612b67565b61127e565b005b3480156104be57600080fd5b506104c76114b0565b6040516104d4919061334a565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061299b565b6114b6565b604051610511919061334a565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612af8565b6114ff565b60405161054e919061334a565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061299b565b611662565b60405161058b919061334a565b60405180910390f35b3480156105a057600080fd5b506105a961167a565b005b3480156105b757600080fd5b506105c0611896565b6040516105cd9190612f4d565b60405180910390f35b3480156105e257600080fd5b506105eb6118ba565b6040516105f89190612f4d565b60405180910390f35b34801561060d57600080fd5b506106166118e0565b60405161062391906130b9565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190612c1a565b611906565b005b34801561066157600080fd5b5061066a611b0d565b6040516106779190612ffa565b60405180910390f35b34801561068c57600080fd5b50610695611b20565b6040516106a2919061334a565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612aaf565b611b26565b6040516106df919061334a565b60405180910390f35b3480156106f457600080fd5b506106fd611c62565b60405161070a919061309e565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612c1a565b611c88565b005b34801561074857600080fd5b50610751611f38565b005b34801561075f57600080fd5b5061076861212b565b604051610775919061334a565b60405180910390f35b34801561078a57600080fd5b50610793612131565b6040516107a091906130ef565b60405180910390f35b3480156107b557600080fd5b506107be612157565b6040516107cb919061334a565b60405180910390f35b3480156107e057600080fd5b506107e961215d565b005b3480156107f757600080fd5b5061080061224d565b005b34801561080e57600080fd5b50610829600480360381019061082491906129c8565b612387565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d8906132ea565b60405180910390fd5b6000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561094e573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b826040516109b7919061334a565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a3f9190612f4d565b600060405180830381600087803b158015610a5957600080fd5b505af1158015610a6d573d6000803e3d6000fd5b50505050565b600960019054906101000a900460ff1681565b60003390506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b099061322a565b60405180910390fd5b600960009054906101000a900460ff16610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b589061328a565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb0919061349f565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c069190613526565b925050819055508060066000828254610c1f9190613526565b92505081905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401610cc893929190612f68565b602060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190612a28565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d50906131ea565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610db6929190612fd1565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190612a28565b610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167fc0c6ac36718cda96fac02ecd8ae8aad366fb1ce2b294e1c2de0bee39ddd328af82604051610e8d919061334a565b60405180910390a2505050565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b601281565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061332a565b60405180910390fd5b82811015610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f959061324a565b60405180910390fd5b600960009054906101000a900460ff1615610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe5906132aa565b60405180910390fd5b82600560008282546110009190613526565b9250508190555082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110569190613526565b92505081905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016110ba929190612fd1565b602060405180830381600087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612a28565b61114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906131ca565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f315d4ef2c32c6e9b2d2364f5d35c06ffb3427d08357493b104b90799c99c1e3c84604051611191919061334a565b60405180910390a2505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600380546111f79061369d565b80601f01602080910402602001604051908101604052809291908181526020018280546112239061369d565b80156112705780601f1061124557610100808354040283529160200191611270565b820191906000526020600020905b81548152906001019060200180831161125357829003601f168201915b505050505081565b60045481565b6000858560405160200161129392919061312c565b60405160208183030381529060405280519060200120905060008385836040516020016112c29392919061338e565b6040516020818303038152906040528051906020012090506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364936b1e896040518263ffffffff1660e01b8152600401611337919061310a565b60206040518083038186803b15801561134f57600080fd5b505afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113879190612a82565b73ffffffffffffffffffffffffffffffffffffffff1663159ab14d848885886040518563ffffffff1660e01b81526004016113c59493929190613015565b602060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114179190612c47565b90506114586040518060400160405280600a81526020017f6d696e74416d6f756e74000000000000000000000000000000000000000000008152508261256a565b3373ffffffffffffffffffffffffffffffffffffffff167f5387ab2b2012a616dcfbc6c0f6c6f7a6ef5b3fc7c7740476f7b20b65f50d59728260405161149e919061334a565b60405180910390a25050505050505050565b60055481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080339050600061271090506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a430147f8888856040518463ffffffff1660e01b815260040161156d9392919061315c565b602060405180830381600087803b15801561158757600080fd5b505af115801561159b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bf9190612c47565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325868360405161164d929190613365565b60405180910390a28093505050509392505050565b600c6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117215750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611757906132ea565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117bd9190612f4d565b60206040518083038186803b1580156117d557600080fd5b505afa1580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180d9190612c47565b1161184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118449061330a565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507fde17ec5ba6f9b5379a238e2a199366faccaedccf87879284014517333da74e2660405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008311611992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119899061332a565b60405180910390fd5b828110156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc9061324a565b60405180910390fd5b600960009054906101000a900460ff16611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b9061328a565b60405180910390fd5b82600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254611a7a919061349f565b92505081905550600960019054906101000a900460ff168015611aac57506002600454611aa791906134f5565b600654115b15611aba57611ab9612606565b5b8173ffffffffffffffffffffffffffffffffffffffff167fd68fb6899f484313a5048f6f882da08bad2e51f156053cb0888c3a0a0c08259084604051611b00919061334a565b60405180910390a2505050565b600960009054906101000a900460ff1681565b60065481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efa74f1f836040518263ffffffff1660e01b8152600401611b83919061310a565b60206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd39190612a55565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c0b9190612f4d565b60206040518083038186803b158015611c2357600080fd5b505afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612c47565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050600960009054906101000a900460ff1615611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906132aa565b60405180910390fd5b60008211611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d179061332a565b60405180910390fd5b60045460055483611d31919061349f565b1115611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061320a565b60405180910390fd5b81600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc1919061349f565b925050819055508160056000828254611dda919061349f565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f9c4f7a1cc1751ba83a1ddccc2da94b1fcfc4efaa2c546f277e551b2dd9c0500583604051611e27919061334a565b60405180910390a26004546005541415611e4457611e436126d2565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8230856040518463ffffffff1660e01b8152600401611ea393929190612f68565b602060405180830381600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef59190612a28565b611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906131ea565b60405180910390fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf906132ea565b60405180910390fd5b600960009054906101000a900460ff16612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e9061328a565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518363ffffffff1660e01b8152600401612098929190612fd1565b602060405180830381600087803b1580156120b257600080fd5b505af11580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190612a28565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061326a565b60405180910390fd5b565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806122045750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906132ea565b60405180910390fd5b61224b612606565b565b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d09061322a565b60405180910390fd5b80600660008282546122eb9190613526565b92505081905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558173ffffffffffffffffffffffffffffffffffffffff167f97470f6911e16b5918a53053f8d1a686e0acaf6a4bfc7b79d064aa24b9f057138260405161237b919061334a565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e906132ea565b60405180910390fd5b600960009054906101000a900460ff16612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d9061328a565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324b8fbf68484846040518463ffffffff1660e01b81526004016124c593929190612f9f565b600060405180830381600087803b1580156124df57600080fd5b505af11580156124f3573d6000803e3d6000fd5b505050506001600960016101000a81548160ff02191690831515021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160039190612564929190612744565b50505050565b612602828260405160240161258092919061319a565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061271b565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384ac33ec600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016126839190612f4d565b600060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b505050506000600960016101000a81548160ff021916908315150217905550565b6001600960006101000a81548160ff0219169083151502179055507f2e136745550967f28b779ce8c395ca060a2f844edfb5b06631fe677f66f9e30560405160405180910390a1565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b8280546127509061369d565b90600052602060002090601f01602090048101928261277257600085556127b9565b82601f1061278b57803560ff19168380011785556127b9565b828001600101855582156127b9579182015b828111156127b857823582559160200191906001019061279d565b5b5090506127c691906127ca565b5090565b5b808211156127e35760008160009055506001016127cb565b5090565b60006127fa6127f584613405565b6133e0565b905082815260208101848484011115612816576128156137cb565b5b61282184828561365b565b509392505050565b600061283c61283784613436565b6133e0565b905082815260208101848484011115612858576128576137cb565b5b61286384828561365b565b509392505050565b60008135905061287a816139d7565b92915050565b60008151905061288f816139ee565b92915050565b60008083601f8401126128ab576128aa6137c1565b5b8235905067ffffffffffffffff8111156128c8576128c76137bc565b5b6020830191508360018202830111156128e4576128e36137c6565b5b9250929050565b600082601f830112612900576128ff6137c1565b5b81356129108482602086016127e7565b91505092915050565b60008151905061292881613a05565b92915050565b60008151905061293d81613a1c565b92915050565b600082601f830112612958576129576137c1565b5b8135612968848260208601612829565b91505092915050565b60008135905061298081613a33565b92915050565b60008151905061299581613a33565b92915050565b6000602082840312156129b1576129b06137d5565b5b60006129bf8482850161286b565b91505092915050565b6000806000604084860312156129e1576129e06137d5565b5b60006129ef8682870161286b565b935050602084013567ffffffffffffffff811115612a1057612a0f6137d0565b5b612a1c86828701612895565b92509250509250925092565b600060208284031215612a3e57612a3d6137d5565b5b6000612a4c84828501612880565b91505092915050565b600060208284031215612a6b57612a6a6137d5565b5b6000612a7984828501612919565b91505092915050565b600060208284031215612a9857612a976137d5565b5b6000612aa68482850161292e565b91505092915050565b600060208284031215612ac557612ac46137d5565b5b600082013567ffffffffffffffff811115612ae357612ae26137d0565b5b612aef84828501612943565b91505092915050565b600080600060608486031215612b1157612b106137d5565b5b600084013567ffffffffffffffff811115612b2f57612b2e6137d0565b5b612b3b86828701612943565b9350506020612b4c8682870161286b565b9250506040612b5d86828701612971565b9150509250925092565b600080600080600060a08688031215612b8357612b826137d5565b5b600086013567ffffffffffffffff811115612ba157612ba06137d0565b5b612bad88828901612943565b9550506020612bbe8882890161286b565b9450506040612bcf88828901612971565b9350506060612be088828901612971565b925050608086013567ffffffffffffffff811115612c0157612c006137d0565b5b612c0d888289016128eb565b9150509295509295909350565b600060208284031215612c3057612c2f6137d5565b5b6000612c3e84828501612971565b91505092915050565b600060208284031215612c5d57612c5c6137d5565b5b6000612c6b84828501612986565b91505092915050565b612c7d8161355a565b82525050565b612c8c8161356c565b82525050565b612c9b81613578565b82525050565b6000612cad838561347d565b9350612cba83858461365b565b612cc3836137da565b840190509392505050565b6000612cd982613467565b612ce3818561347d565b9350612cf381856020860161366a565b612cfc816137da565b840191505092915050565b612d10816135dd565b82525050565b612d1f816135ef565b82525050565b612d2e81613601565b82525050565b612d3d81613613565b82525050565b612d4c81613625565b82525050565b6000612d5d82613472565b612d67818561348e565b9350612d7781856020860161366a565b612d80816137da565b840191505092915050565b6000612d9860188361348e565b9150612da3826137eb565b602082019050919050565b6000612dbb60178361348e565b9150612dc682613814565b602082019050919050565b6000612dde601e8361348e565b9150612de98261383d565b602082019050919050565b6000612e0160178361348e565b9150612e0c82613866565b602082019050919050565b6000612e24601b8361348e565b9150612e2f8261388f565b602082019050919050565b6000612e47601d8361348e565b9150612e52826138b8565b602082019050919050565b6000612e6a601b8361348e565b9150612e75826138e1565b602082019050919050565b6000612e8d60178361348e565b9150612e988261390a565b602082019050919050565b6000612eb060168361348e565b9150612ebb82613933565b602082019050919050565b6000612ed360158361348e565b9150612ede8261395c565b602082019050919050565b6000612ef6601d8361348e565b9150612f0182613985565b602082019050919050565b6000612f1960178361348e565b9150612f24826139ae565b602082019050919050565b612f38816135c6565b82525050565b612f47816135d0565b82525050565b6000602082019050612f626000830184612c74565b92915050565b6000606082019050612f7d6000830186612c74565b612f8a6020830185612c74565b612f976040830184612f2f565b949350505050565b6000604082019050612fb46000830186612c74565b8181036020830152612fc7818486612ca1565b9050949350505050565b6000604082019050612fe66000830185612c74565b612ff36020830184612f2f565b9392505050565b600060208201905061300f6000830184612c83565b92915050565b600060808201905061302a6000830187612c92565b6130376020830186612f2f565b6130446040830185612c92565b81810360608301526130568184612cce565b905095945050505050565b6000602082019050818103600083015261307b8184612cce565b905092915050565b60006020820190506130986000830184612d07565b92915050565b60006020820190506130b36000830184612d16565b92915050565b60006020820190506130ce6000830184612d25565b92915050565b60006020820190506130e96000830184612d34565b92915050565b60006020820190506131046000830184612d43565b92915050565b600060208201905081810360008301526131248184612d52565b905092915050565b600060408201905081810360008301526131468185612d52565b90506131556020830184612c74565b9392505050565b600060608201905081810360008301526131768186612d52565b90506131856020830185612c74565b6131926040830184612f2f565b949350505050565b600060408201905081810360008301526131b48185612d52565b90506131c36020830184612f2f565b9392505050565b600060208201905081810360008301526131e381612d8b565b9050919050565b6000602082019050818103600083015261320381612dae565b9050919050565b6000602082019050818103600083015261322381612dd1565b9050919050565b6000602082019050818103600083015261324381612df4565b9050919050565b6000602082019050818103600083015261326381612e17565b9050919050565b6000602082019050818103600083015261328381612e3a565b9050919050565b600060208201905081810360008301526132a381612e5d565b9050919050565b600060208201905081810360008301526132c381612e80565b9050919050565b600060208201905081810360008301526132e381612ea3565b9050919050565b6000602082019050818103600083015261330381612ec6565b9050919050565b6000602082019050818103600083015261332381612ee9565b9050919050565b6000602082019050818103600083015261334381612f0c565b9050919050565b600060208201905061335f6000830184612f2f565b92915050565b600060408201905061337a6000830185612f2f565b6133876020830184612f2f565b9392505050565b60006060820190506133a36000830186612f2f565b6133b06020830185612f2f565b6133bd6040830184612c92565b949350505050565b60006020820190506133da6000830184612f3e565b92915050565b60006133ea6133fb565b90506133f682826136cf565b919050565b6000604051905090565b600067ffffffffffffffff8211156134205761341f61378d565b5b613429826137da565b9050602081019050919050565b600067ffffffffffffffff8211156134515761345061378d565b5b61345a826137da565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134aa826135c6565b91506134b5836135c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134ea576134e9613700565b5b828201905092915050565b6000613500826135c6565b915061350b836135c6565b92508261351b5761351a61372f565b5b828204905092915050565b6000613531826135c6565b915061353c836135c6565b92508282101561354f5761354e613700565b5b828203905092915050565b6000613565826135a6565b9050919050565b60008115159050919050565b6000819050919050565b600061358d8261355a565b9050919050565b600061359f8261355a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135e882613637565b9050919050565b60006135fa82613637565b9050919050565b600061360c82613637565b9050919050565b600061361e82613637565b9050919050565b600061363082613637565b9050919050565b600061364282613649565b9050919050565b6000613654826135a6565b9050919050565b82818337600083830152505050565b60005b8381101561368857808201518184015260208101905061366d565b83811115613697576000848401525b50505050565b600060028204905060018216806136b557607f821691505b602082108114156136c9576136c861375e565b5b50919050565b6136d8826137da565b810181811067ffffffffffffffff821117156136f7576136f661378d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f52656e506f6f6c3a205769746864726177206661696c65640000000000000000600082015250565b7f52656e506f6f6c3a204465706f736974206661696c6564000000000000000000600082015250565b7f52656e506f6f6c3a20416d6f756e742073757270617373657320626f6e640000600082015250565b7f52656e506f6f6c3a20696e76616c696420616d6f756e74000000000000000000600082015250565b7f52656e506f6f6c3a20496e73756666696369656e742066756e64730000000000600082015250565b7f52656e506f6f6c3a20426f6e64207472616e73666572206661696c6564000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206e6f74206c6f636b65640000000000600082015250565b7f52656e506f6f6c3a20506f6f6c206973206c6f636b6564000000000000000000600082015250565b7f52656e506f6f6c3a20526566756e64206661696c656400000000000000000000600082015250565b7f52656e506f6f6c3a20556e617574686f72697a65640000000000000000000000600082015250565b7f52656e506f6f6c3a20506f6f6c2062616c616e6365206973207a65726f000000600082015250565b7f52656e506f6f6c3a20496e76616c696420616d6f756e74000000000000000000600082015250565b6139e08161355a565b81146139eb57600080fd5b50565b6139f78161356c565b8114613a0257600080fd5b50565b613a0e81613582565b8114613a1957600080fd5b50565b613a2581613594565b8114613a3057600080fd5b50565b613a3c816135c6565b8114613a4757600080fd5b5056fea26469706673582212200d75bb3d56461e8449387630b7f2039001d77c46cf625fab3f151f5223547a2464736f6c63430008070033a264697066735822122040d353be8d6af5f0f46e5291a4164d45d1bafde35fdbe8539543281e80e4494964736f6c63430008070033", + "linkReferences": {}, + "deployedLinkReferences": {} +} From c6d2540c17c3bbdd31ac41085421d40d89af1dcb Mon Sep 17 00:00:00 2001 From: fede-rodes Date: Tue, 4 Jan 2022 13:17:51 +0100 Subject: [PATCH 12/12] adding RenPoolFactory to types --- index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/index.d.ts b/index.d.ts index 67d0518..e1aa371 100644 --- a/index.d.ts +++ b/index.d.ts @@ -37,6 +37,7 @@ export type Artifact = { }; export const RenPool: Artifact; +export const RenPoolFactory: Artifact; export const IERC20Standard: Artifact; export const IDarknodeRegistry: Artifact;