More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 23,634 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove_liquidity... | 21917500 | 3 days ago | IN | 0 ETH | 0.00025612 | ||||
Exchange | 21734045 | 28 days ago | IN | 0 ETH | 0.00050263 | ||||
Exchange | 21731541 | 29 days ago | IN | 0 ETH | 0.00087486 | ||||
Remove_liquidity | 21711182 | 32 days ago | IN | 0 ETH | 0.0018205 | ||||
Remove_liquidity | 21709248 | 32 days ago | IN | 0 ETH | 0.00131898 | ||||
Remove_liquidity... | 21592965 | 48 days ago | IN | 0 ETH | 0.0007879 | ||||
Remove_liquidity... | 21490736 | 62 days ago | IN | 0 ETH | 0.00075087 | ||||
Remove_liquidity... | 21488218 | 63 days ago | IN | 0 ETH | 0.00137658 | ||||
Remove_liquidity | 21487188 | 63 days ago | IN | 0 ETH | 0.00220966 | ||||
Remove_liquidity... | 21441457 | 69 days ago | IN | 0 ETH | 0.00122437 | ||||
Remove_liquidity... | 21432419 | 71 days ago | IN | 0 ETH | 0.00369421 | ||||
Remove_liquidity... | 21421809 | 72 days ago | IN | 0 ETH | 0.00185483 | ||||
Remove_liquidity... | 21410661 | 74 days ago | IN | 0 ETH | 0.00204512 | ||||
Remove_liquidity... | 21378055 | 78 days ago | IN | 0 ETH | 0.00232583 | ||||
Remove_liquidity... | 21338784 | 84 days ago | IN | 0 ETH | 0.00530999 | ||||
Remove_liquidity... | 21320243 | 86 days ago | IN | 0 ETH | 0.00237876 | ||||
Remove_liquidity... | 21308309 | 88 days ago | IN | 0 ETH | 0.00261466 | ||||
Remove_liquidity... | 21288932 | 91 days ago | IN | 0 ETH | 0.00139746 | ||||
Remove_liquidity... | 21244336 | 97 days ago | IN | 0 ETH | 0.00242107 | ||||
Exchange | 21175183 | 107 days ago | IN | 0 ETH | 0.00412919 | ||||
Remove_liquidity | 21163219 | 108 days ago | IN | 0 ETH | 0.00299349 | ||||
Remove_liquidity... | 21159291 | 109 days ago | IN | 0 ETH | 0.00736598 | ||||
Remove_liquidity... | 21152888 | 110 days ago | IN | 0 ETH | 0.00135089 | ||||
Remove_liquidity... | 21102824 | 117 days ago | IN | 0 ETH | 0.00100051 | ||||
Remove_liquidity... | 21011229 | 129 days ago | IN | 0 ETH | 0.00171106 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.1.0b17
Contract Source Code (Vyper language format)
# (c) Curve.Fi, 2020 # Pools for renBTC/wBTC. Ren can potentially change amount of underlying bitcoins # External Contracts contract ERC20m: def totalSupply() -> uint256: constant def allowance(_owner: address, _spender: address) -> uint256: constant def transfer(_to: address, _value: uint256) -> bool: modifying def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying def approve(_spender: address, _value: uint256) -> bool: modifying def mint(_to: address, _value: uint256): modifying def burn(_value: uint256): modifying def burnFrom(_to: address, _value: uint256): modifying def name() -> string[64]: constant def symbol() -> string[32]: constant def decimals() -> uint256: constant def balanceOf(arg0: address) -> uint256: constant def set_minter(_minter: address): modifying # External Contracts contract cERC20: def totalSupply() -> uint256: constant def allowance(_owner: address, _spender: address) -> uint256: constant def transfer(_to: address, _value: uint256) -> bool: modifying def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying def approve(_spender: address, _value: uint256) -> bool: modifying def burn(_value: uint256): modifying def burnFrom(_to: address, _value: uint256): modifying def name() -> string[64]: constant def symbol() -> string[32]: constant def decimals() -> uint256: constant def balanceOf(arg0: address) -> uint256: constant def mint(mintAmount: uint256) -> uint256: modifying def redeem(redeemTokens: uint256) -> uint256: modifying def redeemUnderlying(redeemAmount: uint256) -> uint256: modifying def exchangeRateStored() -> uint256: constant def exchangeRateCurrent() -> uint256: constant def supplyRatePerBlock() -> uint256: constant def accrualBlockNumber() -> uint256: constant from vyper.interfaces import ERC20 # This can (and needs to) be changed at compile time N_COINS: constant(int128) = 3 # <- change ZERO256: constant(uint256) = 0 # This hack is really bad XXX ZEROS: constant(uint256[N_COINS]) = [ZERO256, ZERO256, ZERO256] # <- change USE_LENDING: constant(bool[N_COINS]) = [True, False, False] FEE_DENOMINATOR: constant(uint256) = 10 ** 10 LENDING_PRECISION: constant(uint256) = 10 ** 18 PRECISION: constant(uint256) = 10 ** 18 # The precision to convert to PRECISION_MUL: constant(uint256[N_COINS]) = [convert(10000000000, uint256), convert(10000000000, uint256), convert(1, uint256)] # PRECISION_MUL: constant(uint256[N_COINS]) = [ # PRECISION / convert(PRECISION, uint256), # DAI # PRECISION / convert(10 ** 6, uint256), # USDC # PRECISION / convert(10 ** 6, uint256)] # USDT admin_actions_delay: constant(uint256) = 3 * 86400 min_ramp_time: constant(uint256) = 86400 # Events TokenExchange: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256}) AddLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256}) RemoveLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], token_supply: uint256}) RemoveLiquidityOne: event({provider: indexed(address), token_amount: uint256, coin_amount: uint256}) RemoveLiquidityImbalance: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256}) CommitNewAdmin: event({deadline: indexed(timestamp), admin: indexed(address)}) NewAdmin: event({admin: indexed(address)}) CommitNewFee: event({deadline: indexed(timestamp), fee: uint256, admin_fee: uint256}) NewFee: event({fee: uint256, admin_fee: uint256}) RampA: event({old_A: uint256, new_A: uint256, initial_time: timestamp, future_time: timestamp}) StopRampA: event({A: uint256, t: timestamp}) coins: public(address[N_COINS]) balances: public(uint256[N_COINS]) fee: public(uint256) # fee * 1e10 admin_fee: public(uint256) # admin_fee * 1e10 max_admin_fee: constant(uint256) = 5 * 10 ** 9 max_fee: constant(uint256) = 5 * 10 ** 9 max_A: constant(uint256) = 10 ** 6 max_A_change: constant(uint256) = 10 owner: public(address) token: ERC20m initial_A: public(uint256) future_A: public(uint256) initial_A_time: public(timestamp) future_A_time: public(timestamp) admin_actions_deadline: public(timestamp) transfer_ownership_deadline: public(timestamp) future_fee: public(uint256) future_admin_fee: public(uint256) future_owner: public(address) kill_deadline: timestamp kill_deadline_dt: constant(uint256) = 2 * 30 * 86400 is_killed: bool @public def __init__(_coins: address[N_COINS], _pool_token: address, _A: uint256, _fee: uint256): """ _coins: Addresses of ERC20 conracts of coins _pool_token: Address of the token representing LP share _A: Amplification coefficient multiplied by n * (n - 1) _fee: Fee to charge for exchanges """ for i in range(N_COINS): assert _coins[i] != ZERO_ADDRESS self.balances[i] = 0 self.coins = _coins self.initial_A = _A self.future_A = _A self.fee = _fee self.owner = msg.sender self.kill_deadline = block.timestamp + kill_deadline_dt self.is_killed = False self.token = ERC20m(_pool_token) @constant @private def _A() -> uint256: """ Handle ramping A up or down """ t1: timestamp = self.future_A_time A1: uint256 = self.future_A if block.timestamp < t1: A0: uint256 = self.initial_A t0: timestamp = self.initial_A_time # Expressions in uint256 cannot have negative numbers, thus "if" if A1 > A0: return A0 + (A1 - A0) * (block.timestamp - t0) / (t1 - t0) else: return A0 - (A0 - A1) * (block.timestamp - t0) / (t1 - t0) else: # when t1 == 0 or block.timestamp >= t1 return A1 @constant @public def A() -> uint256: return self._A() @private @constant def _rates() -> uint256[N_COINS]: result: uint256[N_COINS] = PRECISION_MUL use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): rate: uint256 = LENDING_PRECISION # Used with no lending if use_lending[i]: rate = cERC20(self.coins[i]).exchangeRateCurrent() result[i] *= rate return result @private @constant def _xp(rates: uint256[N_COINS]) -> uint256[N_COINS]: result: uint256[N_COINS] = rates for i in range(N_COINS): result[i] = result[i] * self.balances[i] / LENDING_PRECISION return result @private @constant def _xp_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256[N_COINS]: result: uint256[N_COINS] = rates for i in range(N_COINS): result[i] = result[i] * _balances[i] / PRECISION return result @private @constant def get_D(xp: uint256[N_COINS], amp: uint256) -> uint256: S: uint256 = 0 for _x in xp: S += _x if S == 0: return 0 Dprev: uint256 = 0 D: uint256 = S Ann: uint256 = amp * N_COINS for _i in range(255): D_P: uint256 = D for _x in xp: D_P = D_P * D / (_x * N_COINS) # If division by 0, this will be borked: only withdrawal will work. And that is good Dprev = D D = (Ann * S + D_P * N_COINS) * D / ((Ann - 1) * D + (N_COINS + 1) * D_P) # Equality with the precision of 1 if D > Dprev: if D - Dprev <= 1: break else: if Dprev - D <= 1: break return D @private @constant def get_D_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS], amp: uint256) -> uint256: return self.get_D(self._xp_mem(rates, _balances), amp) @public @constant def get_virtual_price() -> uint256: """ Returns portfolio virtual price (for calculating profit) scaled up by 1e18 """ D: uint256 = self.get_D(self._xp(self._rates()), self._A()) # D is in the units similar to DAI (e.g. converted to precision 1e18) # When balanced, D = n * x_u - total virtual value of the portfolio token_supply: uint256 = self.token.totalSupply() return D * PRECISION / token_supply @public @constant def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256: """ Simplified method to calculate addition or reduction in token supply at deposit or withdrawal without taking fees into account (but looking at slippage). Needed to prevent front-running, not for precise calculations! """ _balances: uint256[N_COINS] = self.balances rates: uint256[N_COINS] = self._rates() amp: uint256 = self._A() D0: uint256 = self.get_D_mem(rates, _balances, amp) for i in range(N_COINS): if deposit: _balances[i] += amounts[i] else: _balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, _balances, amp) token_amount: uint256 = self.token.totalSupply() diff: uint256 = 0 if deposit: diff = D1 - D0 else: diff = D0 - D1 return diff * token_amount / D0 @public @nonreentrant('lock') def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256): # Amounts is amounts of c-tokens assert not self.is_killed use_lending: bool[N_COINS] = USE_LENDING fees: uint256[N_COINS] = ZEROS _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _admin_fee: uint256 = self.admin_fee amp: uint256 = self._A() token_supply: uint256 = self.token.totalSupply() rates: uint256[N_COINS] = self._rates() # Initial invariant D0: uint256 = 0 old_balances: uint256[N_COINS] = self.balances if token_supply > 0: D0 = self.get_D_mem(rates, old_balances, amp) new_balances: uint256[N_COINS] = old_balances for i in range(N_COINS): if token_supply == 0: assert amounts[i] > 0 # balances store amounts of c-tokens new_balances[i] = old_balances[i] + amounts[i] # Invariant after change D1: uint256 = self.get_D_mem(rates, new_balances, amp) assert D1 > D0 # We need to recalculate the invariant accounting for fees # to calculate fair user's share D2: uint256 = D1 if token_supply > 0: # Only account for fees if we are not the first to deposit for i in range(N_COINS): ideal_balance: uint256 = D1 * old_balances[i] / D0 difference: uint256 = 0 if ideal_balance > new_balances[i]: difference = ideal_balance - new_balances[i] else: difference = new_balances[i] - ideal_balance fees[i] = _fee * difference / FEE_DENOMINATOR self.balances[i] = new_balances[i] - (fees[i] * _admin_fee / FEE_DENOMINATOR) new_balances[i] -= fees[i] D2 = self.get_D_mem(rates, new_balances, amp) else: self.balances = new_balances # Calculate, how much pool tokens to mint mint_amount: uint256 = 0 if token_supply == 0: mint_amount = D1 # Take the dust if there was any else: mint_amount = token_supply * (D2 - D0) / D0 assert mint_amount >= min_mint_amount, "Slippage screwed you" # Take coins from the sender for i in range(N_COINS): if amounts[i] > 0: assert_modifiable( cERC20(self.coins[i]).transferFrom(msg.sender, self, amounts[i])) # Mint pool tokens self.token.mint(msg.sender, mint_amount) log.AddLiquidity(msg.sender, amounts, fees, D1, token_supply + mint_amount) @private @constant def get_y(i: int128, j: int128, x: uint256, _xp: uint256[N_COINS]) -> uint256: # x in the input is converted to the same price/precision assert (i != j) and (i >= 0) and (j >= 0) and (i < N_COINS) and (j < N_COINS) amp: uint256 = self._A() D: uint256 = self.get_D(_xp, amp) c: uint256 = D S_: uint256 = 0 Ann: uint256 = amp * N_COINS _x: uint256 = 0 for _i in range(N_COINS): if _i == i: _x = x elif _i != j: _x = _xp[_i] else: continue S_ += _x c = c * D / (_x * N_COINS) c = c * D / (Ann * N_COINS) b: uint256 = S_ + D / Ann # - D y_prev: uint256 = 0 y: uint256 = D for _i in range(255): y_prev = y y = (y*y + c) / (2 * y + b - D) # Equality with the precision of 1 if y > y_prev: if y - y_prev <= 1: break else: if y_prev - y <= 1: break return y @public @constant def get_dy(i: int128, j: int128, dx: uint256) -> uint256: # dx and dy in c-units rates: uint256[N_COINS] = self._rates() xp: uint256[N_COINS] = self._xp(rates) x: uint256 = xp[i] + (dx * rates[i] / PRECISION) y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = (xp[j] - y - 1) * PRECISION / rates[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @public @constant def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256: # dx and dy in underlying units rates: uint256[N_COINS] = self._rates() xp: uint256[N_COINS] = self._xp(rates) precisions: uint256[N_COINS] = PRECISION_MUL x: uint256 = xp[i] + dx * precisions[i] y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = (xp[j] - y - 1) / precisions[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @private def _exchange(i: int128, j: int128, dx: uint256, rates: uint256[N_COINS]) -> uint256: assert not self.is_killed # dx and dy are in c-tokens old_balances: uint256[N_COINS] = self.balances xp: uint256[N_COINS] = self._xp_mem(rates, old_balances) x: uint256 = xp[i] + dx * rates[i] / PRECISION y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = xp[j] - y - 1 # -1 just in case there were some rounding errors dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR dy_admin_fee: uint256 = dy_fee * self.admin_fee / FEE_DENOMINATOR # Convert all to real units dy = (dy - dy_fee) * PRECISION / rates[j] dy_admin_fee = dy_admin_fee * PRECISION / rates[j] # Change balances exactly in same way as we change actual ERC20 coin amounts self.balances[i] = old_balances[i] + dx # When rounding errors happen, we undercharge admin fee in favor of LP self.balances[j] = old_balances[j] - dy - dy_admin_fee return dy @public @nonreentrant('lock') def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._rates() dy: uint256 = self._exchange(i, j, dx, rates) assert dy >= min_dy, "Exchange resulted in fewer coins than expected" use_lending: bool[N_COINS] = USE_LENDING assert_modifiable(cERC20(self.coins[i]).transferFrom(msg.sender, self, dx)) assert_modifiable(cERC20(self.coins[j]).transfer(msg.sender, dy)) log.TokenExchange(msg.sender, i, dx, j, dy) @public @nonreentrant('lock') def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]): total_supply: uint256 = self.token.totalSupply() amounts: uint256[N_COINS] = ZEROS fees: uint256[N_COINS] = ZEROS # Fees are unused but we've got them historically in event use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): value: uint256 = self.balances[i] * _amount / total_supply assert value >= min_amounts[i], "Withdrawal resulted in fewer coins than expected" self.balances[i] -= value amounts[i] = value assert_modifiable(cERC20(self.coins[i]).transfer(msg.sender, value)) self.token.burnFrom(msg.sender, _amount) # Will raise if not enough log.RemoveLiquidity(msg.sender, amounts, fees, total_supply - _amount) @public @nonreentrant('lock') def remove_liquidity_imbalance(amounts: uint256[N_COINS], max_burn_amount: uint256): assert not self.is_killed use_lending: bool[N_COINS] = USE_LENDING token_supply: uint256 = self.token.totalSupply() assert token_supply > 0 _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _admin_fee: uint256 = self.admin_fee rates: uint256[N_COINS] = self._rates() amp: uint256 = self._A() old_balances: uint256[N_COINS] = self.balances new_balances: uint256[N_COINS] = old_balances D0: uint256 = self.get_D_mem(rates, old_balances, amp) for i in range(N_COINS): new_balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, new_balances, amp) fees: uint256[N_COINS] = ZEROS for i in range(N_COINS): ideal_balance: uint256 = D1 * old_balances[i] / D0 difference: uint256 = 0 if ideal_balance > new_balances[i]: difference = ideal_balance - new_balances[i] else: difference = new_balances[i] - ideal_balance fees[i] = _fee * difference / FEE_DENOMINATOR self.balances[i] = new_balances[i] - (fees[i] * _admin_fee / FEE_DENOMINATOR) new_balances[i] -= fees[i] D2: uint256 = self.get_D_mem(rates, new_balances, amp) token_amount: uint256 = (D0 - D2) * token_supply / D0 + 1 assert token_amount <= max_burn_amount, "Slippage screwed you" for i in range(N_COINS): if amounts[i] > 0: assert_modifiable(cERC20(self.coins[i]).transfer(msg.sender, amounts[i])) self.token.burnFrom(msg.sender, token_amount) # Will raise if not enough log.RemoveLiquidityImbalance(msg.sender, amounts, fees, D1, token_supply - token_amount) @private @constant def get_y_D(A: uint256, i: int128, xp: uint256[N_COINS], D: uint256) -> uint256: """ Calculate x[i] if one reduces D from being calculated for xp to D Done by solving quadratic equation iteratively. x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A) x_1**2 + b*x_1 = c x_1 = (x_1**2 + c) / (2*x_1 + b) """ # x in the input is converted to the same price/precision assert (i >= 0) and (i < N_COINS) c: uint256 = D S_: uint256 = 0 Ann: uint256 = A * N_COINS _x: uint256 = 0 for _i in range(N_COINS): if _i != i: _x = xp[_i] else: continue S_ += _x c = c * D / (_x * N_COINS) c = c * D / (Ann * N_COINS) b: uint256 = S_ + D / Ann y_prev: uint256 = 0 y: uint256 = D for _i in range(255): y_prev = y y = (y*y + c) / (2 * y + b - D) # Equality with the precision of 1 if y > y_prev: if y - y_prev <= 1: break else: if y_prev - y <= 1: break return y @private @constant def _calc_withdraw_one_coin(_token_amount: uint256, i: int128, rates: uint256[N_COINS]) -> (uint256, uint256): # First, need to calculate # * Get current D # * Solve Eqn against y_i for D - _token_amount amp: uint256 = self._A() _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) precisions: uint256[N_COINS] = PRECISION_MUL total_supply: uint256 = self.token.totalSupply() xp: uint256[N_COINS] = self._xp(rates) D0: uint256 = self.get_D(xp, amp) D1: uint256 = D0 - _token_amount * D0 / total_supply xp_reduced: uint256[N_COINS] = xp new_y: uint256 = self.get_y_D(amp, i, xp, D1) dy_0: uint256 = (xp[i] - new_y) / precisions[i] # w/o fees for j in range(N_COINS): dx_expected: uint256 = 0 if j == i: dx_expected = xp[j] * D1 / D0 - new_y else: dx_expected = xp[j] - xp[j] * D1 / D0 xp_reduced[j] -= _fee * dx_expected / FEE_DENOMINATOR dy: uint256 = xp_reduced[i] - self.get_y_D(amp, i, xp_reduced, D1) dy = (dy - 1) / precisions[i] # Withdraw less to account for rounding errors return dy, dy_0 - dy @public @constant def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: rates: uint256[N_COINS] = self._rates() return self._calc_withdraw_one_coin(_token_amount, i, rates)[0] @public @nonreentrant('lock') def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256): """ Remove _amount of liquidity all in a form of coin i """ dy: uint256 = 0 dy_fee: uint256 = 0 rates: uint256[N_COINS] = self._rates() dy, dy_fee = self._calc_withdraw_one_coin(_token_amount, i, rates) assert dy >= min_amount, "Not enough coins removed" self.balances[i] -= (dy + dy_fee * self.admin_fee / FEE_DENOMINATOR) self.token.burnFrom(msg.sender, _token_amount) assert_modifiable(ERC20(self.coins[i]).transfer(msg.sender, dy)) log.RemoveLiquidityOne(msg.sender, _token_amount, dy) ### Admin functions ### @public def ramp_A(_future_A: uint256, _future_time: timestamp): assert msg.sender == self.owner assert block.timestamp >= self.initial_A_time + min_ramp_time assert _future_time >= block.timestamp + min_ramp_time _initial_A: uint256 = self._A() assert (_future_A > 0) and (_future_A < max_A) assert ((_future_A >= _initial_A) and (_future_A <= _initial_A * max_A_change)) or\ ((_future_A < _initial_A) and (_future_A * max_A_change >= _initial_A)) self.initial_A = _initial_A self.future_A = _future_A self.initial_A_time = block.timestamp self.future_A_time = _future_time log.RampA(_initial_A, _future_A, block.timestamp, _future_time) @public def stop_ramp_A(): assert msg.sender == self.owner current_A: uint256 = self._A() self.initial_A = current_A self.future_A = current_A self.initial_A_time = block.timestamp self.future_A_time = block.timestamp # now (block.timestamp < t1) is always False, so we return saved A log.StopRampA(current_A, block.timestamp) @public def commit_new_fee(new_fee: uint256, new_admin_fee: uint256): assert msg.sender == self.owner assert self.admin_actions_deadline == 0 assert new_admin_fee <= max_admin_fee assert new_fee <= max_fee _deadline: timestamp = block.timestamp + admin_actions_delay self.admin_actions_deadline = _deadline self.future_fee = new_fee self.future_admin_fee = new_admin_fee log.CommitNewFee(_deadline, new_fee, new_admin_fee) @public def apply_new_fee(): assert msg.sender == self.owner assert self.admin_actions_deadline <= block.timestamp\ and self.admin_actions_deadline > 0 self.admin_actions_deadline = 0 _fee: uint256 = self.future_fee _admin_fee: uint256 = self.future_admin_fee self.fee = _fee self.admin_fee = _admin_fee log.NewFee(_fee, _admin_fee) @public def revert_new_parameters(): assert msg.sender == self.owner self.admin_actions_deadline = 0 @public def commit_transfer_ownership(_owner: address): assert msg.sender == self.owner assert self.transfer_ownership_deadline == 0 _deadline: timestamp = block.timestamp + admin_actions_delay self.transfer_ownership_deadline = _deadline self.future_owner = _owner log.CommitNewAdmin(_deadline, _owner) @public def apply_transfer_ownership(): assert msg.sender == self.owner assert block.timestamp >= self.transfer_ownership_deadline\ and self.transfer_ownership_deadline > 0 self.transfer_ownership_deadline = 0 _owner: address = self.future_owner self.owner = _owner log.NewAdmin(_owner) @public def revert_transfer_ownership(): assert msg.sender == self.owner self.transfer_ownership_deadline = 0 @public def withdraw_admin_fees(): assert msg.sender == self.owner for i in range(N_COINS): c: address = self.coins[i] value: uint256 = cERC20(c).balanceOf(self) - self.balances[i] if value > 0: assert_modifiable(cERC20(c).transfer(msg.sender, value)) @public def kill_me(): assert msg.sender == self.owner assert self.kill_deadline > block.timestamp self.is_killed = True @public def unkill_me(): assert msg.sender == self.owner self.is_killed = False
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[3]","name":"token_amounts","indexed":false},{"type":"uint256[3]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[3]","name":"token_amounts","indexed":false},{"type":"uint256[3]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"token_amount","indexed":false},{"type":"uint256","name":"coin_amount","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[3]","name":"token_amounts","indexed":false},{"type":"uint256[3]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewFee","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewFee","inputs":[{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampA","inputs":[{"type":"uint256","name":"old_A","indexed":false},{"type":"uint256","name":"new_A","indexed":false},{"type":"uint256","name":"initial_time","indexed":false,"unit":"sec"},{"type":"uint256","name":"future_time","indexed":false,"unit":"sec"}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"t","indexed":false,"unit":"sec"}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[3]","name":"_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":5227},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1150488},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":4526955},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":6972762},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2687932},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2687745},{"name":"exchange","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":5499133},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[3]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":196975},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":6972281},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":15405},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_amount"}],"constant":false,"payable":false,"type":"function","gas":4044074},{"name":"ramp_A","outputs":[],"inputs":[{"type":"uint256","name":"_future_A"},{"type":"uint256","unit":"sec","name":"_future_time"}],"constant":false,"payable":false,"type":"function","gas":151937},{"name":"stop_ramp_A","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":148697},{"name":"commit_new_fee","outputs":[],"inputs":[{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":110521},{"name":"apply_new_fee","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":97220},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21955},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74632},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60688},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22045},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":17565},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37998},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22135},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2310},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2340},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"initial_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"initial_A_time","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321},{"name":"future_A_time","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2351},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2381},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2411},{"name":"future_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2441},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2471},{"name":"future_owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2501}]
Contract Creation Code
740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05260c06158a26101403934156100a157600080fd5b60206158a260c03960c05160205181106100ba57600080fd5b50602060206158a20160c03960c05160205181106100d757600080fd5b50602060406158a20160c03960c05160205181106100f457600080fd5b50602060606158a20160c03960c051602051811061011157600080fd5b5061020060006003818352015b6000610140610200516003811061013457600080fd5b60200201511861014357600080fd5b6000610200516003811061015657600080fd5b600160c052602060c02001555b815160010180835281141561011e575b5050600060c052602060c02061014080518255806020015160018301558060400151600283015550506101c0516006556101c0516007556101e0516002553360045542624f1a008181830110156101c957600080fd5b80820190509050600f5560006010556101a05160055561588a56600436101561000d576156a0565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610244575b61014052600954610160526007546101805261016051421015610231576006546101c0526008546101e0526101c05161018051111561018a576101c051610180516101c051808210156100fb57600080fd5b80820390509050426101e0518082101561011457600080fd5b80820390509050808202821582848304141761012f57600080fd5b80905090509050610160516101e0518082101561014b57600080fd5b80820390509050808061015d57600080fd5b82049050905081818301101561017257600080fd5b8082019050905060005260005161014051565061022c565b6101c0516101c05161018051808210156101a357600080fd5b80820390509050426101e051808210156101bc57600080fd5b8082039050905080820282158284830414176101d757600080fd5b80905090509050610160516101e051808210156101f357600080fd5b80820390509050808061020557600080fd5b8204905090508082101561021857600080fd5b808203905090506000526000516101405156505b610242565b610180516000526000516101405156505b005b63f446c1d0600051141561027957341561025d57600080fd5b600658016100a9565b610140526101405160005260206000f350005b600015610411575b610140526101606402540be40081526402540be400816020015260018160400152506101c06001815260008160200152600081604001525061022060006003818352015b670de0b6b3a7640000610240526101c061022051600381106102e657600080fd5b60200201511561038657610220516003811061030157600080fd5b600060c052602060c02001543b61031757600080fd5b610220516003811061032857600080fd5b600060c052602060c0200154301861033f57600080fd5b60206102c0600463bd6d894d6102605261027c610220516003811061036357600080fd5b600060c052602060c02001545afa61037a57600080fd5b6000506102c051610240525b610160610220516003811061039a57600080fd5b6020020180516102405180820282158284830414176103b857600080fd5b809050905090508152505b81516001018083528114156102c5575b505060606102e0525b60006102e0511115156103ee5761040a565b60206102e05103610160015160206102e051036102e0526103dc565b6101405156005b600015610528575b6101a0526101405261016052610180526101c0610140805182528060200151826020015280604001518260400152505061022060006003818352015b6101c0610220516003811061046957600080fd5b6020020151610220516003811061047f57600080fd5b600160c052602060c0200154808202821582848304141761049f57600080fd5b80905090509050670de0b6b3a764000080806104ba57600080fd5b8204905090506101c061022051600381106104d457600080fd5b60200201525b8151600101808352811415610455575b50506060610240525b60006102405111151561050557610521565b602061024051036101c0015160206102405103610240526104f3565b6101a05156005b600015610647575b610200526101405261016052610180526101a0526101c0526101e052610220610140805182528060200151826020015280604001518260400152505061028060006003818352015b610220610280516003811061058c57600080fd5b60200201516101a061028051600381106105a557600080fd5b602002015180820282158284830414176105be57600080fd5b80905090509050670de0b6b3a764000080806105d957600080fd5b82049050905061022061028051600381106105f357600080fd5b60200201525b8151600101808352811415610578575b505060606102a0525b60006102a05111151561062457610640565b60206102a05103610220015160206102a051036102a052610612565b6102005156005b600015610935575b6101c0526101405261016052610180526101a05260006101e05261022060006003818352015b602061022051026101400151610200526101e080516102005181818301101561069d57600080fd5b808201905090508152505b8151600101808352811415610675575b50506101e05115156106d35760006000526000516101c05156505b6000610260526101e051610280526101a051600380820282158284830414176106fb57600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006003818352015b602061032051026101400151610300526102e05161028051808202821582848304141761075257600080fd5b80905090509050610300516003808202821582848304141761077357600080fd5b80905090509050808061078557600080fd5b8204905090506102e0525b8151600101808352811415610726575b505061028051610260526102a0516101e05180820282158284830414176107c657600080fd5b809050905090506102e051600380820282158284830414176107e757600080fd5b809050905090508181830110156107fd57600080fd5b8082019050905061028051808202821582848304141761081c57600080fd5b809050905090506102a05160018082101561083657600080fd5b8082039050905061028051808202821582848304141761085557600080fd5b8090509050905060046102e051808202821582848304141761087657600080fd5b8090509050905081818301101561088c57600080fd5b80820190509050808061089e57600080fd5b82049050905061028052610260516102805111156108e55760016102805161026051808210156108cd57600080fd5b808203905090501115156108e057610921565b610910565b60016102605161028051808210156108fc57600080fd5b8082039050905011151561090f57610921565b5b5b8151600101808352811415610712575b5050610280516000526000516101c0515650005b600015610add575b610220526101405261016052610180526101a0526101c0526101e05261020052610140610580525b6105805151602061058051016105805261058061058051101561098757610965565b633a8da8986105a0526105c06101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156109bd5761099b565b6368a4db616104005261042061014080518252806020015182602001528060400151826040015250506104806101a080518252806020015182602001528060400151826040015250506104c0516104a0516104805161046051610440516104205160065801610530565b6105205261054052610560526103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515610a5e57610a3b565b6105208051825280602001518260200152806040015182604001525050610200516106205261062051610600516105e0516105c0516006580161064f565b61068052610560610580525b6105805152602061058051036105805261014061058051101515610acb57610aa8565b61068051600052600051610220515650005b63bb7b8b806000511415610d9b573415610af657600080fd5b610140610660525b61066051516020610660510161066052610660610660511015610b2057610afe565b633a8da898610680526106a06101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610b5657610b34565b637aca288a61050052610520610140610460525b61046051516020610460510161046052610460610460511015610b8c57610b6a565b60065801610281565b610480526104a0526104c052610440610460525b6104605152602061046051036104605261014061046051101515610bcc57610ba9565b610480805182528060200151826020015280604001518260400152505061056051610540516105205160065801610419565b6105c0526105e052610600526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610c3557610c12565b6105c08051825280602001518260200152806040015182604001525050610140610620525b61062051516020610620510161062052610620610620511015610c7c57610c5a565b600658016100a9565b61064052610600610620525b6106205152602061062051036106205261014061062051101515610cb457610c91565b6106405161070052610700516106e0516106c0516106a0516006580161064f565b61076052610640610660525b6106605152602061066051036106605261014061066051101515610d0457610ce1565b61076051610140526005543b610d1957600080fd5b6005543018610d2757600080fd5b602061080060046318160ddd6107a0526107bc6005545afa610d4857600080fd5b600050610800516107805261014051670de0b6b3a76400008082028215828483041417610d7457600080fd5b80905090509050610780518080610d8a57600080fd5b82049050905060005260206000f350005b633883e1196000511415611218573415610db457600080fd5b60643560028110610dc457600080fd5b5061014060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506101a06101405161016051610180516101a0516101c0516101e05160065801610281565b6102205261024052610260526101e0526101c0526101a05261018052610160526101405261022080518252806020015182602001528060400151826040015250506101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015610e8b57610e69565b600658016100a9565b6102c0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515610ec357610ea0565b6102c05161028052610140610300525b61030051516020610300510161030052610300610300511015610ef557610ed3565b63d564a75f610320526103406101a080518252806020015182602001528060400151826040015250506103a061014080518252806020015182602001528060400151826040015250506102805161040052610400516103e0516103c0516103a0516103805161036051610340516006580161093d565b610460526102e0610300525b6103005152602061030051036103005261014061030051101515610f9a57610f77565b610460516102e05261048060006003818352015b60643515611006576101406104805160038110610fca57600080fd5b60200201805160046104805160038110610fe357600080fd5b6020020135818183011015610ff757600080fd5b80820190509050815250611050565b610140610480516003811061101a57600080fd5b6020020180516004610480516003811061103357600080fd5b60200201358082101561104557600080fd5b808203905090508152505b5b8151600101808352811415610fae575b50506101406104c0525b6104c0515160206104c051016104c0526104c06104c051101561108d5761106b565b63d564a75f6104e0526105006101a080518252806020015182602001528060400151826040015250506105606101408051825280602001518260200152806040015182604001525050610280516105c0526105c0516105a05161058051610560516105405161052051610500516006580161093d565b610620526104a06104c0525b6104c0515260206104c051036104c0526101406104c0511015156111325761110f565b610620516104a0526005543b61114757600080fd5b600554301861115557600080fd5b60206106c060046318160ddd6106605261067c6005545afa61117657600080fd5b6000506106c0516106405260006106e052606435156111b4576104a0516102e051808210156111a457600080fd5b808203905090506106e0526111d5565b6102e0516104a051808210156111c957600080fd5b808203905090506106e0525b6106e0516106405180820282158284830414176111f157600080fd5b809050905090506102e051808061120757600080fd5b82049050905060005260206000f350005b634515cef36000511415611cb45762ffffff541561123557600080fd5b600162ffffff55341561124757600080fd5b6010541561125457600080fd5b610140600181526000816020015260008160400152506101a0600081526000816020015260008160400152506002546003808202821582848304141761129957600080fd5b80905090509050600880806112ad57600080fd5b82049050905061020052600354610220526101405161016051610180516101a0516101c0516101e051610200516102205161024051600658016100a9565b610280526102405261022052610200526101e0526101c0526101a05261018052610160526101405261028051610240526005543b61132857600080fd5b600554301861133657600080fd5b602061032060046318160ddd6102c0526102dc6005545afa61135757600080fd5b600050610320516102a0526103406101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561138f5761136d565b60065801610281565b6103c0526103e052610400526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156113cf576113ac565b6103c0805182528060200151826020015280604001518260400152505060006104205261044060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c02001548260400152505060006102a051111561150d576101406104a0525b6104a0515160206104a051016104a0526104a06104a051101561145f5761143d565b63d564a75f6104c0526104e061034080518252806020015182602001528060400151826040015250506105406104408051825280602001518260200152806040015182604001525050610240516105a0526105a05161058051610560516105405161052051610500516104e0516006580161093d565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a051101515611504576114e1565b61060051610420525b610620610440805182528060200151826020015280604001518260400152505061068060006003818352015b6102a05115156115685760006004610680516003811061155857600080fd5b60200201351161156757600080fd5b5b610440610680516003811061157c57600080fd5b60200201516004610680516003811061159457600080fd5b60200201358181830110156115a857600080fd5b8082019050905061062061068051600381106115c357600080fd5b60200201525b8151600101808352811415611539575b50506101406106c0525b6106c0515160206106c051016106c0526106c06106c0511015611605576115e3565b63d564a75f6106e05261070061034080518252806020015182602001528060400151826040015250506107606106208051825280602001518260200152806040015182604001525050610240516107c0526107c0516107a05161078051610760516107405161072051610700516006580161093d565b610820526106a06106c0525b6106c0515260206106c051036106c0526101406106c0511015156116aa57611687565b610820516106a052610420516106a051116116c457600080fd5b6106a0516108405260006102a05111156119f35761086060006003818352015b6106a05161044061086051600381106116fc57600080fd5b6020020151808202821582848304141761171557600080fd5b8090509050905061042051808061172b57600080fd5b8204905090506108805260006108a052610620610860516003811061174f57600080fd5b60200201516108805111156117985761088051610620610860516003811061177657600080fd5b60200201518082101561178857600080fd5b808203905090506108a0526117ce565b61062061086051600381106117ac57600080fd5b602002015161088051808210156117c257600080fd5b808203905090506108a0525b610200516108a05180820282158284830414176117ea57600080fd5b809050905090506402540be400808061180257600080fd5b8204905090506101a0610860516003811061181c57600080fd5b6020020152610620610860516003811061183557600080fd5b60200201516101a0610860516003811061184e57600080fd5b602002015161022051808202821582848304141761186b57600080fd5b809050905090506402540be400808061188357600080fd5b8204905090508082101561189657600080fd5b8082039050905061086051600381106118ae57600080fd5b600160c052602060c020015561062061086051600381106118ce57600080fd5b6020020180516101a061086051600381106118e857600080fd5b6020020151808210156118fa57600080fd5b808203905090508152505b81516001018083528114156116e4575b50506101406108c0525b6108c0515160206108c051016108c0526108606108c05110156119415761191f565b63d564a75f6108e05261090061034080518252806020015182602001528060400151826040015250506109606106208051825280602001518260200152806040015182604001525050610240516109c0526109c0516109a05161098051610960516109405161092051610900516006580161093d565b610a20526108406108c0525b6108c0515260206108c051036108c0526101406108c0511015156119e6576119c3565b610a205161084052611a1b565b600160c052602060c02061062080518255806020015160018301558060400151600283015550505b6000610a40526102a0511515611a38576106a051610a4052611a8d565b6102a051610840516104205180821015611a5157600080fd5b808203905090508082028215828483041417611a6c57600080fd5b80905090509050610420518080611a8257600080fd5b820490509050610a40525b6308c379a0610a60526020610a80526014610aa0527f536c697070616765207363726577656420796f75000000000000000000000000610ac052610aa050606435610a40511015611adf576084610a7cfd5b610b0060006003818352015b60006004610b005160038110611b0057600080fd5b60200201351115611bce57610b005160038110611b1c57600080fd5b600060c052602060c02001543b611b3257600080fd5b610b005160038110611b4357600080fd5b600060c052602060c02001543018611b5a57600080fd5b6020610be060646323b872dd610b205233610b405230610b60526004610b005160038110611b8757600080fd5b6020020135610b8052610b3c6000610b005160038110611ba657600080fd5b600060c052602060c02001545af1611bbd57600080fd5b600050610be051611bcd57600080fd5b5b5b8151600101808352811415611aeb575b50506005543b611bee57600080fd5b6005543018611bfc57600080fd5b6000600060446340c10f19610c005233610c2052610a4051610c4052610c1c60006005545af1611c2b57600080fd5b600435610ca052602435610cc052604435610ce0526101a051610d00526101c051610d20526101e051610d40526106a051610d60526102a051610a4051818183011015611c7757600080fd5b80820190509050610d8052337f423f6495a08fc652425cf4ed0d1f9e37e571d9b9529b1c1c23cce780b2e7df0d610100610ca0a2600062ffffff55005b600015612115575b610200526101405261016052610180526101a0526101c0526101e0526000610140511215610160516101405114151660006101605112151660036101405112166003610160511216611d0d57600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b6102605261022052610200526101e0526101c0526101a05261018052610160526101405261026051610220526101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015611d8c57611d6a565b633a8da8986102c0526102e06101a0805182528060200151826020015280604001518260400152505061022051610340526103405161032051610300516102e0516006580161064f565b6103a0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515611e0557611de2565b6103a05161028052610280516103c05260006103e0526102205160038082028215828483041417611e3557600080fd5b809050905090506104005260006104205261044060006003818352015b61014051610440511415611e6d576101805161042052611ea3565b61016051610440511815611e9d576101a06104405160038110611e8f57600080fd5b602002015161042052611ea2565b611f1f565b5b6103e0805161042051818183011015611ebb57600080fd5b808201905090508152506103c051610280518082028215828483041417611ee157600080fd5b809050905090506104205160038082028215828483041417611f0257600080fd5b809050905090508080611f1457600080fd5b8204905090506103c0525b8151600101808352811415611e52575b50506103c051610280518082028215828483041417611f4d57600080fd5b809050905090506104005160038082028215828483041417611f6e57600080fd5b809050905090508080611f8057600080fd5b8204905090506103c0526103e05161028051610400518080611fa157600080fd5b820490509050818183011015611fb657600080fd5b8082019050905061046052600061048052610280516104a0526104c0600060ff818352015b6104a051610480526104a0516104a0518082028215828483041417611fff57600080fd5b809050905090506103c05181818301101561201957600080fd5b8082019050905060026104a051808202821582848304141761203a57600080fd5b809050905090506104605181818301101561205457600080fd5b80820190509050610280518082101561206c57600080fd5b80820390509050808061207e57600080fd5b8204905090506104a052610480516104a05111156120c55760016104a05161048051808210156120ad57600080fd5b808203905090501115156120c057612101565b6120f0565b6001610480516104a051808210156120dc57600080fd5b808203905090501115156120ef57612101565b5b5b8151600101808352811415611fdb575b50506104a051600052600051610200515650005b635e0d443f60005114156124bd57341561212e57600080fd5b6060516004358060405190131561214457600080fd5b809190121561215257600080fd5b506060516024358060405190131561216957600080fd5b809190121561217757600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610419565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506102206004356003811061229257600080fd5b6020020151604435610140600435600381106122ad57600080fd5b602002015180820282158284830414176122c657600080fd5b80905090509050670de0b6b3a764000080806122e157600080fd5b8204905090508181830110156122f657600080fd5b808201905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561232b57612309565b63554abe286104205260043561044052602435610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611cbc565b610540526103e0610400525b61040051526020610400510361040052610140610400511015156123ba57612397565b610540516103e052610220602435600381106123d557600080fd5b60200201516103e051808210156123eb57600080fd5b8082039050905060018082101561240157600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761242557600080fd5b809050905090506101406024356003811061243f57600080fd5b6020020151808061244f57600080fd5b8204905090506105605260025461056051808202821582848304141761247457600080fd5b809050905090506402540be400808061248c57600080fd5b820490509050610580526105605161058051808210156124ab57600080fd5b8082039050905060005260206000f350005b6307211ef760005114156128455734156124d657600080fd5b606051600435806040519013156124ec57600080fd5b80919012156124fa57600080fd5b506060516024358060405190131561251157600080fd5b809190121561251f57600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610419565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506103c06402540be40081526402540be400816020015260018160400152506102206004356003811061265857600080fd5b60200201516044356103c06004356003811061267357600080fd5b6020020151808202821582848304141761268c57600080fd5b809050905090508181830110156126a257600080fd5b8082019050905061042052610140610460525b610460515160206104605101610460526104606104605110156126d7576126b5565b63554abe28610480526004356104a0526024356104c052610420516104e05261050061022080518252806020015182602001528060400151826040015250506105405161052051610500516104e0516104c0516104a05160065801611cbc565b6105a052610440610460525b610460515260206104605103610460526101406104605110151561276657612743565b6105a051610440526102206024356003811061278157600080fd5b6020020151610440518082101561279757600080fd5b808203905090506001808210156127ad57600080fd5b808203905090506103c0602435600381106127c757600080fd5b602002015180806127d757600080fd5b8204905090506105c0526002546105c05180820282158284830414176127fc57600080fd5b809050905090506402540be400808061281457600080fd5b8204905090506105e0526105c0516105e0518082101561283357600080fd5b8082039050905060005260206000f350005b600015612d31575b610200526101405261016052610180526101a0526101c0526101e0526010541561287657600080fd5b61022060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506102806101406102e0525b6102e0515160206102e051016102e0526102e06102e05110156128da576128b8565b6368a4db61610300526103206101a0805182528060200151826020015280604001518260400152505061038061022080518252806020015182602001528060400151826040015250506103c0516103a0516103805161036051610340516103205160065801610530565b6104205261044052610460526102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561297b57612958565b610420805182528060200151826020015280604001518260400152505061028061014051600381106129ac57600080fd5b6020020151610180516101a061014051600381106129c957600080fd5b602002015180820282158284830414176129e257600080fd5b80905090509050670de0b6b3a764000080806129fd57600080fd5b820490509050818183011015612a1257600080fd5b80820190509050610480526101406104c0525b6104c0515160206104c051016104c0526104c06104c0511015612a4757612a25565b63554abe286104e05261014051610500526101605161052052610480516105405261056061028080518252806020015182602001528060400151826040015250506105a051610580516105605161054051610520516105005160065801611cbc565b610600526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515612ad857612ab5565b610600516104a0526102806101605160038110612af457600080fd5b60200201516104a05180821015612b0a57600080fd5b80820390509050600180821015612b2057600080fd5b8082039050905061062052610620516002548082028215828483041417612b4657600080fd5b809050905090506402540be4008080612b5e57600080fd5b82049050905061064052610640516003548082028215828483041417612b8357600080fd5b809050905090506402540be4008080612b9b57600080fd5b82049050905061066052610620516106405180821015612bba57600080fd5b80820390509050670de0b6b3a76400008082028215828483041417612bde57600080fd5b809050905090506101a06101605160038110612bf957600080fd5b60200201518080612c0957600080fd5b8204905090506106205261066051670de0b6b3a76400008082028215828483041417612c3457600080fd5b809050905090506101a06101605160038110612c4f57600080fd5b60200201518080612c5f57600080fd5b820490509050610660526102206101405160038110612c7d57600080fd5b602002015161018051818183011015612c9557600080fd5b808201905090506101405160038110612cad57600080fd5b600160c052602060c02001556102206101605160038110612ccd57600080fd5b60200201516106205180821015612ce357600080fd5b808203905090506106605180821015612cfb57600080fd5b808203905090506101605160038110612d1357600080fd5b600160c052602060c020015561062051600052600051610200515650005b633df0212460005114156130cd5762ffffff5415612d4e57600080fd5b600162ffffff553415612d6057600080fd5b60605160043580604051901315612d7657600080fd5b8091901215612d8457600080fd5b5060605160243580604051901315612d9b57600080fd5b8091901215612da957600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e051610200516102205163cf6eee7661026052600435610280526024356102a0526044356102c0526102e0610140805182528060200151826020015280604001518260400152505061032051610300516102e0516102c0516102a051610280516006580161284d565b6103805261022052610200526101e0526101c0526101a05261018052610160526101405261038051610220526308c379a06103a05260206103c052602e6103e0527f45786368616e676520726573756c74656420696e20666577657220636f696e73610400527f207468616e206578706563746564000000000000000000000000000000000000610420526103e050606435610220511015612f195760a46103bcfd5b6104606001815260008160200152600081604001525060043560038110612f3f57600080fd5b600060c052602060c02001543b612f5557600080fd5b60043560038110612f6557600080fd5b600060c052602060c02001543018612f7c57600080fd5b602061058060646323b872dd6104c052336104e0523061050052604435610520526104dc600060043560038110612fb257600080fd5b600060c052602060c02001545af1612fc957600080fd5b60005061058051612fd957600080fd5b60243560038110612fe957600080fd5b600060c052602060c02001543b612fff57600080fd5b6024356003811061300f57600080fd5b600060c052602060c0200154301861302657600080fd5b6020610640604463a9059cbb6105a052336105c052610220516105e0526105bc60006024356003811061305857600080fd5b600060c052602060c02001545af161306f57600080fd5b6000506106405161307f57600080fd5b60043561066052604435610680526024356106a052610220516106c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610660a2600062ffffff55005b63ecb586a5600051141561344c5762ffffff54156130ea57600080fd5b600162ffffff5534156130fc57600080fd5b6005543b61310957600080fd5b600554301861311757600080fd5b60206101c060046318160ddd6101605261017c6005545afa61313857600080fd5b6000506101c051610140526101e060008152600081602001526000816040015250610240600081526000816020015260008160400152506102a06001815260008160200152600081604001525061030060006003818352015b61030051600381106131a257600080fd5b600160c052602060c020015460043580820282158284830414176131c557600080fd5b809050905090506101405180806131db57600080fd5b820490509050610320526308c379a0610340526020610360526030610380527f5769746864726177616c20726573756c74656420696e20666577657220636f696103a0527f6e73207468616e206578706563746564000000000000000000000000000000006103c052610380506024610300516003811061325b57600080fd5b60200201356103205110156132715760a461035cfd5b610300516003811061328257600080fd5b600160c052602060c02001805461032051808210156132a057600080fd5b80820390509050815550610320516101e061030051600381106132c257600080fd5b602002015261030051600381106132d857600080fd5b600060c052602060c02001543b6132ee57600080fd5b61030051600381106132ff57600080fd5b600060c052602060c0200154301861331657600080fd5b60206104a0604463a9059cbb610400523361042052610320516104405261041c6000610300516003811061334957600080fd5b600060c052602060c02001545af161336057600080fd5b6000506104a05161337057600080fd5b5b8151600101808352811415613191575b50506005543b61339057600080fd5b600554301861339e57600080fd5b6000600060446379cc67906104c052336104e052600435610500526104dc60006005545af16133cc57600080fd5b6101e051610560526102005161058052610220516105a052610240516105c052610260516105e0526102805161060052610140516004358082101561341057600080fd5b8082039050905061062052337fa49d4cf02656aebf8c771f5a8585638a2a15ee6c97cf7205d4208ed7c1df252d60e0610560a2600062ffffff55005b639fdaea0c6000511415613e4c5762ffffff541561346957600080fd5b600162ffffff55341561347b57600080fd5b6010541561348857600080fd5b610140600181526000816020015260008160400152506005543b6134ab57600080fd5b60055430186134b957600080fd5b602061022060046318160ddd6101c0526101dc6005545afa6134da57600080fd5b600050610220516101a05260006101a051116134f557600080fd5b6002546003808202821582848304141761350e57600080fd5b809050905090506008808061352257600080fd5b82049050905061024052600354610260526102806101406102e0525b6102e0515160206102e051016102e0526102e06102e05110156135605761353e565b60065801610281565b6103005261032052610340526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156135a05761357d565b6103008051825280602001518260200152806040015182604001525050610140610380525b610380515160206103805101610380526103806103805110156135e7576135c5565b600658016100a9565b6103a052610360610380525b610380515260206103805103610380526101406103805110151561361f576135fc565b6103a051610360526103c060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506104206103c080518252806020015182602001528060400151826040015250506101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156136a857613686565b63d564a75f6104c0526104e061028080518252806020015182602001528060400151826040015250506105406103c08051825280602001518260200152806040015182604001525050610360516105a0526105a05161058051610560516105405161052051610500516104e0516006580161093d565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561374d5761372a565b610600516104805261062060006003818352015b610420610620516003811061377557600080fd5b6020020180516004610620516003811061378e57600080fd5b6020020135808210156137a057600080fd5b808203905090508152505b8151600101808352811415613761575b5050610140610660525b610660515160206106605101610660526106606106605110156137e7576137c5565b63d564a75f610680526106a0610280805182528060200151826020015280604001518260400152505061070061042080518252806020015182602001528060400151826040015250506103605161076052610760516107405161072051610700516106e0516106c0516106a0516006580161093d565b6107c052610640610660525b610660515260206106605103610660526101406106605110151561388c57613869565b6107c051610640526107e06000815260008160200152600081604001525061084060006003818352015b610640516103c061084051600381106138ce57600080fd5b602002015180820282158284830414176138e757600080fd5b809050905090506104805180806138fd57600080fd5b82049050905061086052600061088052610420610840516003811061392157600080fd5b602002015161086051111561396a5761086051610420610840516003811061394857600080fd5b60200201518082101561395a57600080fd5b80820390509050610880526139a0565b610420610840516003811061397e57600080fd5b6020020151610860518082101561399457600080fd5b80820390509050610880525b610240516108805180820282158284830414176139bc57600080fd5b809050905090506402540be40080806139d457600080fd5b8204905090506107e061084051600381106139ee57600080fd5b60200201526104206108405160038110613a0757600080fd5b60200201516107e06108405160038110613a2057600080fd5b6020020151610260518082028215828483041417613a3d57600080fd5b809050905090506402540be4008080613a5557600080fd5b82049050905080821015613a6857600080fd5b808203905090506108405160038110613a8057600080fd5b600160c052602060c02001556104206108405160038110613aa057600080fd5b6020020180516107e06108405160038110613aba57600080fd5b602002015180821015613acc57600080fd5b808203905090508152505b81516001018083528114156138b6575b50506101406108c0525b6108c0515160206108c051016108c0526108c06108c0511015613b1357613af1565b63d564a75f6108e05261090061028080518252806020015182602001528060400151826040015250506109606104208051825280602001518260200152806040015182604001525050610360516109c0526109c0516109a05161098051610960516109405161092051610900516006580161093d565b610a20526108a06108c0525b6108c0515260206108c051036108c0526101406108c051101515613bb857613b95565b610a20516108a052610480516108a05180821015613bd557600080fd5b808203905090506101a0518082028215828483041417613bf457600080fd5b80905090509050610480518080613c0a57600080fd5b8204905090506001818183011015613c2157600080fd5b80820190509050610a40526308c379a0610a60526020610a80526014610aa0527f536c697070616765207363726577656420796f75000000000000000000000000610ac052610aa050606435610a40511115613c7e576084610a7cfd5b610b0060006003818352015b60006004610b005160038110613c9f57600080fd5b60200201351115613d6857610b005160038110613cbb57600080fd5b600060c052602060c02001543b613cd157600080fd5b610b005160038110613ce257600080fd5b600060c052602060c02001543018613cf957600080fd5b6020610bc0604463a9059cbb610b205233610b40526004610b005160038110613d2157600080fd5b6020020135610b6052610b3c6000610b005160038110613d4057600080fd5b600060c052602060c02001545af1613d5757600080fd5b600050610bc051613d6757600080fd5b5b5b8151600101808352811415613c8a575b50506005543b613d8857600080fd5b6005543018613d9657600080fd5b6000600060446379cc6790610be05233610c0052610a4051610c2052610bfc60006005545af1613dc557600080fd5b600435610c8052602435610ca052604435610cc0526107e051610ce05261080051610d005261082051610d205261064051610d40526101a051610a405180821015613e0f57600080fd5b80820390509050610d6052337f173599dbf9c6ca6f7c3b590df07ae98a45d74ff54065505141e7de6c46a624c2610100610c80a2600062ffffff55005b600015614175575b610200526101405261016052610180526101a0526101c0526101e05260036101605112600061016051121516613e8957600080fd5b6101e051610220526000610240526101405160038082028215828483041417613eb157600080fd5b80905090509050610260526000610280526102a060006003818352015b610160516102a0511815613efe576101806102a05160038110613ef057600080fd5b602002015161028052613f03565b613f7f565b610240805161028051818183011015613f1b57600080fd5b80820190509050815250610220516101e0518082028215828483041417613f4157600080fd5b809050905090506102805160038082028215828483041417613f6257600080fd5b809050905090508080613f7457600080fd5b820490509050610220525b8151600101808352811415613ece575b5050610220516101e0518082028215828483041417613fad57600080fd5b809050905090506102605160038082028215828483041417613fce57600080fd5b809050905090508080613fe057600080fd5b82049050905061022052610240516101e05161026051808061400157600080fd5b82049050905081818301101561401657600080fd5b808201905090506102c05260006102e0526101e05161030052610320600060ff818352015b610300516102e0526103005161030051808202821582848304141761405f57600080fd5b809050905090506102205181818301101561407957600080fd5b80820190509050600261030051808202821582848304141761409a57600080fd5b809050905090506102c0518181830110156140b457600080fd5b808201905090506101e051808210156140cc57600080fd5b8082039050905080806140de57600080fd5b820490509050610300526102e051610300511115614125576001610300516102e0518082101561410d57600080fd5b8082039050905011151561412057614161565b614150565b60016102e051610300518082101561413c57600080fd5b8082039050905011151561414f57614161565b5b5b815160010180835281141561403b575b505061030051600052600051610200515650005b6000156148be575b6101e0526101405261016052610180526101a0526101c0526101405161016051610180516101a0516101c0516101e05161020051600658016100a9565b61024052610200526101e0526101c0526101a0526101805261016052610140526102405161020052600254600380820282158284830414176141fb57600080fd5b809050905090506008808061420f57600080fd5b820490509050610260526102806402540be40081526402540be400816020015260018160400152506005543b61424457600080fd5b600554301861425257600080fd5b602061036060046318160ddd6103005261031c6005545afa61427357600080fd5b600050610360516102e0526103806101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156142ab57614289565b637aca288a61040052610420610180805182528060200151826020015280604001518260400152505061046051610440516104205160065801610419565b6104c0526104e052610500526103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515614320576142fd565b6104c08051825280602001518260200152806040015182604001525050610140610540525b6105405151602061054051016105405261054061054051101561436757614345565b633a8da898610560526105806103808051825280602001518260200152806040015182604001525050610200516105e0526105e0516105c0516105a051610580516006580161064f565b61064052610520610540525b61054051526020610540510361054052610140610540511015156143e0576143bd565b6106405161052052610520516101405161052051808202821582848304141761440857600080fd5b809050905090506102e051808061441e57600080fd5b8204905090508082101561443157600080fd5b80820390509050610660526106806103808051825280602001518260200152806040015182604001525050610140610700525b6107005151602061070051016107005261070061070051101561448657614464565b63da97dfe161072052610200516107405261016051610760526107806103808051825280602001518260200152806040015182604001525050610660516107e0526107e0516107c0516107a05161078051610760516107405160065801613e54565b610840526106e0610700525b6107005152602061070051036107005261014061070051101515614517576144f4565b610840516106e052610380610160516003811061453357600080fd5b60200201516106e0518082101561454957600080fd5b80820390509050610280610160516003811061456457600080fd5b6020020151808061457457600080fd5b8204905090506108605261088060006003818352015b60006108a0526101605161088051141561460c5761038061088051600381106145b257600080fd5b60200201516106605180820282158284830414176145cf57600080fd5b809050905090506105205180806145e557600080fd5b8204905090506106e051808210156145fc57600080fd5b808203905090506108a05261468b565b610380610880516003811061462057600080fd5b6020020151610380610880516003811061463957600080fd5b602002015161066051808202821582848304141761465657600080fd5b8090509050905061052051808061466c57600080fd5b8204905090508082101561467f57600080fd5b808203905090506108a0525b610680610880516003811061469f57600080fd5b602002018051610260516108a05180820282158284830414176146c157600080fd5b809050905090506402540be40080806146d957600080fd5b820490509050808210156146ec57600080fd5b808203905090508152505b815160010180835281141561458a575b5050610680610160516003811061471d57600080fd5b60200201516101406108e0525b6108e0515160206108e051016108e0526108e06108e051101561474c5761472a565b63da97dfe161090052610200516109205261016051610940526109606106808051825280602001518260200152806040015182604001525050610660516109c0526109c0516109a0516109805161096051610940516109205160065801613e54565b610a20526108c06108e0525b6108e0515260206108e051036108e0526101406108e0511015156147dd576147ba565b610a2051808210156147ee57600080fd5b808203905090506108c0526108c05160018082101561480c57600080fd5b80820390509050610280610160516003811061482757600080fd5b6020020151808061483757600080fd5b8204905090506108c052610a408080806108c051815250506020810190508080610860516108c0518082101561486c57600080fd5b808203905090508152505060409050905060c05260c051610a80525b6000610a805111151561489a576148b6565b6020610a805103610a4001516020610a805103610a8052614888565b6101e0515650005b63cc2b27d760005114156149ec5734156148d757600080fd5b606051602435806040519013156148ed57600080fd5b80919012156148fb57600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e0516102005163f7d59a096102405260043561026052602435610280526102a061014080518252806020015182602001528060400151826040015250506102e0516102c0516102a05161028051610260516006580161417d565b6103405261036052610200526101e0526101c0526101a0526101805261016052610140526103405160005260206000f350005b631a4d01d26000511415614d685762ffffff5415614a0957600080fd5b600162ffffff553415614a1b57600080fd5b60605160243580604051901315614a3157600080fd5b8091901215614a3f57600080fd5b506000610140526000610160526101806101405161016051610180516101a0516101c05160065801610281565b6102005261022052610240526101c0526101a05261018052610160526101405261020080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405163f7d59a09610280526004356102a0526024356102c0526102e0610180805182528060200151826020015280604001518260400152505061032051610300516102e0516102c0516102a0516006580161417d565b610380526103a0526102405261022052610200526101e0526101c0526101a052610180526101605261014052610380805161014052602081015161016052506308c379a06103c05260206103e0526018610400527f4e6f7420656e6f75676820636f696e732072656d6f76656400000000000000006104205261040050604435610140511015614bb25760846103dcfd5b60243560038110614bc257600080fd5b600160c052602060c02001805461014051610160516003548082028215828483041417614bee57600080fd5b809050905090506402540be4008080614c0657600080fd5b820490509050818183011015614c1b57600080fd5b8082019050905080821015614c2f57600080fd5b808203905090508155506005543b614c4657600080fd5b6005543018614c5457600080fd5b6000600060446379cc67906104605233610480526004356104a05261047c60006005545af1614c8257600080fd5b60243560038110614c9257600080fd5b600060c052602060c02001543b614ca857600080fd5b60243560038110614cb857600080fd5b600060c052602060c02001543018614ccf57600080fd5b60206105a0604463a9059cbb610500523361052052610140516105405261051c600060243560038110614d0157600080fd5b600060c052602060c02001545af1614d1857600080fd5b6000506105a051614d2857600080fd5b6004356105c052610140516105e052337f9e96dd3b997a2a257eec4df9bb6eaf626e206df5f543bd963682d143300be31060406105c0a2600062ffffff55005b633c157e646000511415614eda573415614d8157600080fd5b6004543314614d8f57600080fd5b60085462015180818183011015614da557600080fd5b80820190509050421015614db857600080fd5b4262015180818183011015614dcc57600080fd5b808201905090506024351015614de157600080fd5b61014051600658016100a9565b61018052610140526101805161014052620f42406004351060006004351116614e1657600080fd5b61014051600435600a8082028215828483041417614e3357600080fd5b80905090509050101561014051600435101661014051600a8082028215828483041417614e5f57600080fd5b8090509050905060043511156101405160043510151617614e7f57600080fd5b6101405160065560043560075542600855602435600955610140516101a0526004356101c052426101e052602435610200527fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c25460806101a0a1005b63551a65886000511415614f6a573415614ef357600080fd5b6004543314614f0157600080fd5b61014051600658016100a9565b6101805261014052610180516101405261014051600655610140516007554260085542600955610140516101a052426101c0527f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc20193860406101a0a1005b635b5a14676000511415615033573415614f8357600080fd5b6004543314614f9157600080fd5b600a5415614f9e57600080fd5b64012a05f2006024351115614fb257600080fd5b64012a05f2006004351115614fc657600080fd5b426203f480818183011015614fda57600080fd5b808201905090506101405261014051600a55600435600c55602435600d556004356101605260243561018052610140517f351fc5da2fbf480f2225debf3664a4bc90fa9923743aad58b4603f648e931fe06040610160a2005b634f12fe9760005114156150ca57341561504c57600080fd5b600454331461505a57600080fd5b6000600a541142600a5411151661507057600080fd5b6000600a55600c5461014052600d546101605261014051600255610160516003556101405161018052610160516101a0527fbe12859b636aed607d5230b2cc2711f68d70e51060e6cca1f575ef5d2fcc95d16040610180a1005b63226840fb60005114156150f85734156150e357600080fd5b60045433146150f157600080fd5b6000600a55005b636b441a40600051141561519957341561511157600080fd5b600435602051811061512257600080fd5b50600454331461513157600080fd5b600b541561513e57600080fd5b426203f48081818301101561515257600080fd5b808201905090506101405261014051600b55600435600e55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156152155734156151b257600080fd5b60045433146151c057600080fd5b6000600b5411600b54421015166151d657600080fd5b6000600b55600e546101405261014051600455610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561524357341561522e57600080fd5b600454331461523c57600080fd5b6000600b55005b6330c54085600051141561539757341561525c57600080fd5b600454331461526a57600080fd5b61014060006003818352015b610140516003811061528757600080fd5b600060c052602060c020015461016052610160513b6152a557600080fd5b6101605130186152b457600080fd5b602061022060246370a082316101a052306101c0526101bc610160515afa6152db57600080fd5b6000506102205161014051600381106152f357600080fd5b600160c052602060c02001548082101561530c57600080fd5b8082039050905061018052600061018051111561538257610160513b61533157600080fd5b61016051301861534057600080fd5b60206102e0604463a9059cbb610240523361026052610180516102805261025c6000610160515af161537157600080fd5b6000506102e05161538157600080fd5b5b5b8151600101808352811415615276575b5050005b63e369885360005114156153d35734156153b057600080fd5b60045433146153be57600080fd5b42600f54116153cc57600080fd5b6001601055005b633046f97260005114156154015734156153ec57600080fd5b60045433146153fa57600080fd5b6000601055005b6323746eb8600051141561546657341561541a57600080fd5b6060516004358060405190131561543057600080fd5b809190121561543e57600080fd5b506004356003811061544f57600080fd5b600060c052602060c020015460005260206000f350005b63065a80d860005114156154cb57341561547f57600080fd5b6060516004358060405190131561549557600080fd5b80919012156154a357600080fd5b50600435600381106154b457600080fd5b600160c052602060c020015460005260206000f350005b63ddca3f4360005114156154f25734156154e457600080fd5b60025460005260206000f350005b63fee3f7f9600051141561551957341561550b57600080fd5b60035460005260206000f350005b638da5cb5b600051141561554057341561553257600080fd5b60045460005260206000f350005b635409491a600051141561556757341561555957600080fd5b60065460005260206000f350005b63b4b577ad600051141561558e57341561558057600080fd5b60075460005260206000f350005b632081066c60005114156155b55734156155a757600080fd5b60085460005260206000f350005b631405228860005114156155dc5734156155ce57600080fd5b60095460005260206000f350005b63405e28f860005114156156035734156155f557600080fd5b600a5460005260206000f350005b63e0a0b586600051141561562a57341561561c57600080fd5b600b5460005260206000f350005b6358680d0b600051141561565157341561564357600080fd5b600c5460005260206000f350005b63e3824462600051141561567857341561566a57600080fd5b600d5460005260206000f350005b631ec0cdc1600051141561569f57341561569157600080fd5b600e5460005260206000f350005b5b60006000fd5b6101e461588a036101e46000396101e461588a036000f3000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6000000000000000000000000075b1bb99792c9e1041ba13afef80c91a1e70fb3000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000003d0900
Deployed Bytecode
0x600436101561000d576156a0565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610244575b61014052600954610160526007546101805261016051421015610231576006546101c0526008546101e0526101c05161018051111561018a576101c051610180516101c051808210156100fb57600080fd5b80820390509050426101e0518082101561011457600080fd5b80820390509050808202821582848304141761012f57600080fd5b80905090509050610160516101e0518082101561014b57600080fd5b80820390509050808061015d57600080fd5b82049050905081818301101561017257600080fd5b8082019050905060005260005161014051565061022c565b6101c0516101c05161018051808210156101a357600080fd5b80820390509050426101e051808210156101bc57600080fd5b8082039050905080820282158284830414176101d757600080fd5b80905090509050610160516101e051808210156101f357600080fd5b80820390509050808061020557600080fd5b8204905090508082101561021857600080fd5b808203905090506000526000516101405156505b610242565b610180516000526000516101405156505b005b63f446c1d0600051141561027957341561025d57600080fd5b600658016100a9565b610140526101405160005260206000f350005b600015610411575b610140526101606402540be40081526402540be400816020015260018160400152506101c06001815260008160200152600081604001525061022060006003818352015b670de0b6b3a7640000610240526101c061022051600381106102e657600080fd5b60200201511561038657610220516003811061030157600080fd5b600060c052602060c02001543b61031757600080fd5b610220516003811061032857600080fd5b600060c052602060c0200154301861033f57600080fd5b60206102c0600463bd6d894d6102605261027c610220516003811061036357600080fd5b600060c052602060c02001545afa61037a57600080fd5b6000506102c051610240525b610160610220516003811061039a57600080fd5b6020020180516102405180820282158284830414176103b857600080fd5b809050905090508152505b81516001018083528114156102c5575b505060606102e0525b60006102e0511115156103ee5761040a565b60206102e05103610160015160206102e051036102e0526103dc565b6101405156005b600015610528575b6101a0526101405261016052610180526101c0610140805182528060200151826020015280604001518260400152505061022060006003818352015b6101c0610220516003811061046957600080fd5b6020020151610220516003811061047f57600080fd5b600160c052602060c0200154808202821582848304141761049f57600080fd5b80905090509050670de0b6b3a764000080806104ba57600080fd5b8204905090506101c061022051600381106104d457600080fd5b60200201525b8151600101808352811415610455575b50506060610240525b60006102405111151561050557610521565b602061024051036101c0015160206102405103610240526104f3565b6101a05156005b600015610647575b610200526101405261016052610180526101a0526101c0526101e052610220610140805182528060200151826020015280604001518260400152505061028060006003818352015b610220610280516003811061058c57600080fd5b60200201516101a061028051600381106105a557600080fd5b602002015180820282158284830414176105be57600080fd5b80905090509050670de0b6b3a764000080806105d957600080fd5b82049050905061022061028051600381106105f357600080fd5b60200201525b8151600101808352811415610578575b505060606102a0525b60006102a05111151561062457610640565b60206102a05103610220015160206102a051036102a052610612565b6102005156005b600015610935575b6101c0526101405261016052610180526101a05260006101e05261022060006003818352015b602061022051026101400151610200526101e080516102005181818301101561069d57600080fd5b808201905090508152505b8151600101808352811415610675575b50506101e05115156106d35760006000526000516101c05156505b6000610260526101e051610280526101a051600380820282158284830414176106fb57600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006003818352015b602061032051026101400151610300526102e05161028051808202821582848304141761075257600080fd5b80905090509050610300516003808202821582848304141761077357600080fd5b80905090509050808061078557600080fd5b8204905090506102e0525b8151600101808352811415610726575b505061028051610260526102a0516101e05180820282158284830414176107c657600080fd5b809050905090506102e051600380820282158284830414176107e757600080fd5b809050905090508181830110156107fd57600080fd5b8082019050905061028051808202821582848304141761081c57600080fd5b809050905090506102a05160018082101561083657600080fd5b8082039050905061028051808202821582848304141761085557600080fd5b8090509050905060046102e051808202821582848304141761087657600080fd5b8090509050905081818301101561088c57600080fd5b80820190509050808061089e57600080fd5b82049050905061028052610260516102805111156108e55760016102805161026051808210156108cd57600080fd5b808203905090501115156108e057610921565b610910565b60016102605161028051808210156108fc57600080fd5b8082039050905011151561090f57610921565b5b5b8151600101808352811415610712575b5050610280516000526000516101c0515650005b600015610add575b610220526101405261016052610180526101a0526101c0526101e05261020052610140610580525b6105805151602061058051016105805261058061058051101561098757610965565b633a8da8986105a0526105c06101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156109bd5761099b565b6368a4db616104005261042061014080518252806020015182602001528060400151826040015250506104806101a080518252806020015182602001528060400151826040015250506104c0516104a0516104805161046051610440516104205160065801610530565b6105205261054052610560526103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515610a5e57610a3b565b6105208051825280602001518260200152806040015182604001525050610200516106205261062051610600516105e0516105c0516006580161064f565b61068052610560610580525b6105805152602061058051036105805261014061058051101515610acb57610aa8565b61068051600052600051610220515650005b63bb7b8b806000511415610d9b573415610af657600080fd5b610140610660525b61066051516020610660510161066052610660610660511015610b2057610afe565b633a8da898610680526106a06101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610b5657610b34565b637aca288a61050052610520610140610460525b61046051516020610460510161046052610460610460511015610b8c57610b6a565b60065801610281565b610480526104a0526104c052610440610460525b6104605152602061046051036104605261014061046051101515610bcc57610ba9565b610480805182528060200151826020015280604001518260400152505061056051610540516105205160065801610419565b6105c0526105e052610600526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610c3557610c12565b6105c08051825280602001518260200152806040015182604001525050610140610620525b61062051516020610620510161062052610620610620511015610c7c57610c5a565b600658016100a9565b61064052610600610620525b6106205152602061062051036106205261014061062051101515610cb457610c91565b6106405161070052610700516106e0516106c0516106a0516006580161064f565b61076052610640610660525b6106605152602061066051036106605261014061066051101515610d0457610ce1565b61076051610140526005543b610d1957600080fd5b6005543018610d2757600080fd5b602061080060046318160ddd6107a0526107bc6005545afa610d4857600080fd5b600050610800516107805261014051670de0b6b3a76400008082028215828483041417610d7457600080fd5b80905090509050610780518080610d8a57600080fd5b82049050905060005260206000f350005b633883e1196000511415611218573415610db457600080fd5b60643560028110610dc457600080fd5b5061014060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506101a06101405161016051610180516101a0516101c0516101e05160065801610281565b6102205261024052610260526101e0526101c0526101a05261018052610160526101405261022080518252806020015182602001528060400151826040015250506101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015610e8b57610e69565b600658016100a9565b6102c0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515610ec357610ea0565b6102c05161028052610140610300525b61030051516020610300510161030052610300610300511015610ef557610ed3565b63d564a75f610320526103406101a080518252806020015182602001528060400151826040015250506103a061014080518252806020015182602001528060400151826040015250506102805161040052610400516103e0516103c0516103a0516103805161036051610340516006580161093d565b610460526102e0610300525b6103005152602061030051036103005261014061030051101515610f9a57610f77565b610460516102e05261048060006003818352015b60643515611006576101406104805160038110610fca57600080fd5b60200201805160046104805160038110610fe357600080fd5b6020020135818183011015610ff757600080fd5b80820190509050815250611050565b610140610480516003811061101a57600080fd5b6020020180516004610480516003811061103357600080fd5b60200201358082101561104557600080fd5b808203905090508152505b5b8151600101808352811415610fae575b50506101406104c0525b6104c0515160206104c051016104c0526104c06104c051101561108d5761106b565b63d564a75f6104e0526105006101a080518252806020015182602001528060400151826040015250506105606101408051825280602001518260200152806040015182604001525050610280516105c0526105c0516105a05161058051610560516105405161052051610500516006580161093d565b610620526104a06104c0525b6104c0515260206104c051036104c0526101406104c0511015156111325761110f565b610620516104a0526005543b61114757600080fd5b600554301861115557600080fd5b60206106c060046318160ddd6106605261067c6005545afa61117657600080fd5b6000506106c0516106405260006106e052606435156111b4576104a0516102e051808210156111a457600080fd5b808203905090506106e0526111d5565b6102e0516104a051808210156111c957600080fd5b808203905090506106e0525b6106e0516106405180820282158284830414176111f157600080fd5b809050905090506102e051808061120757600080fd5b82049050905060005260206000f350005b634515cef36000511415611cb45762ffffff541561123557600080fd5b600162ffffff55341561124757600080fd5b6010541561125457600080fd5b610140600181526000816020015260008160400152506101a0600081526000816020015260008160400152506002546003808202821582848304141761129957600080fd5b80905090509050600880806112ad57600080fd5b82049050905061020052600354610220526101405161016051610180516101a0516101c0516101e051610200516102205161024051600658016100a9565b610280526102405261022052610200526101e0526101c0526101a05261018052610160526101405261028051610240526005543b61132857600080fd5b600554301861133657600080fd5b602061032060046318160ddd6102c0526102dc6005545afa61135757600080fd5b600050610320516102a0526103406101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561138f5761136d565b60065801610281565b6103c0526103e052610400526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156113cf576113ac565b6103c0805182528060200151826020015280604001518260400152505060006104205261044060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c02001548260400152505060006102a051111561150d576101406104a0525b6104a0515160206104a051016104a0526104a06104a051101561145f5761143d565b63d564a75f6104c0526104e061034080518252806020015182602001528060400151826040015250506105406104408051825280602001518260200152806040015182604001525050610240516105a0526105a05161058051610560516105405161052051610500516104e0516006580161093d565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a051101515611504576114e1565b61060051610420525b610620610440805182528060200151826020015280604001518260400152505061068060006003818352015b6102a05115156115685760006004610680516003811061155857600080fd5b60200201351161156757600080fd5b5b610440610680516003811061157c57600080fd5b60200201516004610680516003811061159457600080fd5b60200201358181830110156115a857600080fd5b8082019050905061062061068051600381106115c357600080fd5b60200201525b8151600101808352811415611539575b50506101406106c0525b6106c0515160206106c051016106c0526106c06106c0511015611605576115e3565b63d564a75f6106e05261070061034080518252806020015182602001528060400151826040015250506107606106208051825280602001518260200152806040015182604001525050610240516107c0526107c0516107a05161078051610760516107405161072051610700516006580161093d565b610820526106a06106c0525b6106c0515260206106c051036106c0526101406106c0511015156116aa57611687565b610820516106a052610420516106a051116116c457600080fd5b6106a0516108405260006102a05111156119f35761086060006003818352015b6106a05161044061086051600381106116fc57600080fd5b6020020151808202821582848304141761171557600080fd5b8090509050905061042051808061172b57600080fd5b8204905090506108805260006108a052610620610860516003811061174f57600080fd5b60200201516108805111156117985761088051610620610860516003811061177657600080fd5b60200201518082101561178857600080fd5b808203905090506108a0526117ce565b61062061086051600381106117ac57600080fd5b602002015161088051808210156117c257600080fd5b808203905090506108a0525b610200516108a05180820282158284830414176117ea57600080fd5b809050905090506402540be400808061180257600080fd5b8204905090506101a0610860516003811061181c57600080fd5b6020020152610620610860516003811061183557600080fd5b60200201516101a0610860516003811061184e57600080fd5b602002015161022051808202821582848304141761186b57600080fd5b809050905090506402540be400808061188357600080fd5b8204905090508082101561189657600080fd5b8082039050905061086051600381106118ae57600080fd5b600160c052602060c020015561062061086051600381106118ce57600080fd5b6020020180516101a061086051600381106118e857600080fd5b6020020151808210156118fa57600080fd5b808203905090508152505b81516001018083528114156116e4575b50506101406108c0525b6108c0515160206108c051016108c0526108606108c05110156119415761191f565b63d564a75f6108e05261090061034080518252806020015182602001528060400151826040015250506109606106208051825280602001518260200152806040015182604001525050610240516109c0526109c0516109a05161098051610960516109405161092051610900516006580161093d565b610a20526108406108c0525b6108c0515260206108c051036108c0526101406108c0511015156119e6576119c3565b610a205161084052611a1b565b600160c052602060c02061062080518255806020015160018301558060400151600283015550505b6000610a40526102a0511515611a38576106a051610a4052611a8d565b6102a051610840516104205180821015611a5157600080fd5b808203905090508082028215828483041417611a6c57600080fd5b80905090509050610420518080611a8257600080fd5b820490509050610a40525b6308c379a0610a60526020610a80526014610aa0527f536c697070616765207363726577656420796f75000000000000000000000000610ac052610aa050606435610a40511015611adf576084610a7cfd5b610b0060006003818352015b60006004610b005160038110611b0057600080fd5b60200201351115611bce57610b005160038110611b1c57600080fd5b600060c052602060c02001543b611b3257600080fd5b610b005160038110611b4357600080fd5b600060c052602060c02001543018611b5a57600080fd5b6020610be060646323b872dd610b205233610b405230610b60526004610b005160038110611b8757600080fd5b6020020135610b8052610b3c6000610b005160038110611ba657600080fd5b600060c052602060c02001545af1611bbd57600080fd5b600050610be051611bcd57600080fd5b5b5b8151600101808352811415611aeb575b50506005543b611bee57600080fd5b6005543018611bfc57600080fd5b6000600060446340c10f19610c005233610c2052610a4051610c4052610c1c60006005545af1611c2b57600080fd5b600435610ca052602435610cc052604435610ce0526101a051610d00526101c051610d20526101e051610d40526106a051610d60526102a051610a4051818183011015611c7757600080fd5b80820190509050610d8052337f423f6495a08fc652425cf4ed0d1f9e37e571d9b9529b1c1c23cce780b2e7df0d610100610ca0a2600062ffffff55005b600015612115575b610200526101405261016052610180526101a0526101c0526101e0526000610140511215610160516101405114151660006101605112151660036101405112166003610160511216611d0d57600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b6102605261022052610200526101e0526101c0526101a05261018052610160526101405261026051610220526101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015611d8c57611d6a565b633a8da8986102c0526102e06101a0805182528060200151826020015280604001518260400152505061022051610340526103405161032051610300516102e0516006580161064f565b6103a0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515611e0557611de2565b6103a05161028052610280516103c05260006103e0526102205160038082028215828483041417611e3557600080fd5b809050905090506104005260006104205261044060006003818352015b61014051610440511415611e6d576101805161042052611ea3565b61016051610440511815611e9d576101a06104405160038110611e8f57600080fd5b602002015161042052611ea2565b611f1f565b5b6103e0805161042051818183011015611ebb57600080fd5b808201905090508152506103c051610280518082028215828483041417611ee157600080fd5b809050905090506104205160038082028215828483041417611f0257600080fd5b809050905090508080611f1457600080fd5b8204905090506103c0525b8151600101808352811415611e52575b50506103c051610280518082028215828483041417611f4d57600080fd5b809050905090506104005160038082028215828483041417611f6e57600080fd5b809050905090508080611f8057600080fd5b8204905090506103c0526103e05161028051610400518080611fa157600080fd5b820490509050818183011015611fb657600080fd5b8082019050905061046052600061048052610280516104a0526104c0600060ff818352015b6104a051610480526104a0516104a0518082028215828483041417611fff57600080fd5b809050905090506103c05181818301101561201957600080fd5b8082019050905060026104a051808202821582848304141761203a57600080fd5b809050905090506104605181818301101561205457600080fd5b80820190509050610280518082101561206c57600080fd5b80820390509050808061207e57600080fd5b8204905090506104a052610480516104a05111156120c55760016104a05161048051808210156120ad57600080fd5b808203905090501115156120c057612101565b6120f0565b6001610480516104a051808210156120dc57600080fd5b808203905090501115156120ef57612101565b5b5b8151600101808352811415611fdb575b50506104a051600052600051610200515650005b635e0d443f60005114156124bd57341561212e57600080fd5b6060516004358060405190131561214457600080fd5b809190121561215257600080fd5b506060516024358060405190131561216957600080fd5b809190121561217757600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610419565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506102206004356003811061229257600080fd5b6020020151604435610140600435600381106122ad57600080fd5b602002015180820282158284830414176122c657600080fd5b80905090509050670de0b6b3a764000080806122e157600080fd5b8204905090508181830110156122f657600080fd5b808201905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561232b57612309565b63554abe286104205260043561044052602435610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611cbc565b610540526103e0610400525b61040051526020610400510361040052610140610400511015156123ba57612397565b610540516103e052610220602435600381106123d557600080fd5b60200201516103e051808210156123eb57600080fd5b8082039050905060018082101561240157600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761242557600080fd5b809050905090506101406024356003811061243f57600080fd5b6020020151808061244f57600080fd5b8204905090506105605260025461056051808202821582848304141761247457600080fd5b809050905090506402540be400808061248c57600080fd5b820490509050610580526105605161058051808210156124ab57600080fd5b8082039050905060005260206000f350005b6307211ef760005114156128455734156124d657600080fd5b606051600435806040519013156124ec57600080fd5b80919012156124fa57600080fd5b506060516024358060405190131561251157600080fd5b809190121561251f57600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610419565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506103c06402540be40081526402540be400816020015260018160400152506102206004356003811061265857600080fd5b60200201516044356103c06004356003811061267357600080fd5b6020020151808202821582848304141761268c57600080fd5b809050905090508181830110156126a257600080fd5b8082019050905061042052610140610460525b610460515160206104605101610460526104606104605110156126d7576126b5565b63554abe28610480526004356104a0526024356104c052610420516104e05261050061022080518252806020015182602001528060400151826040015250506105405161052051610500516104e0516104c0516104a05160065801611cbc565b6105a052610440610460525b610460515260206104605103610460526101406104605110151561276657612743565b6105a051610440526102206024356003811061278157600080fd5b6020020151610440518082101561279757600080fd5b808203905090506001808210156127ad57600080fd5b808203905090506103c0602435600381106127c757600080fd5b602002015180806127d757600080fd5b8204905090506105c0526002546105c05180820282158284830414176127fc57600080fd5b809050905090506402540be400808061281457600080fd5b8204905090506105e0526105c0516105e0518082101561283357600080fd5b8082039050905060005260206000f350005b600015612d31575b610200526101405261016052610180526101a0526101c0526101e0526010541561287657600080fd5b61022060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506102806101406102e0525b6102e0515160206102e051016102e0526102e06102e05110156128da576128b8565b6368a4db61610300526103206101a0805182528060200151826020015280604001518260400152505061038061022080518252806020015182602001528060400151826040015250506103c0516103a0516103805161036051610340516103205160065801610530565b6104205261044052610460526102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561297b57612958565b610420805182528060200151826020015280604001518260400152505061028061014051600381106129ac57600080fd5b6020020151610180516101a061014051600381106129c957600080fd5b602002015180820282158284830414176129e257600080fd5b80905090509050670de0b6b3a764000080806129fd57600080fd5b820490509050818183011015612a1257600080fd5b80820190509050610480526101406104c0525b6104c0515160206104c051016104c0526104c06104c0511015612a4757612a25565b63554abe286104e05261014051610500526101605161052052610480516105405261056061028080518252806020015182602001528060400151826040015250506105a051610580516105605161054051610520516105005160065801611cbc565b610600526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515612ad857612ab5565b610600516104a0526102806101605160038110612af457600080fd5b60200201516104a05180821015612b0a57600080fd5b80820390509050600180821015612b2057600080fd5b8082039050905061062052610620516002548082028215828483041417612b4657600080fd5b809050905090506402540be4008080612b5e57600080fd5b82049050905061064052610640516003548082028215828483041417612b8357600080fd5b809050905090506402540be4008080612b9b57600080fd5b82049050905061066052610620516106405180821015612bba57600080fd5b80820390509050670de0b6b3a76400008082028215828483041417612bde57600080fd5b809050905090506101a06101605160038110612bf957600080fd5b60200201518080612c0957600080fd5b8204905090506106205261066051670de0b6b3a76400008082028215828483041417612c3457600080fd5b809050905090506101a06101605160038110612c4f57600080fd5b60200201518080612c5f57600080fd5b820490509050610660526102206101405160038110612c7d57600080fd5b602002015161018051818183011015612c9557600080fd5b808201905090506101405160038110612cad57600080fd5b600160c052602060c02001556102206101605160038110612ccd57600080fd5b60200201516106205180821015612ce357600080fd5b808203905090506106605180821015612cfb57600080fd5b808203905090506101605160038110612d1357600080fd5b600160c052602060c020015561062051600052600051610200515650005b633df0212460005114156130cd5762ffffff5415612d4e57600080fd5b600162ffffff553415612d6057600080fd5b60605160043580604051901315612d7657600080fd5b8091901215612d8457600080fd5b5060605160243580604051901315612d9b57600080fd5b8091901215612da957600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e051610200516102205163cf6eee7661026052600435610280526024356102a0526044356102c0526102e0610140805182528060200151826020015280604001518260400152505061032051610300516102e0516102c0516102a051610280516006580161284d565b6103805261022052610200526101e0526101c0526101a05261018052610160526101405261038051610220526308c379a06103a05260206103c052602e6103e0527f45786368616e676520726573756c74656420696e20666577657220636f696e73610400527f207468616e206578706563746564000000000000000000000000000000000000610420526103e050606435610220511015612f195760a46103bcfd5b6104606001815260008160200152600081604001525060043560038110612f3f57600080fd5b600060c052602060c02001543b612f5557600080fd5b60043560038110612f6557600080fd5b600060c052602060c02001543018612f7c57600080fd5b602061058060646323b872dd6104c052336104e0523061050052604435610520526104dc600060043560038110612fb257600080fd5b600060c052602060c02001545af1612fc957600080fd5b60005061058051612fd957600080fd5b60243560038110612fe957600080fd5b600060c052602060c02001543b612fff57600080fd5b6024356003811061300f57600080fd5b600060c052602060c0200154301861302657600080fd5b6020610640604463a9059cbb6105a052336105c052610220516105e0526105bc60006024356003811061305857600080fd5b600060c052602060c02001545af161306f57600080fd5b6000506106405161307f57600080fd5b60043561066052604435610680526024356106a052610220516106c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610660a2600062ffffff55005b63ecb586a5600051141561344c5762ffffff54156130ea57600080fd5b600162ffffff5534156130fc57600080fd5b6005543b61310957600080fd5b600554301861311757600080fd5b60206101c060046318160ddd6101605261017c6005545afa61313857600080fd5b6000506101c051610140526101e060008152600081602001526000816040015250610240600081526000816020015260008160400152506102a06001815260008160200152600081604001525061030060006003818352015b61030051600381106131a257600080fd5b600160c052602060c020015460043580820282158284830414176131c557600080fd5b809050905090506101405180806131db57600080fd5b820490509050610320526308c379a0610340526020610360526030610380527f5769746864726177616c20726573756c74656420696e20666577657220636f696103a0527f6e73207468616e206578706563746564000000000000000000000000000000006103c052610380506024610300516003811061325b57600080fd5b60200201356103205110156132715760a461035cfd5b610300516003811061328257600080fd5b600160c052602060c02001805461032051808210156132a057600080fd5b80820390509050815550610320516101e061030051600381106132c257600080fd5b602002015261030051600381106132d857600080fd5b600060c052602060c02001543b6132ee57600080fd5b61030051600381106132ff57600080fd5b600060c052602060c0200154301861331657600080fd5b60206104a0604463a9059cbb610400523361042052610320516104405261041c6000610300516003811061334957600080fd5b600060c052602060c02001545af161336057600080fd5b6000506104a05161337057600080fd5b5b8151600101808352811415613191575b50506005543b61339057600080fd5b600554301861339e57600080fd5b6000600060446379cc67906104c052336104e052600435610500526104dc60006005545af16133cc57600080fd5b6101e051610560526102005161058052610220516105a052610240516105c052610260516105e0526102805161060052610140516004358082101561341057600080fd5b8082039050905061062052337fa49d4cf02656aebf8c771f5a8585638a2a15ee6c97cf7205d4208ed7c1df252d60e0610560a2600062ffffff55005b639fdaea0c6000511415613e4c5762ffffff541561346957600080fd5b600162ffffff55341561347b57600080fd5b6010541561348857600080fd5b610140600181526000816020015260008160400152506005543b6134ab57600080fd5b60055430186134b957600080fd5b602061022060046318160ddd6101c0526101dc6005545afa6134da57600080fd5b600050610220516101a05260006101a051116134f557600080fd5b6002546003808202821582848304141761350e57600080fd5b809050905090506008808061352257600080fd5b82049050905061024052600354610260526102806101406102e0525b6102e0515160206102e051016102e0526102e06102e05110156135605761353e565b60065801610281565b6103005261032052610340526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156135a05761357d565b6103008051825280602001518260200152806040015182604001525050610140610380525b610380515160206103805101610380526103806103805110156135e7576135c5565b600658016100a9565b6103a052610360610380525b610380515260206103805103610380526101406103805110151561361f576135fc565b6103a051610360526103c060018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506104206103c080518252806020015182602001528060400151826040015250506101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156136a857613686565b63d564a75f6104c0526104e061028080518252806020015182602001528060400151826040015250506105406103c08051825280602001518260200152806040015182604001525050610360516105a0526105a05161058051610560516105405161052051610500516104e0516006580161093d565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561374d5761372a565b610600516104805261062060006003818352015b610420610620516003811061377557600080fd5b6020020180516004610620516003811061378e57600080fd5b6020020135808210156137a057600080fd5b808203905090508152505b8151600101808352811415613761575b5050610140610660525b610660515160206106605101610660526106606106605110156137e7576137c5565b63d564a75f610680526106a0610280805182528060200151826020015280604001518260400152505061070061042080518252806020015182602001528060400151826040015250506103605161076052610760516107405161072051610700516106e0516106c0516106a0516006580161093d565b6107c052610640610660525b610660515260206106605103610660526101406106605110151561388c57613869565b6107c051610640526107e06000815260008160200152600081604001525061084060006003818352015b610640516103c061084051600381106138ce57600080fd5b602002015180820282158284830414176138e757600080fd5b809050905090506104805180806138fd57600080fd5b82049050905061086052600061088052610420610840516003811061392157600080fd5b602002015161086051111561396a5761086051610420610840516003811061394857600080fd5b60200201518082101561395a57600080fd5b80820390509050610880526139a0565b610420610840516003811061397e57600080fd5b6020020151610860518082101561399457600080fd5b80820390509050610880525b610240516108805180820282158284830414176139bc57600080fd5b809050905090506402540be40080806139d457600080fd5b8204905090506107e061084051600381106139ee57600080fd5b60200201526104206108405160038110613a0757600080fd5b60200201516107e06108405160038110613a2057600080fd5b6020020151610260518082028215828483041417613a3d57600080fd5b809050905090506402540be4008080613a5557600080fd5b82049050905080821015613a6857600080fd5b808203905090506108405160038110613a8057600080fd5b600160c052602060c02001556104206108405160038110613aa057600080fd5b6020020180516107e06108405160038110613aba57600080fd5b602002015180821015613acc57600080fd5b808203905090508152505b81516001018083528114156138b6575b50506101406108c0525b6108c0515160206108c051016108c0526108c06108c0511015613b1357613af1565b63d564a75f6108e05261090061028080518252806020015182602001528060400151826040015250506109606104208051825280602001518260200152806040015182604001525050610360516109c0526109c0516109a05161098051610960516109405161092051610900516006580161093d565b610a20526108a06108c0525b6108c0515260206108c051036108c0526101406108c051101515613bb857613b95565b610a20516108a052610480516108a05180821015613bd557600080fd5b808203905090506101a0518082028215828483041417613bf457600080fd5b80905090509050610480518080613c0a57600080fd5b8204905090506001818183011015613c2157600080fd5b80820190509050610a40526308c379a0610a60526020610a80526014610aa0527f536c697070616765207363726577656420796f75000000000000000000000000610ac052610aa050606435610a40511115613c7e576084610a7cfd5b610b0060006003818352015b60006004610b005160038110613c9f57600080fd5b60200201351115613d6857610b005160038110613cbb57600080fd5b600060c052602060c02001543b613cd157600080fd5b610b005160038110613ce257600080fd5b600060c052602060c02001543018613cf957600080fd5b6020610bc0604463a9059cbb610b205233610b40526004610b005160038110613d2157600080fd5b6020020135610b6052610b3c6000610b005160038110613d4057600080fd5b600060c052602060c02001545af1613d5757600080fd5b600050610bc051613d6757600080fd5b5b5b8151600101808352811415613c8a575b50506005543b613d8857600080fd5b6005543018613d9657600080fd5b6000600060446379cc6790610be05233610c0052610a4051610c2052610bfc60006005545af1613dc557600080fd5b600435610c8052602435610ca052604435610cc0526107e051610ce05261080051610d005261082051610d205261064051610d40526101a051610a405180821015613e0f57600080fd5b80820390509050610d6052337f173599dbf9c6ca6f7c3b590df07ae98a45d74ff54065505141e7de6c46a624c2610100610c80a2600062ffffff55005b600015614175575b610200526101405261016052610180526101a0526101c0526101e05260036101605112600061016051121516613e8957600080fd5b6101e051610220526000610240526101405160038082028215828483041417613eb157600080fd5b80905090509050610260526000610280526102a060006003818352015b610160516102a0511815613efe576101806102a05160038110613ef057600080fd5b602002015161028052613f03565b613f7f565b610240805161028051818183011015613f1b57600080fd5b80820190509050815250610220516101e0518082028215828483041417613f4157600080fd5b809050905090506102805160038082028215828483041417613f6257600080fd5b809050905090508080613f7457600080fd5b820490509050610220525b8151600101808352811415613ece575b5050610220516101e0518082028215828483041417613fad57600080fd5b809050905090506102605160038082028215828483041417613fce57600080fd5b809050905090508080613fe057600080fd5b82049050905061022052610240516101e05161026051808061400157600080fd5b82049050905081818301101561401657600080fd5b808201905090506102c05260006102e0526101e05161030052610320600060ff818352015b610300516102e0526103005161030051808202821582848304141761405f57600080fd5b809050905090506102205181818301101561407957600080fd5b80820190509050600261030051808202821582848304141761409a57600080fd5b809050905090506102c0518181830110156140b457600080fd5b808201905090506101e051808210156140cc57600080fd5b8082039050905080806140de57600080fd5b820490509050610300526102e051610300511115614125576001610300516102e0518082101561410d57600080fd5b8082039050905011151561412057614161565b614150565b60016102e051610300518082101561413c57600080fd5b8082039050905011151561414f57614161565b5b5b815160010180835281141561403b575b505061030051600052600051610200515650005b6000156148be575b6101e0526101405261016052610180526101a0526101c0526101405161016051610180516101a0516101c0516101e05161020051600658016100a9565b61024052610200526101e0526101c0526101a0526101805261016052610140526102405161020052600254600380820282158284830414176141fb57600080fd5b809050905090506008808061420f57600080fd5b820490509050610260526102806402540be40081526402540be400816020015260018160400152506005543b61424457600080fd5b600554301861425257600080fd5b602061036060046318160ddd6103005261031c6005545afa61427357600080fd5b600050610360516102e0526103806101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156142ab57614289565b637aca288a61040052610420610180805182528060200151826020015280604001518260400152505061046051610440516104205160065801610419565b6104c0526104e052610500526103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515614320576142fd565b6104c08051825280602001518260200152806040015182604001525050610140610540525b6105405151602061054051016105405261054061054051101561436757614345565b633a8da898610560526105806103808051825280602001518260200152806040015182604001525050610200516105e0526105e0516105c0516105a051610580516006580161064f565b61064052610520610540525b61054051526020610540510361054052610140610540511015156143e0576143bd565b6106405161052052610520516101405161052051808202821582848304141761440857600080fd5b809050905090506102e051808061441e57600080fd5b8204905090508082101561443157600080fd5b80820390509050610660526106806103808051825280602001518260200152806040015182604001525050610140610700525b6107005151602061070051016107005261070061070051101561448657614464565b63da97dfe161072052610200516107405261016051610760526107806103808051825280602001518260200152806040015182604001525050610660516107e0526107e0516107c0516107a05161078051610760516107405160065801613e54565b610840526106e0610700525b6107005152602061070051036107005261014061070051101515614517576144f4565b610840516106e052610380610160516003811061453357600080fd5b60200201516106e0518082101561454957600080fd5b80820390509050610280610160516003811061456457600080fd5b6020020151808061457457600080fd5b8204905090506108605261088060006003818352015b60006108a0526101605161088051141561460c5761038061088051600381106145b257600080fd5b60200201516106605180820282158284830414176145cf57600080fd5b809050905090506105205180806145e557600080fd5b8204905090506106e051808210156145fc57600080fd5b808203905090506108a05261468b565b610380610880516003811061462057600080fd5b6020020151610380610880516003811061463957600080fd5b602002015161066051808202821582848304141761465657600080fd5b8090509050905061052051808061466c57600080fd5b8204905090508082101561467f57600080fd5b808203905090506108a0525b610680610880516003811061469f57600080fd5b602002018051610260516108a05180820282158284830414176146c157600080fd5b809050905090506402540be40080806146d957600080fd5b820490509050808210156146ec57600080fd5b808203905090508152505b815160010180835281141561458a575b5050610680610160516003811061471d57600080fd5b60200201516101406108e0525b6108e0515160206108e051016108e0526108e06108e051101561474c5761472a565b63da97dfe161090052610200516109205261016051610940526109606106808051825280602001518260200152806040015182604001525050610660516109c0526109c0516109a0516109805161096051610940516109205160065801613e54565b610a20526108c06108e0525b6108e0515260206108e051036108e0526101406108e0511015156147dd576147ba565b610a2051808210156147ee57600080fd5b808203905090506108c0526108c05160018082101561480c57600080fd5b80820390509050610280610160516003811061482757600080fd5b6020020151808061483757600080fd5b8204905090506108c052610a408080806108c051815250506020810190508080610860516108c0518082101561486c57600080fd5b808203905090508152505060409050905060c05260c051610a80525b6000610a805111151561489a576148b6565b6020610a805103610a4001516020610a805103610a8052614888565b6101e0515650005b63cc2b27d760005114156149ec5734156148d757600080fd5b606051602435806040519013156148ed57600080fd5b80919012156148fb57600080fd5b5061014061014051610160516101805160065801610281565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e0516102005163f7d59a096102405260043561026052602435610280526102a061014080518252806020015182602001528060400151826040015250506102e0516102c0516102a05161028051610260516006580161417d565b6103405261036052610200526101e0526101c0526101a0526101805261016052610140526103405160005260206000f350005b631a4d01d26000511415614d685762ffffff5415614a0957600080fd5b600162ffffff553415614a1b57600080fd5b60605160243580604051901315614a3157600080fd5b8091901215614a3f57600080fd5b506000610140526000610160526101806101405161016051610180516101a0516101c05160065801610281565b6102005261022052610240526101c0526101a05261018052610160526101405261020080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405163f7d59a09610280526004356102a0526024356102c0526102e0610180805182528060200151826020015280604001518260400152505061032051610300516102e0516102c0516102a0516006580161417d565b610380526103a0526102405261022052610200526101e0526101c0526101a052610180526101605261014052610380805161014052602081015161016052506308c379a06103c05260206103e0526018610400527f4e6f7420656e6f75676820636f696e732072656d6f76656400000000000000006104205261040050604435610140511015614bb25760846103dcfd5b60243560038110614bc257600080fd5b600160c052602060c02001805461014051610160516003548082028215828483041417614bee57600080fd5b809050905090506402540be4008080614c0657600080fd5b820490509050818183011015614c1b57600080fd5b8082019050905080821015614c2f57600080fd5b808203905090508155506005543b614c4657600080fd5b6005543018614c5457600080fd5b6000600060446379cc67906104605233610480526004356104a05261047c60006005545af1614c8257600080fd5b60243560038110614c9257600080fd5b600060c052602060c02001543b614ca857600080fd5b60243560038110614cb857600080fd5b600060c052602060c02001543018614ccf57600080fd5b60206105a0604463a9059cbb610500523361052052610140516105405261051c600060243560038110614d0157600080fd5b600060c052602060c02001545af1614d1857600080fd5b6000506105a051614d2857600080fd5b6004356105c052610140516105e052337f9e96dd3b997a2a257eec4df9bb6eaf626e206df5f543bd963682d143300be31060406105c0a2600062ffffff55005b633c157e646000511415614eda573415614d8157600080fd5b6004543314614d8f57600080fd5b60085462015180818183011015614da557600080fd5b80820190509050421015614db857600080fd5b4262015180818183011015614dcc57600080fd5b808201905090506024351015614de157600080fd5b61014051600658016100a9565b61018052610140526101805161014052620f42406004351060006004351116614e1657600080fd5b61014051600435600a8082028215828483041417614e3357600080fd5b80905090509050101561014051600435101661014051600a8082028215828483041417614e5f57600080fd5b8090509050905060043511156101405160043510151617614e7f57600080fd5b6101405160065560043560075542600855602435600955610140516101a0526004356101c052426101e052602435610200527fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c25460806101a0a1005b63551a65886000511415614f6a573415614ef357600080fd5b6004543314614f0157600080fd5b61014051600658016100a9565b6101805261014052610180516101405261014051600655610140516007554260085542600955610140516101a052426101c0527f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc20193860406101a0a1005b635b5a14676000511415615033573415614f8357600080fd5b6004543314614f9157600080fd5b600a5415614f9e57600080fd5b64012a05f2006024351115614fb257600080fd5b64012a05f2006004351115614fc657600080fd5b426203f480818183011015614fda57600080fd5b808201905090506101405261014051600a55600435600c55602435600d556004356101605260243561018052610140517f351fc5da2fbf480f2225debf3664a4bc90fa9923743aad58b4603f648e931fe06040610160a2005b634f12fe9760005114156150ca57341561504c57600080fd5b600454331461505a57600080fd5b6000600a541142600a5411151661507057600080fd5b6000600a55600c5461014052600d546101605261014051600255610160516003556101405161018052610160516101a0527fbe12859b636aed607d5230b2cc2711f68d70e51060e6cca1f575ef5d2fcc95d16040610180a1005b63226840fb60005114156150f85734156150e357600080fd5b60045433146150f157600080fd5b6000600a55005b636b441a40600051141561519957341561511157600080fd5b600435602051811061512257600080fd5b50600454331461513157600080fd5b600b541561513e57600080fd5b426203f48081818301101561515257600080fd5b808201905090506101405261014051600b55600435600e55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156152155734156151b257600080fd5b60045433146151c057600080fd5b6000600b5411600b54421015166151d657600080fd5b6000600b55600e546101405261014051600455610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561524357341561522e57600080fd5b600454331461523c57600080fd5b6000600b55005b6330c54085600051141561539757341561525c57600080fd5b600454331461526a57600080fd5b61014060006003818352015b610140516003811061528757600080fd5b600060c052602060c020015461016052610160513b6152a557600080fd5b6101605130186152b457600080fd5b602061022060246370a082316101a052306101c0526101bc610160515afa6152db57600080fd5b6000506102205161014051600381106152f357600080fd5b600160c052602060c02001548082101561530c57600080fd5b8082039050905061018052600061018051111561538257610160513b61533157600080fd5b61016051301861534057600080fd5b60206102e0604463a9059cbb610240523361026052610180516102805261025c6000610160515af161537157600080fd5b6000506102e05161538157600080fd5b5b5b8151600101808352811415615276575b5050005b63e369885360005114156153d35734156153b057600080fd5b60045433146153be57600080fd5b42600f54116153cc57600080fd5b6001601055005b633046f97260005114156154015734156153ec57600080fd5b60045433146153fa57600080fd5b6000601055005b6323746eb8600051141561546657341561541a57600080fd5b6060516004358060405190131561543057600080fd5b809190121561543e57600080fd5b506004356003811061544f57600080fd5b600060c052602060c020015460005260206000f350005b63065a80d860005114156154cb57341561547f57600080fd5b6060516004358060405190131561549557600080fd5b80919012156154a357600080fd5b50600435600381106154b457600080fd5b600160c052602060c020015460005260206000f350005b63ddca3f4360005114156154f25734156154e457600080fd5b60025460005260206000f350005b63fee3f7f9600051141561551957341561550b57600080fd5b60035460005260206000f350005b638da5cb5b600051141561554057341561553257600080fd5b60045460005260206000f350005b635409491a600051141561556757341561555957600080fd5b60065460005260206000f350005b63b4b577ad600051141561558e57341561558057600080fd5b60075460005260206000f350005b632081066c60005114156155b55734156155a757600080fd5b60085460005260206000f350005b631405228860005114156155dc5734156155ce57600080fd5b60095460005260206000f350005b63405e28f860005114156156035734156155f557600080fd5b600a5460005260206000f350005b63e0a0b586600051141561562a57341561561c57600080fd5b600b5460005260206000f350005b6358680d0b600051141561565157341561564357600080fd5b600c5460005260206000f350005b63e3824462600051141561567857341561566a57600080fd5b600d5460005260206000f350005b631ec0cdc1600051141561569f57341561569157600080fd5b600e5460005260206000f350005b5b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6000000000000000000000000075b1bb99792c9e1041ba13afef80c91a1e70fb3000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000003d0900
-----Decoded View---------------
Arg [0] : _coins (address[3]): 0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D,0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6
Arg [1] : _pool_token (address): 0x075b1bb99792c9E1041bA13afEf80C91a1e70fB3
Arg [2] : _A (uint256): 100
Arg [3] : _fee (uint256): 4000000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d
Arg [1] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [2] : 000000000000000000000000fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6
Arg [3] : 000000000000000000000000075b1bb99792c9e1041ba13afef80c91a1e70fb3
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [5] : 00000000000000000000000000000000000000000000000000000000003d0900
Loading...
Loading
Loading...
Loading
OVERVIEW
Curve.fi's sBTC swap address.Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.