Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Don’t invest unless you’re prepared to lose all the money you invest.
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
Thousands of tokens and competitive prices from multiple aggregators, in one place.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Slots, Roulette, Poker & more - Proud sponsors of UFC, Everton & StakeF1 team!
Overview
ETH Balance
Eth Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (18)169.39902902 COMPCompound (COMP)$13,135.20@77.54448,202.547958 cDAICompound Dai (cDAI)$10,829.34@0.0242789,808.92704074 cUSDCCompound USD... (cUSDC)$19,341.59@0.024522,653.459845 USDTTether USD (USDT)$22,580.02@0.9968825,000 SPK Genesis Rewards (https://spkprotocol.com)ERC-20: # SP... (SPK Ge...)194.85 Swap at LINKToken.ioERC-20: aLIN... (Swap a...)200 RAMPERC-20: RAMP... (RAMP)200 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]400 TokenERC-20 TOKEN*[Suspicious]400 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]98,127 TokenERC-20 TOKEN*[Suspicious]350 TokenERC-20 TOKEN*[Suspicious]9,283 TokenERC-20 TOKEN*[Spam]100 TokenERC-20 TOKEN*[Spam]9,283 TokenERC-20 TOKEN*[Spam]100 TokenERC-20 TOKEN*[Spam]NFT Tokens (10)claim rewards on apy-usd.comapy-usd.comERC-1155ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Cards New
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 2,116 transactions
Transaction Hash MethodBlockFromToExchange_underly... 21404072 2024-12-14 23:35:11 23 days ago 1734219311 IN 0 ETH$0.00 0.00086891 7.24099124 Exchange_underly... 17906791 2023-08-13 15:20:23 513 days ago 1691940023 IN 0 ETH$0.00 0.00862041 24.87250918 Exchange_underly... 17906776 2023-08-13 15:17:23 513 days ago 1691939843 IN 0 ETH$0.00 0.00893822 22.69765498 Exchange_underly... 16804176 2023-03-11 10:13:59 668 days ago 1678529639 IN 0 ETH$0.00 0.01888897 82.32462699 Exchange_underly... 16804169 2023-03-11 10:12:35 668 days ago 1678529555 IN 0 ETH$0.00 0.01912622 83.35862823 Exchange_underly... 16546269 2023-02-03 5:48:35 704 days ago 1675403315 IN 0 ETH$0.00 0.0081365 23.02623564 Exchange_underly... 15942429 2022-11-10 21:53:23 788 days ago 1668117203 IN 0 ETH$0.00 0.01286057 31.40785834 Exchange_underly... 15921664 2022-11-08 0:15:23 791 days ago 1667866523 IN 0 ETH$0.00 0.00594403 14.33835991 Exchange_underly... 15914600 2022-11-07 0:36:11 792 days ago 1667781371 IN 0 ETH$0.00 0.00494802 11.93575796 Exchange_underly... 15914503 2022-11-07 0:16:35 792 days ago 1667780195 IN 0 ETH$0.00 0.00485437 11.70984137 Exchange_underly... 15907401 2022-11-06 0:29:47 793 days ago 1667694587 IN 0 ETH$0.00 0.00539769 13.02045628 Exchange_underly... 15907338 2022-11-06 0:17:11 793 days ago 1667693831 IN 0 ETH$0.00 0.00505727 12.19929478 Exchange_underly... 15892999 2022-11-04 0:14:35 795 days ago 1667520875 IN 0 ETH$0.00 0.00710252 17.1328889 Exchange_underly... 15833634 2022-10-26 17:06:47 803 days ago 1666804007 IN 0 ETH$0.00 0.01346237 37.72475311 Exchange_underly... 15793720 2022-10-21 3:13:35 809 days ago 1666322015 IN 0 ETH$0.00 0.00655047 18.11055407 Exchange_underly... 15721287 2022-10-11 0:28:59 819 days ago 1665448139 IN 0 ETH$0.00 0.01854791 45.61745302 Add_liquidity 15719838 2022-10-10 19:38:35 819 days ago 1665430715 IN 0 ETH$0.00 0.0216098 43.65722453 Exchange_underly... 15714099 2022-10-10 0:24:23 820 days ago 1665361463 IN 0 ETH$0.00 0.01283066 31.55622467 Exchange_underly... 15706964 2022-10-09 0:29:47 821 days ago 1665275387 IN 0 ETH$0.00 0.00957479 23.54861589 Exchange_underly... 15699869 2022-10-08 0:44:35 822 days ago 1665189875 IN 0 ETH$0.00 0.00177328 4.3612913 Exchange_underly... 15699766 2022-10-08 0:23:59 822 days ago 1665188639 IN 0 ETH$0.00 0.00327414 8.05254919 Exchange_underly... 15685462 2022-10-06 0:23:59 824 days ago 1665015839 IN 0 ETH$0.00 0.00402678 9.90362855 Exchange_underly... 15678331 2022-10-05 0:27:35 825 days ago 1664929655 IN 0 ETH$0.00 0.0048303 11.87983705 Exchange_underly... 15676853 2022-10-04 19:27:47 825 days ago 1664911667 IN 0 ETH$0.00 0.008119 19.96819605 Exchange_underly... 15671181 2022-10-04 0:23:47 826 days ago 1664843027 IN 0 ETH$0.00 0.0058847 14.47307005 View more zero value Internal Transactions in Advanced View mode
Advanced mode:Loading...LoadingContract Source Code Verified (Exact Match)
Contract Name:Vyper_contract
Compiler Versionvyper:0.1.0b16
Contract Source Code (Vyper language format)
# (c) Curve.Fi, 2020 # 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: modifying def supplyRatePerBlock() -> uint256: constant def accrualBlockNumber() -> uint256: constant from vyper.interfaces import ERC20 # Tether transfer-only ABI contract USDT: def transfer(_to: address, _value: uint256): modifying def transferFrom(_from: address, _to: address, _value: uint256): modifying # 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, True, False] TETHERED: constant(bool[N_COINS]) = [False, False, True] FEE_DENOMINATOR: constant(uint256) = 10 ** 10 PRECISION: constant(uint256) = 10 ** 18 # The precision to convert to PRECISION_MUL: constant(uint256[N_COINS]) = [convert(1, uint256), convert(1000000000000, uint256), convert(1000000000000, 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 # Events TokenExchange: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256}) TokenExchangeUnderlying: 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}) 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)}) CommitNewParameters: event({deadline: indexed(timestamp), A: uint256, fee: uint256, admin_fee: uint256}) NewParameters: event({A: uint256, fee: uint256, admin_fee: uint256}) coins: public(address[N_COINS]) underlying_coins: public(address[N_COINS]) balances: public(uint256[N_COINS]) A: public(uint256) # 2 x amplification coefficient fee: public(uint256) # fee * 1e10 admin_fee: public(uint256) # admin_fee * 1e10 max_admin_fee: constant(uint256) = 5 * 10 ** 9 owner: public(address) token: ERC20m admin_actions_deadline: public(timestamp) transfer_ownership_deadline: public(timestamp) future_A: public(uint256) 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], _underlying_coins: address[N_COINS], _pool_token: address, _A: uint256, _fee: uint256): """ _coins: Addresses of ERC20 conracts of coins (c-tokens) involved _underlying_coins: Addresses of plain coins (ERC20) _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 assert _underlying_coins[i] != ZERO_ADDRESS self.balances[i] = 0 self.coins = _coins self.underlying_coins = _underlying_coins self.A = _A self.fee = _fee self.admin_fee = 0 self.owner = msg.sender self.kill_deadline = block.timestamp + kill_deadline_dt self.is_killed = False self.token = ERC20m(_pool_token) @private @constant def _stored_rates() -> uint256[N_COINS]: # exchangeRateStored * (1 + supplyRatePerBlock * (getBlockNumber - accrualBlockNumber) / 1e18) result: uint256[N_COINS] = PRECISION_MUL use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): rate: uint256 = PRECISION # Used with no lending if use_lending[i]: rate = cERC20(self.coins[i]).exchangeRateStored() supply_rate: uint256 = cERC20(self.coins[i]).supplyRatePerBlock() old_block: uint256 = cERC20(self.coins[i]).accrualBlockNumber() rate += rate * supply_rate * (block.number - old_block) / PRECISION result[i] *= rate return result @private def _current_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 = 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] / 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]) -> uint256: S: uint256 = 0 for _x in xp: S += _x if S == 0: return 0 Dprev: uint256 = 0 D: uint256 = S Ann: uint256 = self.A * N_COINS for _i in range(255): D_P: uint256 = D for _x in xp: D_P = D_P * D / (_x * N_COINS + 1) # +1 is to prevent /0 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]) -> uint256: return self.get_D(self._xp_mem(rates, _balances)) @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._stored_rates())) # 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._stored_rates() D0: uint256 = self.get_D_mem(rates, _balances) 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) 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 tethered: bool[N_COINS] = TETHERED 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 token_supply: uint256 = self.token.totalSupply() rates: uint256[N_COINS] = self._current_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) 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) 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) 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 tethered[i] and not use_lending[i]: USDT(self.coins[i]).transferFrom(msg.sender, self, amounts[i]) else: 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) D: uint256 = self.get_D(_xp) c: uint256 = D S_: uint256 = 0 Ann: uint256 = self.A * 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._stored_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) * PRECISION / rates[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @public @constant def get_dx(i: int128, j: int128, dy: uint256) -> uint256: # dx and dy in c-units rates: uint256[N_COINS] = self._stored_rates() xp: uint256[N_COINS] = self._xp(rates) y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * rates[j] / PRECISION x: uint256 = self.get_y(j, i, y, xp) dx: uint256 = (x - xp[i]) * PRECISION / rates[i] return dx @public @constant def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256: # dx and dy in underlying units rates: uint256[N_COINS] = self._stored_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) / precisions[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @public @constant def get_dx_underlying(i: int128, j: int128, dy: uint256) -> uint256: # dx and dy in underlying units rates: uint256[N_COINS] = self._stored_rates() xp: uint256[N_COINS] = self._xp(rates) precisions: uint256[N_COINS] = PRECISION_MUL y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * precisions[j] x: uint256 = self.get_y(j, i, y, xp) dx: uint256 = (x - xp[i]) / precisions[i] return dx @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 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 dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR dy_admin_fee: uint256 = dy_fee * self.admin_fee / FEE_DENOMINATOR self.balances[i] = x * PRECISION / rates[i] self.balances[j] = (y + (dy_fee - dy_admin_fee)) * PRECISION / rates[j] _dy: uint256 = (dy - dy_fee) * PRECISION / rates[j] return _dy @public @nonreentrant('lock') def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._current_rates() dy: uint256 = self._exchange(i, j, dx, rates) assert dy >= min_dy, "Exchange resulted in fewer coins than expected" tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transferFrom(msg.sender, self, dx) else: assert_modifiable(cERC20(self.coins[i]).transferFrom(msg.sender, self, dx)) if tethered[j] and not use_lending[j]: USDT(self.coins[j]).transfer(msg.sender, dy) else: assert_modifiable(cERC20(self.coins[j]).transfer(msg.sender, dy)) log.TokenExchange(msg.sender, i, dx, j, dy) @public @nonreentrant('lock') def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._current_rates() precisions: uint256[N_COINS] = PRECISION_MUL rate_i: uint256 = rates[i] / precisions[i] rate_j: uint256 = rates[j] / precisions[j] dx_: uint256 = dx * PRECISION / rate_i dy_: uint256 = self._exchange(i, j, dx_, rates) dy: uint256 = dy_ * rate_j / PRECISION assert dy >= min_dy, "Exchange resulted in fewer coins than expected" use_lending: bool[N_COINS] = USE_LENDING tethered: bool[N_COINS] = TETHERED ok: uint256 = 0 if tethered[i]: USDT(self.underlying_coins[i]).transferFrom(msg.sender, self, dx) else: assert_modifiable(ERC20(self.underlying_coins[i])\ .transferFrom(msg.sender, self, dx)) if use_lending[i]: ERC20(self.underlying_coins[i]).approve(self.coins[i], dx) ok = cERC20(self.coins[i]).mint(dx) if ok > 0: raise "Could not mint coin" if use_lending[j]: ok = cERC20(self.coins[j]).redeem(dy_) if ok > 0: raise "Could not redeem coin" if tethered[j]: USDT(self.underlying_coins[j]).transfer(msg.sender, dy) else: assert_modifiable(ERC20(self.underlying_coins[j])\ .transfer(msg.sender, dy)) log.TokenExchangeUnderlying(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 tethered: bool[N_COINS] = TETHERED 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 if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transfer(msg.sender, value) else: 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 tethered: bool[N_COINS] = TETHERED 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._current_rates() old_balances: uint256[N_COINS] = self.balances new_balances: uint256[N_COINS] = old_balances D0: uint256 = self.get_D_mem(rates, old_balances) for i in range(N_COINS): new_balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, new_balances) 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) token_amount: uint256 = (D0 - D2) * token_supply / D0 assert token_amount > 0 assert token_amount <= max_burn_amount, "Slippage screwed you" for i in range(N_COINS): if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transfer(msg.sender, amounts[i]) else: 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) ### Admin functions ### @public def commit_new_parameters(amplification: uint256, 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 _deadline: timestamp = block.timestamp + admin_actions_delay self.admin_actions_deadline = _deadline self.future_A = amplification self.future_fee = new_fee self.future_admin_fee = new_admin_fee log.CommitNewParameters(_deadline, amplification, new_fee, new_admin_fee) @public def apply_new_parameters(): assert msg.sender == self.owner assert self.admin_actions_deadline <= block.timestamp\ and self.admin_actions_deadline > 0 self.admin_actions_deadline = 0 _A: uint256 = self.future_A _fee: uint256 = self.future_fee _admin_fee: uint256 = self.future_admin_fee self.A = _A self.fee = _fee self.admin_fee = _admin_fee log.NewParameters(_A, _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 _precisions: uint256[N_COINS] = PRECISION_MUL tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): c: address = self.coins[i] value: uint256 = cERC20(c).balanceOf(self) - self.balances[i] if value > 0: if tethered[i] and not use_lending[i]: USDT(c).transfer(msg.sender, value) else: 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
[{"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":"TokenExchangeUnderlying","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":"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":"CommitNewParameters","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[3]","name":"_coins"},{"type":"address[3]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1327351},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":5171741},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":7905846},{"name":"get_dy","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3016651},{"name":"get_dx","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3016657},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3016494},{"name":"get_dx_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3016500},{"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":6109460},{"name":"exchange_underlying","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":6125699},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[3]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":197574},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":7905313},{"name":"commit_new_parameters","outputs":[],"inputs":[{"type":"uint256","name":"amplification"},{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":145897},{"name":"apply_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":133512},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21835},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74512},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60568},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21925},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":18169},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37878},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22015},{"name":"coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2190},{"name":"underlying_coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2220},{"name":"balances","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2250},{"name":"A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2081},{"name":"fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2111},{"name":"admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2141},{"name":"owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"future_A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321},{"name":"future_owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2351}]
Contract Creation Code
740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052610120615c256101403934156100a257600080fd5b6020615c2560c03960c05160205181106100bb57600080fd5b5060206020615c250160c03960c05160205181106100d857600080fd5b5060206040615c250160c03960c05160205181106100f557600080fd5b5060206060615c250160c03960c051602051811061011257600080fd5b5060206080615c250160c03960c051602051811061012f57600080fd5b50602060a0615c250160c03960c051602051811061014c57600080fd5b50602060c0615c250160c03960c051602051811061016957600080fd5b5061026060006003818352015b6000610140610260516003811061018c57600080fd5b60200201511861019b57600080fd5b60006101a061026051600381106101b157600080fd5b6020020151186101c057600080fd5b600061026051600381106101d357600080fd5b600260c052602060c02001555b8151600101808352811415610176575b5050600060c052602060c0206101408051825580602001516001830155806040015160028301555050600160c052602060c0206101a08051825580602001516001830155806040015160028301555050610220516003556102405160045560006005553360065542624f1a0081818301101561026b57600080fd5b80820190509050600e556000600f5561020051600755615c0d56600436101561000d57615981565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156103f2575b610140526101606001815264e8d4a51000816020015264e8d4a510008160400152506101c06001815260018160200152600081604001525061022060006003818352015b670de0b6b3a7640000610240526101c0610220516003811061010e57600080fd5b60200201511561036757610220516003811061012957600080fd5b600060c052602060c02001543b61013f57600080fd5b610220516003811061015057600080fd5b600060c052602060c0200154301861016757600080fd5b60206102c0600463182df0f56102605261027c610220516003811061018b57600080fd5b600060c052602060c02001545afa6101a257600080fd5b6000506102c0516102405261022051600381106101be57600080fd5b600060c052602060c02001543b6101d457600080fd5b61022051600381106101e557600080fd5b600060c052602060c020015430186101fc57600080fd5b6020610360600463ae9d70b06103005261031c610220516003811061022057600080fd5b600060c052602060c02001545afa61023757600080fd5b600050610360516102e052610220516003811061025357600080fd5b600060c052602060c02001543b61026957600080fd5b610220516003811061027a57600080fd5b600060c052602060c0200154301861029157600080fd5b60206104006004636c540baf6103a0526103bc61022051600381106102b557600080fd5b600060c052602060c02001545afa6102cc57600080fd5b60005061040051610380526102408051610240516102e05180820282158284830414176102f857600080fd5b8090509050905043610380518082101561031157600080fd5b80820390509050808202821582848304141761032c57600080fd5b80905090509050670de0b6b3a7640000808061034757600080fd5b82049050905081818301101561035c57600080fd5b808201905090508152505b610160610220516003811061037b57600080fd5b60200201805161024051808202821582848304141761039957600080fd5b809050905090508152505b81516001018083528114156100ed575b50506060610420525b6000610420511115156103cf576103eb565b60206104205103610160015160206104205103610420526103bd565b6101405156005b60001561058c575b610140526101606001815264e8d4a51000816020015264e8d4a510008160400152506101c06001815260018160200152600081604001525061022060006003818352015b670de0b6b3a7640000610240526101c0610220516003811061045f57600080fd5b60200201511561050157610220516003811061047a57600080fd5b600060c052602060c02001543b61049057600080fd5b61022051600381106104a157600080fd5b600060c052602060c020015430186104b857600080fd5b60206102c0600463bd6d894d6102605261027c600061022051600381106104de57600080fd5b600060c052602060c02001545af16104f557600080fd5b6000506102c051610240525b610160610220516003811061051557600080fd5b60200201805161024051808202821582848304141761053357600080fd5b809050905090508152505b815160010180835281141561043e575b505060606102e0525b60006102e05111151561056957610585565b60206102e05103610160015160206102e051036102e052610557565b6101405156005b6000156106a3575b6101a0526101405261016052610180526101c0610140805182528060200151826020015280604001518260400152505061022060006003818352015b6101c061022051600381106105e457600080fd5b602002015161022051600381106105fa57600080fd5b600260c052602060c0200154808202821582848304141761061a57600080fd5b80905090509050670de0b6b3a7640000808061063557600080fd5b8204905090506101c0610220516003811061064f57600080fd5b60200201525b81516001018083528114156105d0575b50506060610240525b6000610240511115156106805761069c565b602061024051036101c00151602061024051036102405261066e565b6101a05156005b6000156107c2575b610200526101405261016052610180526101a0526101c0526101e052610220610140805182528060200151826020015280604001518260400152505061028060006003818352015b610220610280516003811061070757600080fd5b60200201516101a0610280516003811061072057600080fd5b6020020151808202821582848304141761073957600080fd5b80905090509050670de0b6b3a7640000808061075457600080fd5b820490509050610220610280516003811061076e57600080fd5b60200201525b81516001018083528114156106f3575b505060606102a0525b60006102a05111151561079f576107bb565b60206102a05103610220015160206102a051036102a05261078d565b6102005156005b600015610ac3575b6101a05261014052610160526101805260006101c05261020060006003818352015b6020610200510261014001516101e0526101c080516101e05181818301101561081457600080fd5b808201905090508152505b81516001018083528114156107ec575b50506101c051151561084a5760006000526000516101a05156505b6000610240526101c051610260526003546003808202821582848304141761087157600080fd5b80905090509050610280526102a0600060ff818352015b610260516102c05261030060006003818352015b6020610300510261014001516102e0526102c0516102605180820282158284830414176108c857600080fd5b809050905090506102e051600380820282158284830414176108e957600080fd5b80905090509050600181818301101561090157600080fd5b80820190509050808061091357600080fd5b8204905090506102c0525b815160010180835281141561089c575b50506102605161024052610280516101c051808202821582848304141761095457600080fd5b809050905090506102c0516003808202821582848304141761097557600080fd5b8090509050905081818301101561098b57600080fd5b808201905090506102605180820282158284830414176109aa57600080fd5b80905090509050610280516001808210156109c457600080fd5b808203905090506102605180820282158284830414176109e357600080fd5b8090509050905060046102c0518082028215828483041417610a0457600080fd5b80905090509050818183011015610a1a57600080fd5b808201905090508080610a2c57600080fd5b8204905090506102605261024051610260511115610a73576001610260516102405180821015610a5b57600080fd5b80820390509050111515610a6e57610aaf565b610a9e565b6001610240516102605180821015610a8a57600080fd5b80820390509050111515610a9d57610aaf565b5b5b8151600101808352811415610888575b5050610260516000526000516101a0515650005b600015610c5b575b610200526101405261016052610180526101a0526101c0526101e052610140610560525b61056051516020610560510161056052610560610560511015610b1157610aef565b639123128a610580526105a06101406103c0525b6103c0515160206103c051016103c0526103c06103c0511015610b4757610b25565b6368a4db616103e05261040061014080518252806020015182602001528060400151826040015250506104606101a080518252806020015182602001528060400151826040015250506104a0516104805161046051610440516104205161040051600658016106ab565b6105005261052052610540526103a06103c0525b6103c0515260206103c051036103c0526101406103c051101515610be857610bc5565b61050080518252806020015182602001528060400151826040015250506105e0516105c0516105a051600658016107ca565b61064052610540610560525b6105605152602061056051036105605261014061056051101515610c4957610c26565b61064051600052600051610200515650005b63bb7b8b806000511415610eab573415610c7457600080fd5b6101406105e0525b6105e0515160206105e051016105e0526105e06105e0511015610c9e57610c7c565b639123128a610600526106206101406104a0525b6104a0515160206104a051016104a0526104a06104a0511015610cd457610cb2565b637aca288a6104c0526104e0610140610420525b61042051516020610420510161042052610420610420511015610d0a57610ce8565b600658016100a9565b610440526104605261048052610400610420525b6104205152602061042051036104205261014061042051101515610d4a57610d27565b610440805182528060200151826020015280604001518260400152505061052051610500516104e05160065801610594565b610580526105a0526105c0526104806104a0525b6104a0515260206104a051036104a0526101406104a051101515610db357610d90565b6105808051825280602001518260200152806040015182604001525050610660516106405161062051600658016107ca565b6106c0526105c06105e0525b6105e0515260206105e051036105e0526101406105e051101515610e1457610df1565b6106c051610140526007543b610e2957600080fd5b6007543018610e3757600080fd5b602061076060046318160ddd6107005261071c6007545afa610e5857600080fd5b600050610760516106e05261014051670de0b6b3a76400008082028215828483041417610e8457600080fd5b809050905090506106e0518080610e9a57600080fd5b82049050905060005260206000f350005b633883e11960005114156112a6573415610ec457600080fd5b60643560028110610ed457600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506101a06101405161016051610180516101a0516101c0516101e051600658016100a9565b6102205261024052610260526101e0526101c0526101a05261018052610160526101405261022080518252806020015182602001528060400151826040015250506101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015610f9b57610f79565b632a8722f06102c0526102e06101a08051825280602001518260200152806040015182604001525050610340610140805182528060200151826020015280604001518260400152505061038051610360516103405161032051610300516102e05160065801610acb565b6103e0526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561103457611011565b6103e0516102805261040060006003818352015b606435156110a057610140610400516003811061106457600080fd5b6020020180516004610400516003811061107d57600080fd5b602002013581818301101561109157600080fd5b808201905090508152506110ea565b61014061040051600381106110b457600080fd5b602002018051600461040051600381106110cd57600080fd5b6020020135808210156110df57600080fd5b808203905090508152505b5b8151600101808352811415611048575b5050610140610440525b6104405151602061044051016104405261044061044051101561112757611105565b632a8722f0610460526104806101a080518252806020015182602001528060400151826040015250506104e0610140805182528060200151826020015280604001518260400152505061052051610500516104e0516104c0516104a0516104805160065801610acb565b61058052610420610440525b61044051526020610440510361044052610140610440511015156111c05761119d565b61058051610420526007543b6111d557600080fd5b60075430186111e357600080fd5b602061062060046318160ddd6105c0526105dc6007545afa61120457600080fd5b600050610620516105a052600061064052606435156112425761042051610280518082101561123257600080fd5b8082039050905061064052611263565b61028051610420518082101561125757600080fd5b80820390509050610640525b610640516105a051808202821582848304141761127f57600080fd5b8090509050905061028051808061129557600080fd5b82049050905060005260206000f350005b634515cef36000511415611da65762ffffff54156112c357600080fd5b600162ffffff5534156112d557600080fd5b600f54156112e257600080fd5b610140600081526000816020015260018160400152506101a060018152600181602001526000816040015250610200600081526000816020015260008160400152506004546003808202821582848304141761133d57600080fd5b809050905090506008808061135157600080fd5b82049050905061026052600554610280526007543b61136f57600080fd5b600754301861137d57600080fd5b602061032060046318160ddd6102c0526102dc6007545afa61139e57600080fd5b600050610320516102a0526103406101406103a0525b6103a0515160206103a051016103a0526103a06103a05110156113d6576113b4565b600658016103fa565b6103c0526103e052610400526103806103a0525b6103a0515260206103a051036103a0526101406103a051101515611416576113f3565b6103c0805182528060200151826020015280604001518260400152505060006104205261044060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c02001548260400152505060006102a0511115611548576101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156114a657611484565b632a8722f06104c0526104e06103408051825280602001518260200152806040015182604001525050610540610440805182528060200151826020015280604001518260400152505061058051610560516105405161052051610500516104e05160065801610acb565b6105e0526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561153f5761151c565b6105e051610420525b610600610440805182528060200151826020015280604001518260400152505061066060006003818352015b6102a05115156115a35760006004610660516003811061159357600080fd5b6020020135116115a257600080fd5b5b61044061066051600381106115b757600080fd5b6020020151600461066051600381106115cf57600080fd5b60200201358181830110156115e357600080fd5b8082019050905061060061066051600381106115fe57600080fd5b60200201525b8151600101808352811415611574575b50506101406106a0525b6106a0515160206106a051016106a0526106a06106a05110156116405761161e565b632a8722f06106c0526106e06103408051825280602001518260200152806040015182604001525050610740610600805182528060200151826020015280604001518260400152505061078051610760516107405161072051610700516106e05160065801610acb565b6107e0526106806106a0525b6106a0515260206106a051036106a0526101406106a0511015156116d9576116b6565b6107e051610680526104205161068051116116f357600080fd5b610680516108005260006102a0511115611a165761082060006003818352015b61068051610440610820516003811061172b57600080fd5b6020020151808202821582848304141761174457600080fd5b8090509050905061042051808061175a57600080fd5b82049050905061084052600061086052610600610820516003811061177e57600080fd5b60200201516108405111156117c7576108405161060061082051600381106117a557600080fd5b6020020151808210156117b757600080fd5b80820390509050610860526117fd565b61060061082051600381106117db57600080fd5b602002015161084051808210156117f157600080fd5b80820390509050610860525b6102605161086051808202821582848304141761181957600080fd5b809050905090506402540be400808061183157600080fd5b820490509050610200610820516003811061184b57600080fd5b6020020152610600610820516003811061186457600080fd5b6020020151610200610820516003811061187d57600080fd5b602002015161028051808202821582848304141761189a57600080fd5b809050905090506402540be40080806118b257600080fd5b820490509050808210156118c557600080fd5b8082039050905061082051600381106118dd57600080fd5b600260c052602060c020015561060061082051600381106118fd57600080fd5b602002018051610200610820516003811061191757600080fd5b60200201518082101561192957600080fd5b808203905090508152505b8151600101808352811415611713575b5050610140610880525b610880515160206108805101610880526108206108805110156119705761194e565b632a8722f06108a0526108c061034080518252806020015182602001528060400151826040015250506109206106008051825280602001518260200152806040015182604001525050610960516109405161092051610900516108e0516108c05160065801610acb565b6109c052610800610880525b6108805152602061088051036108805261014061088051101515611a09576119e6565b6109c05161080052611a3e565b600260c052602060c02061060080518255806020015160018301558060400151600283015550505b60006109e0526102a0511515611a5b57610680516109e052611ab0565b6102a051610800516104205180821015611a7457600080fd5b808203905090508082028215828483041417611a8f57600080fd5b80905090509050610420518080611aa557600080fd5b8204905090506109e0525b6308c379a0610a00526020610a20526014610a40527f536c697070616765207363726577656420796f75000000000000000000000000610a6052610a40506064356109e0511015611b02576084610a1cfd5b610aa060006003818352015b6101a0610aa05160038110611b2257600080fd5b602002015115610140610aa05160038110611b3c57600080fd5b60200201511615611bfd57610aa05160038110611b5857600080fd5b600060c052602060c02001543b611b6e57600080fd5b610aa05160038110611b7f57600080fd5b600060c052602060c02001543018611b9657600080fd5b6000600060646323b872dd610ba05233610bc05230610be0526004610aa05160038110611bc257600080fd5b6020020135610c0052610bbc6000610aa05160038110611be157600080fd5b600060c052602060c02001545af1611bf857600080fd5b611cc0565b610aa05160038110611c0e57600080fd5b600060c052602060c02001543b611c2457600080fd5b610aa05160038110611c3557600080fd5b600060c052602060c02001543018611c4c57600080fd5b6020610b8060646323b872dd610ac05233610ae05230610b00526004610aa05160038110611c7957600080fd5b6020020135610b2052610adc6000610aa05160038110611c9857600080fd5b600060c052602060c02001545af1611caf57600080fd5b600050610b8051611cbf57600080fd5b5b5b8151600101808352811415611b0e575b50506007543b611ce057600080fd5b6007543018611cee57600080fd5b6000600060446340c10f19610c605233610c80526109e051610ca052610c7c60006007545af1611d1d57600080fd5b600435610d0052602435610d2052604435610d405261020051610d605261022051610d805261024051610da05261068051610dc0526102a0516109e051818183011015611d6957600080fd5b80820190509050610de052337f423f6495a08fc652425cf4ed0d1f9e37e571d9b9529b1c1c23cce780b2e7df0d610100610d00a2600062ffffff55005b600015612190575b610200526101405261016052610180526101a0526101c0526101e0526000610140511215610160516101405114151660006101605112151660036101405112166003610160511216611dff57600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051639123128a610260526102806101a080518252806020015182602001528060400151826040015250506102c0516102a05161028051600658016107ca565b6103205261022052610200526101e0526101c0526101a0526101805261016052610140526103205161022052610220516103405260006103605260035460038082028215828483041417611eb057600080fd5b809050905090506103805260006103a0526103c060006003818352015b610140516103c0511415611ee857610180516103a052611f1e565b610160516103c0511815611f18576101a06103c05160038110611f0a57600080fd5b60200201516103a052611f1d565b611f9a565b5b61036080516103a051818183011015611f3657600080fd5b8082019050905081525061034051610220518082028215828483041417611f5c57600080fd5b809050905090506103a05160038082028215828483041417611f7d57600080fd5b809050905090508080611f8f57600080fd5b820490509050610340525b8151600101808352811415611ecd575b505061034051610220518082028215828483041417611fc857600080fd5b809050905090506103805160038082028215828483041417611fe957600080fd5b809050905090508080611ffb57600080fd5b82049050905061034052610360516102205161038051808061201c57600080fd5b82049050905081818301101561203157600080fd5b808201905090506103e0526000610400526102205161042052610440600060ff818352015b61042051610400526104205161042051808202821582848304141761207a57600080fd5b809050905090506103405181818301101561209457600080fd5b8082019050905060026104205180820282158284830414176120b557600080fd5b809050905090506103e0518181830110156120cf57600080fd5b8082019050905061022051808210156120e757600080fd5b8082039050905080806120f957600080fd5b820490509050610420526104005161042051111561214057600161042051610400518082101561212857600080fd5b8082039050905011151561213b5761217c565b61216b565b600161040051610420518082101561215757600080fd5b8082039050905011151561216a5761217c565b5b5b8151600101808352811415612056575b505061042051600052600051610200515650005b635e0d443f60005114156125225734156121a957600080fd5b606051600435806040519013156121bf57600080fd5b80919012156121cd57600080fd5b50606051602435806040519013156121e457600080fd5b80919012156121f257600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506102206004356003811061230d57600080fd5b60200201516044356101406004356003811061232857600080fd5b6020020151808202821582848304141761234157600080fd5b80905090509050670de0b6b3a7640000808061235c57600080fd5b82049050905081818301101561237157600080fd5b808201905090506103c052610140610400525b610400515160206104005101610400526104006104005110156123a657612384565b63554abe286104205260043561044052602435610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611dae565b610540526103e0610400525b610400515260206104005103610400526101406104005110151561243557612412565b610540516103e0526102206024356003811061245057600080fd5b60200201516103e0518082101561246657600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761248a57600080fd5b80905090509050610140602435600381106124a457600080fd5b602002015180806124b457600080fd5b820490509050610560526004546105605180820282158284830414176124d957600080fd5b809050905090506402540be40080806124f157600080fd5b8204905090506105805261056051610580518082101561251057600080fd5b8082039050905060005260206000f350005b6367df02ca60005114156128ac57341561253b57600080fd5b6060516004358060405190131561255157600080fd5b809190121561255f57600080fd5b506060516024358060405190131561257657600080fd5b809190121561258457600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506102206024356003811061269f57600080fd5b60200201516044356402540be40080820282158284830414176126c157600080fd5b809050905090506402540be400600454808210156126de57600080fd5b8082039050905080806126f057600080fd5b8204905090506101406024356003811061270957600080fd5b6020020151808202821582848304141761272257600080fd5b80905090509050670de0b6b3a7640000808061273d57600080fd5b8204905090508082101561275057600080fd5b808203905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561278557612763565b63554abe286104205260243561044052600435610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611dae565b610540526103e0610400525b6104005152602061040051036104005261014061040051101515612814576127f1565b610540516103e0526103e0516102206004356003811061283357600080fd5b60200201518082101561284557600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761286957600080fd5b809050905090506101406004356003811061288357600080fd5b6020020151808061289357600080fd5b820490509050610560526105605160005260206000f350005b6307211ef76000511415612c1e5734156128c557600080fd5b606051600435806040519013156128db57600080fd5b80919012156128e957600080fd5b506060516024358060405190131561290057600080fd5b809190121561290e57600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506103c06001815264e8d4a51000816020015264e8d4a5100081604001525061022060043560038110612a4757600080fd5b60200201516044356103c060043560038110612a6257600080fd5b60200201518082028215828483041417612a7b57600080fd5b80905090509050818183011015612a9157600080fd5b8082019050905061042052610140610460525b61046051516020610460510161046052610460610460511015612ac657612aa4565b63554abe28610480526004356104a0526024356104c052610420516104e05261050061022080518252806020015182602001528060400151826040015250506105405161052051610500516104e0516104c0516104a05160065801611dae565b6105a052610440610460525b6104605152602061046051036104605261014061046051101515612b5557612b32565b6105a0516104405261022060243560038110612b7057600080fd5b60200201516104405180821015612b8657600080fd5b808203905090506103c060243560038110612ba057600080fd5b60200201518080612bb057600080fd5b8204905090506105c0526004546105c0518082028215828483041417612bd557600080fd5b809050905090506402540be4008080612bed57600080fd5b8204905090506105e0526105c0516105e05180821015612c0c57600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612f88573415612c3757600080fd5b60605160043580604051901315612c4d57600080fd5b8091901215612c5b57600080fd5b5060605160243580604051901315612c7257600080fd5b8091901215612c8057600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506103c06001815264e8d4a51000816020015264e8d4a5100081604001525061022060243560038110612db957600080fd5b60200201516044356402540be4008082028215828483041417612ddb57600080fd5b809050905090506402540be40060045480821015612df857600080fd5b808203905090508080612e0a57600080fd5b8204905090506103c060243560038110612e2357600080fd5b60200201518082028215828483041417612e3c57600080fd5b8090509050905080821015612e5057600080fd5b8082039050905061042052610140610460525b61046051516020610460510161046052610460610460511015612e8557612e63565b63554abe28610480526024356104a0526004356104c052610420516104e05261050061022080518252806020015182602001528060400151826040015250506105405161052051610500516104e0516104c0516104a05160065801611dae565b6105a052610440610460525b6104605152602061046051036104605261014061046051101515612f1457612ef1565b6105a051610440526104405161022060043560038110612f3357600080fd5b602002015180821015612f4557600080fd5b808203905090506103c060043560038110612f5f57600080fd5b60200201518080612f6f57600080fd5b8204905090506105c0526105c05160005260206000f350005b6000156133fa575b610200526101405261016052610180526101a0526101c0526101e052600f5415612fb957600080fd5b6102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101a08051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103608051825280602001518260200152806040015182604001525050610220610140516003811061308757600080fd5b6020020151610180516101a061014051600381106130a457600080fd5b602002015180820282158284830414176130bd57600080fd5b80905090509050670de0b6b3a764000080806130d857600080fd5b8204905090508181830110156130ed57600080fd5b808201905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561312257613100565b63554abe2861042052610140516104405261016051610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611dae565b610540526103e0610400525b61040051526020610400510361040052610140610400511015156131b357613190565b610540516103e05261022061016051600381106131cf57600080fd5b60200201516103e051808210156131e557600080fd5b808203905090506105605261056051600454808202821582848304141761320b57600080fd5b809050905090506402540be400808061322357600080fd5b8204905090506105805261058051600554808202821582848304141761324857600080fd5b809050905090506402540be400808061326057600080fd5b8204905090506105a0526103c051670de0b6b3a7640000808202821582848304141761328b57600080fd5b809050905090506101a061014051600381106132a657600080fd5b602002015180806132b657600080fd5b82049050905061014051600381106132cd57600080fd5b600260c052602060c02001556103e051610580516105a051808210156132f257600080fd5b8082039050905081818301101561330857600080fd5b80820190509050670de0b6b3a7640000808202821582848304141761332c57600080fd5b809050905090506101a0610160516003811061334757600080fd5b6020020151808061335757600080fd5b820490509050610160516003811061336e57600080fd5b600260c052602060c020015561056051610580518082101561338f57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176133b357600080fd5b809050905090506101a061016051600381106133ce57600080fd5b602002015180806133de57600080fd5b8204905090506105c0526105c051600052600051610200515650005b633df0212460005114156139545762ffffff541561341757600080fd5b600162ffffff55341561342957600080fd5b6060516004358060405190131561343f57600080fd5b809190121561344d57600080fd5b506060516024358060405190131561346457600080fd5b809190121561347257600080fd5b50610140610140516101605161018051600658016103fa565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e051610200516102205163cf6eee7661026052600435610280526024356102a0526044356102c0526102e0610140805182528060200151826020015280604001518260400152505061032051610300516102e0516102c0516102a0516102805160065801612f90565b6103805261022052610200526101e0526101c0526101a05261018052610160526101405261038051610220526308c379a06103a05260206103c052602e6103e0527f45786368616e676520726573756c74656420696e20666577657220636f696e73610400527f207468616e206578706563746564000000000000000000000000000000000000610420526103e0506064356102205110156135e25760a46103bcfd5b610460600081526000816020015260018160400152506104c0600181526001816020015260008160400152506104c06004356003811061362157600080fd5b6020020151156104606004356003811061363a57600080fd5b602002015116156136e3576004356003811061365557600080fd5b600060c052602060c02001543b61366b57600080fd5b6004356003811061367b57600080fd5b600060c052602060c0200154301861369257600080fd5b6000600060646323b872dd61060052336106205230610640526044356106605261061c6000600435600381106136c757600080fd5b600060c052602060c02001545af16136de57600080fd5b61378e565b600435600381106136f357600080fd5b600060c052602060c02001543b61370957600080fd5b6004356003811061371957600080fd5b600060c052602060c0200154301861373057600080fd5b60206105e060646323b872dd61052052336105405230610560526044356105805261053c60006004356003811061376657600080fd5b600060c052602060c02001545af161377d57600080fd5b6000506105e05161378d57600080fd5b5b6104c0602435600381106137a157600080fd5b602002015115610460602435600381106137ba57600080fd5b6020020151161561385f57602435600381106137d557600080fd5b600060c052602060c02001543b6137eb57600080fd5b602435600381106137fb57600080fd5b600060c052602060c0200154301861381257600080fd5b60006000604463a9059cbb61078052336107a052610220516107c05261079c60006024356003811061384357600080fd5b600060c052602060c02001545af161385a57600080fd5b613906565b6024356003811061386f57600080fd5b600060c052602060c02001543b61388557600080fd5b6024356003811061389557600080fd5b600060c052602060c020015430186138ac57600080fd5b6020610760604463a9059cbb6106c052336106e05261022051610700526106dc6000602435600381106138de57600080fd5b600060c052602060c02001545af16138f557600080fd5b6000506107605161390557600080fd5b5b6004356108205260443561084052602435610860526102205161088052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610820a2600062ffffff55005b63a6417ed660005114156142995762ffffff541561397157600080fd5b600162ffffff55341561398357600080fd5b6060516004358060405190131561399957600080fd5b80919012156139a757600080fd5b50606051602435806040519013156139be57600080fd5b80919012156139cc57600080fd5b50610140610140516101605161018051600658016103fa565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206001815264e8d4a51000816020015264e8d4a5100081604001525061014060043560038110613a4b57600080fd5b602002015161022060043560038110613a6357600080fd5b60200201518080613a7357600080fd5b8204905090506102805261014060243560038110613a9057600080fd5b602002015161022060243560038110613aa857600080fd5b60200201518080613ab857600080fd5b8204905090506102a052604435670de0b6b3a76400008082028215828483041417613ae257600080fd5b80905090509050610280518080613af857600080fd5b8204905090506102c052610140610300525b61030051516020610300510161030052610300610300511015613b2c57613b0a565b63cf6eee766103205260043561034052602435610360526102c051610380526103a061014080518252806020015182602001528060400151826040015250506103e0516103c0516103a05161038051610360516103405160065801612f90565b610440526102e0610300525b6103005152602061030051036103005261014061030051101515613bbb57613b98565b610440516102e0526102e0516102a0518082028215828483041417613bdf57600080fd5b80905090509050670de0b6b3a76400008080613bfa57600080fd5b820490509050610460526308c379a06104805260206104a052602e6104c0527f45786368616e676520726573756c74656420696e20666577657220636f696e736104e0527f207468616e206578706563746564000000000000000000000000000000000000610500526104c050606435610460511015613c7b5760a461049cfd5b610540600181526001816020015260008160400152506105a0600081526000816020015260018160400152506000610600526105a060043560038110613cc057600080fd5b602002015115613d685760043560038110613cda57600080fd5b600160c052602060c02001543b613cf057600080fd5b60043560038110613d0057600080fd5b600160c052602060c02001543018613d1757600080fd5b6000600060646323b872dd61070052336107205230610740526044356107605261071c600060043560038110613d4c57600080fd5b600160c052602060c02001545af1613d6357600080fd5b613e13565b60043560038110613d7857600080fd5b600160c052602060c02001543b613d8e57600080fd5b60043560038110613d9e57600080fd5b600160c052602060c02001543018613db557600080fd5b60206106e060646323b872dd61062052336106405230610660526044356106805261063c600060043560038110613deb57600080fd5b600160c052602060c02001545af1613e0257600080fd5b6000506106e051613e1257600080fd5b5b61054060043560038110613e2657600080fd5b602002015115613fdb5760043560038110613e4057600080fd5b600160c052602060c02001543b613e5657600080fd5b60043560038110613e6657600080fd5b600160c052602060c02001543018613e7d57600080fd5b6020610860604463095ea7b36107c05260043560038110613e9d57600080fd5b600060c052602060c02001546107e052604435610800526107dc600060043560038110613ec957600080fd5b600160c052602060c02001545af1613ee057600080fd5b6000506108605060043560038110613ef757600080fd5b600060c052602060c02001543b613f0d57600080fd5b60043560038110613f1d57600080fd5b600060c052602060c02001543018613f3457600080fd5b6020610900602463a0712d68610880526044356108a05261089c600060043560038110613f6057600080fd5b600060c052602060c02001545af1613f7757600080fd5b60005061090051610600526000610600511115613fda576308c379a0610920526020610940526013610960527f436f756c64206e6f74206d696e7420636f696e0000000000000000000000000061098052610960506000613fd957608461093cfd5b5b5b61054060243560038110613fee57600080fd5b6020020151156140ed576024356003811061400857600080fd5b600060c052602060c02001543b61401e57600080fd5b6024356003811061402e57600080fd5b600060c052602060c0200154301861404557600080fd5b6020610a40602463db006a756109c0526102e0516109e0526109dc60006024356003811061407257600080fd5b600060c052602060c02001545af161408957600080fd5b600050610a40516106005260006106005111156140ec576308c379a0610a60526020610a80526015610aa0527f436f756c64206e6f742072656465656d20636f696e0000000000000000000000610ac052610aa05060006140eb576084610a7cfd5b5b5b6105a06024356003811061410057600080fd5b6020020151156141a4576024356003811061411a57600080fd5b600160c052602060c02001543b61413057600080fd5b6024356003811061414057600080fd5b600160c052602060c0200154301861415757600080fd5b60006000604463a9059cbb610bc05233610be05261046051610c0052610bdc60006024356003811061418857600080fd5b600160c052602060c02001545af161419f57600080fd5b61424b565b602435600381106141b457600080fd5b600160c052602060c02001543b6141ca57600080fd5b602435600381106141da57600080fd5b600160c052602060c020015430186141f157600080fd5b6020610ba0604463a9059cbb610b005233610b205261046051610b4052610b1c60006024356003811061422357600080fd5b600160c052602060c02001545af161423a57600080fd5b600050610ba05161424a57600080fd5b5b600435610c6052604435610c8052602435610ca05261046051610cc052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610c60a2600062ffffff55005b63ecb586a560005114156147055762ffffff54156142b657600080fd5b600162ffffff5534156142c857600080fd5b6007543b6142d557600080fd5b60075430186142e357600080fd5b60206101c060046318160ddd6101605261017c6007545afa61430457600080fd5b6000506101c051610140526101e060008152600081602001526000816040015250610240600081526000816020015260008160400152506102a0600081526000816020015260018160400152506103006001815260018160200152600081604001525061036060006003818352015b610360516003811061438457600080fd5b600260c052602060c020015460043580820282158284830414176143a757600080fd5b809050905090506101405180806143bd57600080fd5b820490509050610380526308c379a06103a05260206103c05260306103e0527f5769746864726177616c20726573756c74656420696e20666577657220636f69610400527f6e73207468616e20657870656374656400000000000000000000000000000000610420526103e0506024610360516003811061443d57600080fd5b60200201356103805110156144535760a46103bcfd5b610360516003811061446457600080fd5b600260c052602060c020018054610380518082101561448257600080fd5b80820390509050815550610380516101e061036051600381106144a457600080fd5b602002015261030061036051600381106144bd57600080fd5b6020020151156102a061036051600381106144d757600080fd5b6020020151161561457f5761036051600381106144f357600080fd5b600060c052602060c02001543b61450957600080fd5b610360516003811061451a57600080fd5b600060c052602060c0200154301861453157600080fd5b60006000604463a9059cbb610520523361054052610380516105605261053c6000610360516003811061456357600080fd5b600060c052602060c02001545af161457a57600080fd5b614629565b610360516003811061459057600080fd5b600060c052602060c02001543b6145a657600080fd5b61036051600381106145b757600080fd5b600060c052602060c020015430186145ce57600080fd5b6020610500604463a9059cbb610460523361048052610380516104a05261047c6000610360516003811061460157600080fd5b600060c052602060c02001545af161461857600080fd5b6000506105005161462857600080fd5b5b5b8151600101808352811415614373575b50506007543b61464957600080fd5b600754301861465757600080fd5b6000600060446379cc67906105c052336105e052600435610600526105dc60006007545af161468557600080fd5b6101e051610660526102005161068052610220516106a052610240516106c052610260516106e052610280516107005261014051600435808210156146c957600080fd5b8082039050905061072052337fa49d4cf02656aebf8c771f5a8585638a2a15ee6c97cf7205d4208ed7c1df252d60e0610660a2600062ffffff55005b639fdaea0c600051141561514f5762ffffff541561472257600080fd5b600162ffffff55341561473457600080fd5b600f541561474157600080fd5b610140600081526000816020015260018160400152506101a0600181526001816020015260008160400152506007543b61477a57600080fd5b600754301861478857600080fd5b602061028060046318160ddd6102205261023c6007545afa6147a957600080fd5b6000506102805161020052600061020051116147c457600080fd5b600454600380820282158284830414176147dd57600080fd5b80905090509050600880806147f157600080fd5b8204905090506102a0526005546102c0526102e0610140610340525b6103405151602061034051016103405261034061034051101561482f5761480d565b600658016103fa565b61036052610380526103a052610320610340525b610340515260206103405103610340526101406103405110151561486f5761484c565b61036080518252806020015182602001528060400151826040015250506103c060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506104206103c080518252806020015182602001528060400151826040015250506101406104a0525b6104a0515160206104a051016104a0526104a06104a051101561490d576148eb565b632a8722f06104c0526104e06102e080518252806020015182602001528060400151826040015250506105406103c0805182528060200151826020015280604001518260400152505061058051610560516105405161052051610500516104e05160065801610acb565b6105e0526104806104a0525b6104a0515260206104a051036104a0526101406104a0511015156149a657614983565b6105e0516104805261060060006003818352015b61042061060051600381106149ce57600080fd5b602002018051600461060051600381106149e757600080fd5b6020020135808210156149f957600080fd5b808203905090508152505b81516001018083528114156149ba575b5050610140610640525b61064051516020610640510161064052610640610640511015614a4057614a1e565b632a8722f0610660526106806102e080518252806020015182602001528060400151826040015250506106e0610420805182528060200151826020015280604001518260400152505061072051610700516106e0516106c0516106a0516106805160065801610acb565b61078052610620610640525b6106405152602061064051036106405261014061064051101515614ad957614ab6565b61078051610620526107a06000815260008160200152600081604001525061080060006003818352015b610620516103c06108005160038110614b1b57600080fd5b60200201518082028215828483041417614b3457600080fd5b80905090509050610480518080614b4a57600080fd5b820490509050610820526000610840526104206108005160038110614b6e57600080fd5b6020020151610820511115614bb757610820516104206108005160038110614b9557600080fd5b602002015180821015614ba757600080fd5b8082039050905061084052614bed565b6104206108005160038110614bcb57600080fd5b60200201516108205180821015614be157600080fd5b80820390509050610840525b6102a051610840518082028215828483041417614c0957600080fd5b809050905090506402540be4008080614c2157600080fd5b8204905090506107a06108005160038110614c3b57600080fd5b60200201526104206108005160038110614c5457600080fd5b60200201516107a06108005160038110614c6d57600080fd5b60200201516102c0518082028215828483041417614c8a57600080fd5b809050905090506402540be4008080614ca257600080fd5b82049050905080821015614cb557600080fd5b808203905090506108005160038110614ccd57600080fd5b600260c052602060c02001556104206108005160038110614ced57600080fd5b6020020180516107a06108005160038110614d0757600080fd5b602002015180821015614d1957600080fd5b808203905090508152505b8151600101808352811415614b03575b5050610140610880525b61088051516020610880510161088052610880610880511015614d6057614d3e565b632a8722f06108a0526108c06102e080518252806020015182602001528060400151826040015250506109206104208051825280602001518260200152806040015182604001525050610960516109405161092051610900516108e0516108c05160065801610acb565b6109c052610860610880525b6108805152602061088051036108805261014061088051101515614df957614dd6565b6109c05161086052610480516108605180821015614e1657600080fd5b80820390509050610200518082028215828483041417614e3557600080fd5b80905090509050610480518080614e4b57600080fd5b8204905090506109e05260006109e05111614e6557600080fd5b6308c379a0610a00526020610a20526014610a40527f536c697070616765207363726577656420796f75000000000000000000000000610a6052610a40506064356109e0511115614eb7576084610a1cfd5b610aa060006003818352015b6101a0610aa05160038110614ed757600080fd5b602002015115610140610aa05160038110614ef157600080fd5b60200201511615614fad57610aa05160038110614f0d57600080fd5b600060c052602060c02001543b614f2357600080fd5b610aa05160038110614f3457600080fd5b600060c052602060c02001543018614f4b57600080fd5b60006000604463a9059cbb610b805233610ba0526004610aa05160038110614f7257600080fd5b6020020135610bc052610b9c6000610aa05160038110614f9157600080fd5b600060c052602060c02001545af1614fa857600080fd5b61506b565b610aa05160038110614fbe57600080fd5b600060c052602060c02001543b614fd457600080fd5b610aa05160038110614fe557600080fd5b600060c052602060c02001543018614ffc57600080fd5b6020610b60604463a9059cbb610ac05233610ae0526004610aa0516003811061502457600080fd5b6020020135610b0052610adc6000610aa0516003811061504357600080fd5b600060c052602060c02001545af161505a57600080fd5b600050610b605161506a57600080fd5b5b5b8151600101808352811415614ec3575b50506007543b61508b57600080fd5b600754301861509957600080fd5b6000600060446379cc6790610c205233610c40526109e051610c6052610c3c60006007545af16150c857600080fd5b600435610cc052602435610ce052604435610d00526107a051610d20526107c051610d40526107e051610d605261062051610d8052610200516109e0518082101561511257600080fd5b80820390509050610da052337f173599dbf9c6ca6f7c3b590df07ae98a45d74ff54065505141e7de6c46a624c2610100610cc0a2600062ffffff55005b63ee11f5b6600051141561521157341561516857600080fd5b600654331461517657600080fd5b6008541561518357600080fd5b64012a05f200604435111561519757600080fd5b426203f4808181830110156151ab57600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd60005114156152be57341561522a57600080fd5b600654331461523857600080fd5b6000600854114260085411151661524e57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb60005114156152ec5734156152d757600080fd5b60065433146152e557600080fd5b6000600855005b636b441a40600051141561538d57341561530557600080fd5b600435602051811061531657600080fd5b50600654331461532557600080fd5b6009541561533257600080fd5b426203f48081818301101561534657600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156154095734156153a657600080fd5b60065433146153b457600080fd5b600060095411600954421015166153ca57600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561543757341561542257600080fd5b600654331461543057600080fd5b6000600955005b6330c54085600051141561566157341561545057600080fd5b600654331461545e57600080fd5b6101406001815264e8d4a51000816020015264e8d4a510008160400152506101a0600081526000816020015260018160400152506102006001815260018160200152600081604001525061026060006003818352015b61026051600381106154c557600080fd5b600060c052602060c020015461028052610280513b6154e357600080fd5b6102805130186154f257600080fd5b602061034060246370a082316102c052306102e0526102dc610280515afa61551957600080fd5b60005061034051610260516003811061553157600080fd5b600260c052602060c02001548082101561554a57600080fd5b808203905090506102a05260006102a051111561564c57610200610260516003811061557557600080fd5b6020020151156101a0610260516003811061558f57600080fd5b602002015116156155ec57610280513b6155a857600080fd5b6102805130186155b757600080fd5b60006000604463a9059cbb6104205233610440526102a0516104605261043c6000610280515af16155e757600080fd5b61564b565b610280513b6155fa57600080fd5b61028051301861560957600080fd5b6020610400604463a9059cbb6103605233610380526102a0516103a05261037c6000610280515af161563a57600080fd5b6000506104005161564a57600080fd5b5b5b5b81516001018083528114156154b4575b5050005b63e3698853600051141561569d57341561567a57600080fd5b600654331461568857600080fd5b42600e541161569657600080fd5b6001600f55005b633046f97260005114156156cb5734156156b657600080fd5b60065433146156c457600080fd5b6000600f55005b6323746eb860005114156157305734156156e457600080fd5b606051600435806040519013156156fa57600080fd5b809190121561570857600080fd5b506004356003811061571957600080fd5b600060c052602060c020015460005260206000f350005b63b739953e600051141561579557341561574957600080fd5b6060516004358060405190131561575f57600080fd5b809190121561576d57600080fd5b506004356003811061577e57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156157fa5734156157ae57600080fd5b606051600435806040519013156157c457600080fd5b80919012156157d257600080fd5b50600435600381106157e357600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d0600051141561582157341561581357600080fd5b60035460005260206000f350005b63ddca3f43600051141561584857341561583a57600080fd5b60045460005260206000f350005b63fee3f7f9600051141561586f57341561586157600080fd5b60055460005260206000f350005b638da5cb5b600051141561589657341561588857600080fd5b60065460005260206000f350005b63405e28f860005114156158bd5734156158af57600080fd5b60085460005260206000f350005b63e0a0b58660005114156158e45734156158d657600080fd5b60095460005260206000f350005b63b4b577ad600051141561590b5734156158fd57600080fd5b600a5460005260206000f350005b6358680d0b600051141561593257341561592457600080fd5b600b5460005260206000f350005b63e3824462600051141561595957341561594b57600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561598057341561597257600080fd5b600d5460005260206000f350005b5b60006000fd5b610286615c0d03610286600039610286615c0d036000f30000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009fc689ccada600b6df723d9e47d84d76664a1f23000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000003d0900Deployed Bytecode
0x600436101561000d57615981565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156103f2575b610140526101606001815264e8d4a51000816020015264e8d4a510008160400152506101c06001815260018160200152600081604001525061022060006003818352015b670de0b6b3a7640000610240526101c0610220516003811061010e57600080fd5b60200201511561036757610220516003811061012957600080fd5b600060c052602060c02001543b61013f57600080fd5b610220516003811061015057600080fd5b600060c052602060c0200154301861016757600080fd5b60206102c0600463182df0f56102605261027c610220516003811061018b57600080fd5b600060c052602060c02001545afa6101a257600080fd5b6000506102c0516102405261022051600381106101be57600080fd5b600060c052602060c02001543b6101d457600080fd5b61022051600381106101e557600080fd5b600060c052602060c020015430186101fc57600080fd5b6020610360600463ae9d70b06103005261031c610220516003811061022057600080fd5b600060c052602060c02001545afa61023757600080fd5b600050610360516102e052610220516003811061025357600080fd5b600060c052602060c02001543b61026957600080fd5b610220516003811061027a57600080fd5b600060c052602060c0200154301861029157600080fd5b60206104006004636c540baf6103a0526103bc61022051600381106102b557600080fd5b600060c052602060c02001545afa6102cc57600080fd5b60005061040051610380526102408051610240516102e05180820282158284830414176102f857600080fd5b8090509050905043610380518082101561031157600080fd5b80820390509050808202821582848304141761032c57600080fd5b80905090509050670de0b6b3a7640000808061034757600080fd5b82049050905081818301101561035c57600080fd5b808201905090508152505b610160610220516003811061037b57600080fd5b60200201805161024051808202821582848304141761039957600080fd5b809050905090508152505b81516001018083528114156100ed575b50506060610420525b6000610420511115156103cf576103eb565b60206104205103610160015160206104205103610420526103bd565b6101405156005b60001561058c575b610140526101606001815264e8d4a51000816020015264e8d4a510008160400152506101c06001815260018160200152600081604001525061022060006003818352015b670de0b6b3a7640000610240526101c0610220516003811061045f57600080fd5b60200201511561050157610220516003811061047a57600080fd5b600060c052602060c02001543b61049057600080fd5b61022051600381106104a157600080fd5b600060c052602060c020015430186104b857600080fd5b60206102c0600463bd6d894d6102605261027c600061022051600381106104de57600080fd5b600060c052602060c02001545af16104f557600080fd5b6000506102c051610240525b610160610220516003811061051557600080fd5b60200201805161024051808202821582848304141761053357600080fd5b809050905090508152505b815160010180835281141561043e575b505060606102e0525b60006102e05111151561056957610585565b60206102e05103610160015160206102e051036102e052610557565b6101405156005b6000156106a3575b6101a0526101405261016052610180526101c0610140805182528060200151826020015280604001518260400152505061022060006003818352015b6101c061022051600381106105e457600080fd5b602002015161022051600381106105fa57600080fd5b600260c052602060c0200154808202821582848304141761061a57600080fd5b80905090509050670de0b6b3a7640000808061063557600080fd5b8204905090506101c0610220516003811061064f57600080fd5b60200201525b81516001018083528114156105d0575b50506060610240525b6000610240511115156106805761069c565b602061024051036101c00151602061024051036102405261066e565b6101a05156005b6000156107c2575b610200526101405261016052610180526101a0526101c0526101e052610220610140805182528060200151826020015280604001518260400152505061028060006003818352015b610220610280516003811061070757600080fd5b60200201516101a0610280516003811061072057600080fd5b6020020151808202821582848304141761073957600080fd5b80905090509050670de0b6b3a7640000808061075457600080fd5b820490509050610220610280516003811061076e57600080fd5b60200201525b81516001018083528114156106f3575b505060606102a0525b60006102a05111151561079f576107bb565b60206102a05103610220015160206102a051036102a05261078d565b6102005156005b600015610ac3575b6101a05261014052610160526101805260006101c05261020060006003818352015b6020610200510261014001516101e0526101c080516101e05181818301101561081457600080fd5b808201905090508152505b81516001018083528114156107ec575b50506101c051151561084a5760006000526000516101a05156505b6000610240526101c051610260526003546003808202821582848304141761087157600080fd5b80905090509050610280526102a0600060ff818352015b610260516102c05261030060006003818352015b6020610300510261014001516102e0526102c0516102605180820282158284830414176108c857600080fd5b809050905090506102e051600380820282158284830414176108e957600080fd5b80905090509050600181818301101561090157600080fd5b80820190509050808061091357600080fd5b8204905090506102c0525b815160010180835281141561089c575b50506102605161024052610280516101c051808202821582848304141761095457600080fd5b809050905090506102c0516003808202821582848304141761097557600080fd5b8090509050905081818301101561098b57600080fd5b808201905090506102605180820282158284830414176109aa57600080fd5b80905090509050610280516001808210156109c457600080fd5b808203905090506102605180820282158284830414176109e357600080fd5b8090509050905060046102c0518082028215828483041417610a0457600080fd5b80905090509050818183011015610a1a57600080fd5b808201905090508080610a2c57600080fd5b8204905090506102605261024051610260511115610a73576001610260516102405180821015610a5b57600080fd5b80820390509050111515610a6e57610aaf565b610a9e565b6001610240516102605180821015610a8a57600080fd5b80820390509050111515610a9d57610aaf565b5b5b8151600101808352811415610888575b5050610260516000526000516101a0515650005b600015610c5b575b610200526101405261016052610180526101a0526101c0526101e052610140610560525b61056051516020610560510161056052610560610560511015610b1157610aef565b639123128a610580526105a06101406103c0525b6103c0515160206103c051016103c0526103c06103c0511015610b4757610b25565b6368a4db616103e05261040061014080518252806020015182602001528060400151826040015250506104606101a080518252806020015182602001528060400151826040015250506104a0516104805161046051610440516104205161040051600658016106ab565b6105005261052052610540526103a06103c0525b6103c0515260206103c051036103c0526101406103c051101515610be857610bc5565b61050080518252806020015182602001528060400151826040015250506105e0516105c0516105a051600658016107ca565b61064052610540610560525b6105605152602061056051036105605261014061056051101515610c4957610c26565b61064051600052600051610200515650005b63bb7b8b806000511415610eab573415610c7457600080fd5b6101406105e0525b6105e0515160206105e051016105e0526105e06105e0511015610c9e57610c7c565b639123128a610600526106206101406104a0525b6104a0515160206104a051016104a0526104a06104a0511015610cd457610cb2565b637aca288a6104c0526104e0610140610420525b61042051516020610420510161042052610420610420511015610d0a57610ce8565b600658016100a9565b610440526104605261048052610400610420525b6104205152602061042051036104205261014061042051101515610d4a57610d27565b610440805182528060200151826020015280604001518260400152505061052051610500516104e05160065801610594565b610580526105a0526105c0526104806104a0525b6104a0515260206104a051036104a0526101406104a051101515610db357610d90565b6105808051825280602001518260200152806040015182604001525050610660516106405161062051600658016107ca565b6106c0526105c06105e0525b6105e0515260206105e051036105e0526101406105e051101515610e1457610df1565b6106c051610140526007543b610e2957600080fd5b6007543018610e3757600080fd5b602061076060046318160ddd6107005261071c6007545afa610e5857600080fd5b600050610760516106e05261014051670de0b6b3a76400008082028215828483041417610e8457600080fd5b809050905090506106e0518080610e9a57600080fd5b82049050905060005260206000f350005b633883e11960005114156112a6573415610ec457600080fd5b60643560028110610ed457600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506101a06101405161016051610180516101a0516101c0516101e051600658016100a9565b6102205261024052610260526101e0526101c0526101a05261018052610160526101405261022080518252806020015182602001528060400151826040015250506101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015610f9b57610f79565b632a8722f06102c0526102e06101a08051825280602001518260200152806040015182604001525050610340610140805182528060200151826020015280604001518260400152505061038051610360516103405161032051610300516102e05160065801610acb565b6103e0526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561103457611011565b6103e0516102805261040060006003818352015b606435156110a057610140610400516003811061106457600080fd5b6020020180516004610400516003811061107d57600080fd5b602002013581818301101561109157600080fd5b808201905090508152506110ea565b61014061040051600381106110b457600080fd5b602002018051600461040051600381106110cd57600080fd5b6020020135808210156110df57600080fd5b808203905090508152505b5b8151600101808352811415611048575b5050610140610440525b6104405151602061044051016104405261044061044051101561112757611105565b632a8722f0610460526104806101a080518252806020015182602001528060400151826040015250506104e0610140805182528060200151826020015280604001518260400152505061052051610500516104e0516104c0516104a0516104805160065801610acb565b61058052610420610440525b61044051526020610440510361044052610140610440511015156111c05761119d565b61058051610420526007543b6111d557600080fd5b60075430186111e357600080fd5b602061062060046318160ddd6105c0526105dc6007545afa61120457600080fd5b600050610620516105a052600061064052606435156112425761042051610280518082101561123257600080fd5b8082039050905061064052611263565b61028051610420518082101561125757600080fd5b80820390509050610640525b610640516105a051808202821582848304141761127f57600080fd5b8090509050905061028051808061129557600080fd5b82049050905060005260206000f350005b634515cef36000511415611da65762ffffff54156112c357600080fd5b600162ffffff5534156112d557600080fd5b600f54156112e257600080fd5b610140600081526000816020015260018160400152506101a060018152600181602001526000816040015250610200600081526000816020015260008160400152506004546003808202821582848304141761133d57600080fd5b809050905090506008808061135157600080fd5b82049050905061026052600554610280526007543b61136f57600080fd5b600754301861137d57600080fd5b602061032060046318160ddd6102c0526102dc6007545afa61139e57600080fd5b600050610320516102a0526103406101406103a0525b6103a0515160206103a051016103a0526103a06103a05110156113d6576113b4565b600658016103fa565b6103c0526103e052610400526103806103a0525b6103a0515260206103a051036103a0526101406103a051101515611416576113f3565b6103c0805182528060200151826020015280604001518260400152505060006104205261044060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c02001548260400152505060006102a0511115611548576101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156114a657611484565b632a8722f06104c0526104e06103408051825280602001518260200152806040015182604001525050610540610440805182528060200151826020015280604001518260400152505061058051610560516105405161052051610500516104e05160065801610acb565b6105e0526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561153f5761151c565b6105e051610420525b610600610440805182528060200151826020015280604001518260400152505061066060006003818352015b6102a05115156115a35760006004610660516003811061159357600080fd5b6020020135116115a257600080fd5b5b61044061066051600381106115b757600080fd5b6020020151600461066051600381106115cf57600080fd5b60200201358181830110156115e357600080fd5b8082019050905061060061066051600381106115fe57600080fd5b60200201525b8151600101808352811415611574575b50506101406106a0525b6106a0515160206106a051016106a0526106a06106a05110156116405761161e565b632a8722f06106c0526106e06103408051825280602001518260200152806040015182604001525050610740610600805182528060200151826020015280604001518260400152505061078051610760516107405161072051610700516106e05160065801610acb565b6107e0526106806106a0525b6106a0515260206106a051036106a0526101406106a0511015156116d9576116b6565b6107e051610680526104205161068051116116f357600080fd5b610680516108005260006102a0511115611a165761082060006003818352015b61068051610440610820516003811061172b57600080fd5b6020020151808202821582848304141761174457600080fd5b8090509050905061042051808061175a57600080fd5b82049050905061084052600061086052610600610820516003811061177e57600080fd5b60200201516108405111156117c7576108405161060061082051600381106117a557600080fd5b6020020151808210156117b757600080fd5b80820390509050610860526117fd565b61060061082051600381106117db57600080fd5b602002015161084051808210156117f157600080fd5b80820390509050610860525b6102605161086051808202821582848304141761181957600080fd5b809050905090506402540be400808061183157600080fd5b820490509050610200610820516003811061184b57600080fd5b6020020152610600610820516003811061186457600080fd5b6020020151610200610820516003811061187d57600080fd5b602002015161028051808202821582848304141761189a57600080fd5b809050905090506402540be40080806118b257600080fd5b820490509050808210156118c557600080fd5b8082039050905061082051600381106118dd57600080fd5b600260c052602060c020015561060061082051600381106118fd57600080fd5b602002018051610200610820516003811061191757600080fd5b60200201518082101561192957600080fd5b808203905090508152505b8151600101808352811415611713575b5050610140610880525b610880515160206108805101610880526108206108805110156119705761194e565b632a8722f06108a0526108c061034080518252806020015182602001528060400151826040015250506109206106008051825280602001518260200152806040015182604001525050610960516109405161092051610900516108e0516108c05160065801610acb565b6109c052610800610880525b6108805152602061088051036108805261014061088051101515611a09576119e6565b6109c05161080052611a3e565b600260c052602060c02061060080518255806020015160018301558060400151600283015550505b60006109e0526102a0511515611a5b57610680516109e052611ab0565b6102a051610800516104205180821015611a7457600080fd5b808203905090508082028215828483041417611a8f57600080fd5b80905090509050610420518080611aa557600080fd5b8204905090506109e0525b6308c379a0610a00526020610a20526014610a40527f536c697070616765207363726577656420796f75000000000000000000000000610a6052610a40506064356109e0511015611b02576084610a1cfd5b610aa060006003818352015b6101a0610aa05160038110611b2257600080fd5b602002015115610140610aa05160038110611b3c57600080fd5b60200201511615611bfd57610aa05160038110611b5857600080fd5b600060c052602060c02001543b611b6e57600080fd5b610aa05160038110611b7f57600080fd5b600060c052602060c02001543018611b9657600080fd5b6000600060646323b872dd610ba05233610bc05230610be0526004610aa05160038110611bc257600080fd5b6020020135610c0052610bbc6000610aa05160038110611be157600080fd5b600060c052602060c02001545af1611bf857600080fd5b611cc0565b610aa05160038110611c0e57600080fd5b600060c052602060c02001543b611c2457600080fd5b610aa05160038110611c3557600080fd5b600060c052602060c02001543018611c4c57600080fd5b6020610b8060646323b872dd610ac05233610ae05230610b00526004610aa05160038110611c7957600080fd5b6020020135610b2052610adc6000610aa05160038110611c9857600080fd5b600060c052602060c02001545af1611caf57600080fd5b600050610b8051611cbf57600080fd5b5b5b8151600101808352811415611b0e575b50506007543b611ce057600080fd5b6007543018611cee57600080fd5b6000600060446340c10f19610c605233610c80526109e051610ca052610c7c60006007545af1611d1d57600080fd5b600435610d0052602435610d2052604435610d405261020051610d605261022051610d805261024051610da05261068051610dc0526102a0516109e051818183011015611d6957600080fd5b80820190509050610de052337f423f6495a08fc652425cf4ed0d1f9e37e571d9b9529b1c1c23cce780b2e7df0d610100610d00a2600062ffffff55005b600015612190575b610200526101405261016052610180526101a0526101c0526101e0526000610140511215610160516101405114151660006101605112151660036101405112166003610160511216611dff57600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051639123128a610260526102806101a080518252806020015182602001528060400151826040015250506102c0516102a05161028051600658016107ca565b6103205261022052610200526101e0526101c0526101a0526101805261016052610140526103205161022052610220516103405260006103605260035460038082028215828483041417611eb057600080fd5b809050905090506103805260006103a0526103c060006003818352015b610140516103c0511415611ee857610180516103a052611f1e565b610160516103c0511815611f18576101a06103c05160038110611f0a57600080fd5b60200201516103a052611f1d565b611f9a565b5b61036080516103a051818183011015611f3657600080fd5b8082019050905081525061034051610220518082028215828483041417611f5c57600080fd5b809050905090506103a05160038082028215828483041417611f7d57600080fd5b809050905090508080611f8f57600080fd5b820490509050610340525b8151600101808352811415611ecd575b505061034051610220518082028215828483041417611fc857600080fd5b809050905090506103805160038082028215828483041417611fe957600080fd5b809050905090508080611ffb57600080fd5b82049050905061034052610360516102205161038051808061201c57600080fd5b82049050905081818301101561203157600080fd5b808201905090506103e0526000610400526102205161042052610440600060ff818352015b61042051610400526104205161042051808202821582848304141761207a57600080fd5b809050905090506103405181818301101561209457600080fd5b8082019050905060026104205180820282158284830414176120b557600080fd5b809050905090506103e0518181830110156120cf57600080fd5b8082019050905061022051808210156120e757600080fd5b8082039050905080806120f957600080fd5b820490509050610420526104005161042051111561214057600161042051610400518082101561212857600080fd5b8082039050905011151561213b5761217c565b61216b565b600161040051610420518082101561215757600080fd5b8082039050905011151561216a5761217c565b5b5b8151600101808352811415612056575b505061042051600052600051610200515650005b635e0d443f60005114156125225734156121a957600080fd5b606051600435806040519013156121bf57600080fd5b80919012156121cd57600080fd5b50606051602435806040519013156121e457600080fd5b80919012156121f257600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506102206004356003811061230d57600080fd5b60200201516044356101406004356003811061232857600080fd5b6020020151808202821582848304141761234157600080fd5b80905090509050670de0b6b3a7640000808061235c57600080fd5b82049050905081818301101561237157600080fd5b808201905090506103c052610140610400525b610400515160206104005101610400526104006104005110156123a657612384565b63554abe286104205260043561044052602435610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611dae565b610540526103e0610400525b610400515260206104005103610400526101406104005110151561243557612412565b610540516103e0526102206024356003811061245057600080fd5b60200201516103e0518082101561246657600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761248a57600080fd5b80905090509050610140602435600381106124a457600080fd5b602002015180806124b457600080fd5b820490509050610560526004546105605180820282158284830414176124d957600080fd5b809050905090506402540be40080806124f157600080fd5b8204905090506105805261056051610580518082101561251057600080fd5b8082039050905060005260206000f350005b6367df02ca60005114156128ac57341561253b57600080fd5b6060516004358060405190131561255157600080fd5b809190121561255f57600080fd5b506060516024358060405190131561257657600080fd5b809190121561258457600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506102206024356003811061269f57600080fd5b60200201516044356402540be40080820282158284830414176126c157600080fd5b809050905090506402540be400600454808210156126de57600080fd5b8082039050905080806126f057600080fd5b8204905090506101406024356003811061270957600080fd5b6020020151808202821582848304141761272257600080fd5b80905090509050670de0b6b3a7640000808061273d57600080fd5b8204905090508082101561275057600080fd5b808203905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561278557612763565b63554abe286104205260243561044052600435610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611dae565b610540526103e0610400525b6104005152602061040051036104005261014061040051101515612814576127f1565b610540516103e0526103e0516102206004356003811061283357600080fd5b60200201518082101561284557600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761286957600080fd5b809050905090506101406004356003811061288357600080fd5b6020020151808061289357600080fd5b820490509050610560526105605160005260206000f350005b6307211ef76000511415612c1e5734156128c557600080fd5b606051600435806040519013156128db57600080fd5b80919012156128e957600080fd5b506060516024358060405190131561290057600080fd5b809190121561290e57600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506103c06001815264e8d4a51000816020015264e8d4a5100081604001525061022060043560038110612a4757600080fd5b60200201516044356103c060043560038110612a6257600080fd5b60200201518082028215828483041417612a7b57600080fd5b80905090509050818183011015612a9157600080fd5b8082019050905061042052610140610460525b61046051516020610460510161046052610460610460511015612ac657612aa4565b63554abe28610480526004356104a0526024356104c052610420516104e05261050061022080518252806020015182602001528060400151826040015250506105405161052051610500516104e0516104c0516104a05160065801611dae565b6105a052610440610460525b6104605152602061046051036104605261014061046051101515612b5557612b32565b6105a0516104405261022060243560038110612b7057600080fd5b60200201516104405180821015612b8657600080fd5b808203905090506103c060243560038110612ba057600080fd5b60200201518080612bb057600080fd5b8204905090506105c0526004546105c0518082028215828483041417612bd557600080fd5b809050905090506402540be4008080612bed57600080fd5b8204905090506105e0526105c0516105e05180821015612c0c57600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612f88573415612c3757600080fd5b60605160043580604051901315612c4d57600080fd5b8091901215612c5b57600080fd5b5060605160243580604051901315612c7257600080fd5b8091901215612c8057600080fd5b50610140610140516101605161018051600658016100a9565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101408051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080518252806020015182602001528060400151826040015250506103c06001815264e8d4a51000816020015264e8d4a5100081604001525061022060243560038110612db957600080fd5b60200201516044356402540be4008082028215828483041417612ddb57600080fd5b809050905090506402540be40060045480821015612df857600080fd5b808203905090508080612e0a57600080fd5b8204905090506103c060243560038110612e2357600080fd5b60200201518082028215828483041417612e3c57600080fd5b8090509050905080821015612e5057600080fd5b8082039050905061042052610140610460525b61046051516020610460510161046052610460610460511015612e8557612e63565b63554abe28610480526024356104a0526004356104c052610420516104e05261050061022080518252806020015182602001528060400151826040015250506105405161052051610500516104e0516104c0516104a05160065801611dae565b6105a052610440610460525b6104605152602061046051036104605261014061046051101515612f1457612ef1565b6105a051610440526104405161022060043560038110612f3357600080fd5b602002015180821015612f4557600080fd5b808203905090506103c060043560038110612f5f57600080fd5b60200201518080612f6f57600080fd5b8204905090506105c0526105c05160005260206000f350005b6000156133fa575b610200526101405261016052610180526101a0526101c0526101e052600f5415612fb957600080fd5b6102206101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051637aca288a6102a0526102c06101a08051825280602001518260200152806040015182604001525050610300516102e0516102c05160065801610594565b61036052610380526103a052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103608051825280602001518260200152806040015182604001525050610220610140516003811061308757600080fd5b6020020151610180516101a061014051600381106130a457600080fd5b602002015180820282158284830414176130bd57600080fd5b80905090509050670de0b6b3a764000080806130d857600080fd5b8204905090508181830110156130ed57600080fd5b808201905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561312257613100565b63554abe2861042052610140516104405261016051610460526103c051610480526104a061022080518252806020015182602001528060400151826040015250506104e0516104c0516104a05161048051610460516104405160065801611dae565b610540526103e0610400525b61040051526020610400510361040052610140610400511015156131b357613190565b610540516103e05261022061016051600381106131cf57600080fd5b60200201516103e051808210156131e557600080fd5b808203905090506105605261056051600454808202821582848304141761320b57600080fd5b809050905090506402540be400808061322357600080fd5b8204905090506105805261058051600554808202821582848304141761324857600080fd5b809050905090506402540be400808061326057600080fd5b8204905090506105a0526103c051670de0b6b3a7640000808202821582848304141761328b57600080fd5b809050905090506101a061014051600381106132a657600080fd5b602002015180806132b657600080fd5b82049050905061014051600381106132cd57600080fd5b600260c052602060c02001556103e051610580516105a051808210156132f257600080fd5b8082039050905081818301101561330857600080fd5b80820190509050670de0b6b3a7640000808202821582848304141761332c57600080fd5b809050905090506101a0610160516003811061334757600080fd5b6020020151808061335757600080fd5b820490509050610160516003811061336e57600080fd5b600260c052602060c020015561056051610580518082101561338f57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176133b357600080fd5b809050905090506101a061016051600381106133ce57600080fd5b602002015180806133de57600080fd5b8204905090506105c0526105c051600052600051610200515650005b633df0212460005114156139545762ffffff541561341757600080fd5b600162ffffff55341561342957600080fd5b6060516004358060405190131561343f57600080fd5b809190121561344d57600080fd5b506060516024358060405190131561346457600080fd5b809190121561347257600080fd5b50610140610140516101605161018051600658016103fa565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506101405161016051610180516101a0516101c0516101e051610200516102205163cf6eee7661026052600435610280526024356102a0526044356102c0526102e0610140805182528060200151826020015280604001518260400152505061032051610300516102e0516102c0516102a0516102805160065801612f90565b6103805261022052610200526101e0526101c0526101a05261018052610160526101405261038051610220526308c379a06103a05260206103c052602e6103e0527f45786368616e676520726573756c74656420696e20666577657220636f696e73610400527f207468616e206578706563746564000000000000000000000000000000000000610420526103e0506064356102205110156135e25760a46103bcfd5b610460600081526000816020015260018160400152506104c0600181526001816020015260008160400152506104c06004356003811061362157600080fd5b6020020151156104606004356003811061363a57600080fd5b602002015116156136e3576004356003811061365557600080fd5b600060c052602060c02001543b61366b57600080fd5b6004356003811061367b57600080fd5b600060c052602060c0200154301861369257600080fd5b6000600060646323b872dd61060052336106205230610640526044356106605261061c6000600435600381106136c757600080fd5b600060c052602060c02001545af16136de57600080fd5b61378e565b600435600381106136f357600080fd5b600060c052602060c02001543b61370957600080fd5b6004356003811061371957600080fd5b600060c052602060c0200154301861373057600080fd5b60206105e060646323b872dd61052052336105405230610560526044356105805261053c60006004356003811061376657600080fd5b600060c052602060c02001545af161377d57600080fd5b6000506105e05161378d57600080fd5b5b6104c0602435600381106137a157600080fd5b602002015115610460602435600381106137ba57600080fd5b6020020151161561385f57602435600381106137d557600080fd5b600060c052602060c02001543b6137eb57600080fd5b602435600381106137fb57600080fd5b600060c052602060c0200154301861381257600080fd5b60006000604463a9059cbb61078052336107a052610220516107c05261079c60006024356003811061384357600080fd5b600060c052602060c02001545af161385a57600080fd5b613906565b6024356003811061386f57600080fd5b600060c052602060c02001543b61388557600080fd5b6024356003811061389557600080fd5b600060c052602060c020015430186138ac57600080fd5b6020610760604463a9059cbb6106c052336106e05261022051610700526106dc6000602435600381106138de57600080fd5b600060c052602060c02001545af16138f557600080fd5b6000506107605161390557600080fd5b5b6004356108205260443561084052602435610860526102205161088052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610820a2600062ffffff55005b63a6417ed660005114156142995762ffffff541561397157600080fd5b600162ffffff55341561398357600080fd5b6060516004358060405190131561399957600080fd5b80919012156139a757600080fd5b50606051602435806040519013156139be57600080fd5b80919012156139cc57600080fd5b50610140610140516101605161018051600658016103fa565b6101c0526101e052610200526101805261016052610140526101c080518252806020015182602001528060400151826040015250506102206001815264e8d4a51000816020015264e8d4a5100081604001525061014060043560038110613a4b57600080fd5b602002015161022060043560038110613a6357600080fd5b60200201518080613a7357600080fd5b8204905090506102805261014060243560038110613a9057600080fd5b602002015161022060243560038110613aa857600080fd5b60200201518080613ab857600080fd5b8204905090506102a052604435670de0b6b3a76400008082028215828483041417613ae257600080fd5b80905090509050610280518080613af857600080fd5b8204905090506102c052610140610300525b61030051516020610300510161030052610300610300511015613b2c57613b0a565b63cf6eee766103205260043561034052602435610360526102c051610380526103a061014080518252806020015182602001528060400151826040015250506103e0516103c0516103a05161038051610360516103405160065801612f90565b610440526102e0610300525b6103005152602061030051036103005261014061030051101515613bbb57613b98565b610440516102e0526102e0516102a0518082028215828483041417613bdf57600080fd5b80905090509050670de0b6b3a76400008080613bfa57600080fd5b820490509050610460526308c379a06104805260206104a052602e6104c0527f45786368616e676520726573756c74656420696e20666577657220636f696e736104e0527f207468616e206578706563746564000000000000000000000000000000000000610500526104c050606435610460511015613c7b5760a461049cfd5b610540600181526001816020015260008160400152506105a0600081526000816020015260018160400152506000610600526105a060043560038110613cc057600080fd5b602002015115613d685760043560038110613cda57600080fd5b600160c052602060c02001543b613cf057600080fd5b60043560038110613d0057600080fd5b600160c052602060c02001543018613d1757600080fd5b6000600060646323b872dd61070052336107205230610740526044356107605261071c600060043560038110613d4c57600080fd5b600160c052602060c02001545af1613d6357600080fd5b613e13565b60043560038110613d7857600080fd5b600160c052602060c02001543b613d8e57600080fd5b60043560038110613d9e57600080fd5b600160c052602060c02001543018613db557600080fd5b60206106e060646323b872dd61062052336106405230610660526044356106805261063c600060043560038110613deb57600080fd5b600160c052602060c02001545af1613e0257600080fd5b6000506106e051613e1257600080fd5b5b61054060043560038110613e2657600080fd5b602002015115613fdb5760043560038110613e4057600080fd5b600160c052602060c02001543b613e5657600080fd5b60043560038110613e6657600080fd5b600160c052602060c02001543018613e7d57600080fd5b6020610860604463095ea7b36107c05260043560038110613e9d57600080fd5b600060c052602060c02001546107e052604435610800526107dc600060043560038110613ec957600080fd5b600160c052602060c02001545af1613ee057600080fd5b6000506108605060043560038110613ef757600080fd5b600060c052602060c02001543b613f0d57600080fd5b60043560038110613f1d57600080fd5b600060c052602060c02001543018613f3457600080fd5b6020610900602463a0712d68610880526044356108a05261089c600060043560038110613f6057600080fd5b600060c052602060c02001545af1613f7757600080fd5b60005061090051610600526000610600511115613fda576308c379a0610920526020610940526013610960527f436f756c64206e6f74206d696e7420636f696e0000000000000000000000000061098052610960506000613fd957608461093cfd5b5b5b61054060243560038110613fee57600080fd5b6020020151156140ed576024356003811061400857600080fd5b600060c052602060c02001543b61401e57600080fd5b6024356003811061402e57600080fd5b600060c052602060c0200154301861404557600080fd5b6020610a40602463db006a756109c0526102e0516109e0526109dc60006024356003811061407257600080fd5b600060c052602060c02001545af161408957600080fd5b600050610a40516106005260006106005111156140ec576308c379a0610a60526020610a80526015610aa0527f436f756c64206e6f742072656465656d20636f696e0000000000000000000000610ac052610aa05060006140eb576084610a7cfd5b5b5b6105a06024356003811061410057600080fd5b6020020151156141a4576024356003811061411a57600080fd5b600160c052602060c02001543b61413057600080fd5b6024356003811061414057600080fd5b600160c052602060c0200154301861415757600080fd5b60006000604463a9059cbb610bc05233610be05261046051610c0052610bdc60006024356003811061418857600080fd5b600160c052602060c02001545af161419f57600080fd5b61424b565b602435600381106141b457600080fd5b600160c052602060c02001543b6141ca57600080fd5b602435600381106141da57600080fd5b600160c052602060c020015430186141f157600080fd5b6020610ba0604463a9059cbb610b005233610b205261046051610b4052610b1c60006024356003811061422357600080fd5b600160c052602060c02001545af161423a57600080fd5b600050610ba05161424a57600080fd5b5b600435610c6052604435610c8052602435610ca05261046051610cc052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610c60a2600062ffffff55005b63ecb586a560005114156147055762ffffff54156142b657600080fd5b600162ffffff5534156142c857600080fd5b6007543b6142d557600080fd5b60075430186142e357600080fd5b60206101c060046318160ddd6101605261017c6007545afa61430457600080fd5b6000506101c051610140526101e060008152600081602001526000816040015250610240600081526000816020015260008160400152506102a0600081526000816020015260018160400152506103006001815260018160200152600081604001525061036060006003818352015b610360516003811061438457600080fd5b600260c052602060c020015460043580820282158284830414176143a757600080fd5b809050905090506101405180806143bd57600080fd5b820490509050610380526308c379a06103a05260206103c05260306103e0527f5769746864726177616c20726573756c74656420696e20666577657220636f69610400527f6e73207468616e20657870656374656400000000000000000000000000000000610420526103e0506024610360516003811061443d57600080fd5b60200201356103805110156144535760a46103bcfd5b610360516003811061446457600080fd5b600260c052602060c020018054610380518082101561448257600080fd5b80820390509050815550610380516101e061036051600381106144a457600080fd5b602002015261030061036051600381106144bd57600080fd5b6020020151156102a061036051600381106144d757600080fd5b6020020151161561457f5761036051600381106144f357600080fd5b600060c052602060c02001543b61450957600080fd5b610360516003811061451a57600080fd5b600060c052602060c0200154301861453157600080fd5b60006000604463a9059cbb610520523361054052610380516105605261053c6000610360516003811061456357600080fd5b600060c052602060c02001545af161457a57600080fd5b614629565b610360516003811061459057600080fd5b600060c052602060c02001543b6145a657600080fd5b61036051600381106145b757600080fd5b600060c052602060c020015430186145ce57600080fd5b6020610500604463a9059cbb610460523361048052610380516104a05261047c6000610360516003811061460157600080fd5b600060c052602060c02001545af161461857600080fd5b6000506105005161462857600080fd5b5b5b8151600101808352811415614373575b50506007543b61464957600080fd5b600754301861465757600080fd5b6000600060446379cc67906105c052336105e052600435610600526105dc60006007545af161468557600080fd5b6101e051610660526102005161068052610220516106a052610240516106c052610260516106e052610280516107005261014051600435808210156146c957600080fd5b8082039050905061072052337fa49d4cf02656aebf8c771f5a8585638a2a15ee6c97cf7205d4208ed7c1df252d60e0610660a2600062ffffff55005b639fdaea0c600051141561514f5762ffffff541561472257600080fd5b600162ffffff55341561473457600080fd5b600f541561474157600080fd5b610140600081526000816020015260018160400152506101a0600181526001816020015260008160400152506007543b61477a57600080fd5b600754301861478857600080fd5b602061028060046318160ddd6102205261023c6007545afa6147a957600080fd5b6000506102805161020052600061020051116147c457600080fd5b600454600380820282158284830414176147dd57600080fd5b80905090509050600880806147f157600080fd5b8204905090506102a0526005546102c0526102e0610140610340525b6103405151602061034051016103405261034061034051101561482f5761480d565b600658016103fa565b61036052610380526103a052610320610340525b610340515260206103405103610340526101406103405110151561486f5761484c565b61036080518252806020015182602001528060400151826040015250506103c060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015250506104206103c080518252806020015182602001528060400151826040015250506101406104a0525b6104a0515160206104a051016104a0526104a06104a051101561490d576148eb565b632a8722f06104c0526104e06102e080518252806020015182602001528060400151826040015250506105406103c0805182528060200151826020015280604001518260400152505061058051610560516105405161052051610500516104e05160065801610acb565b6105e0526104806104a0525b6104a0515260206104a051036104a0526101406104a0511015156149a657614983565b6105e0516104805261060060006003818352015b61042061060051600381106149ce57600080fd5b602002018051600461060051600381106149e757600080fd5b6020020135808210156149f957600080fd5b808203905090508152505b81516001018083528114156149ba575b5050610140610640525b61064051516020610640510161064052610640610640511015614a4057614a1e565b632a8722f0610660526106806102e080518252806020015182602001528060400151826040015250506106e0610420805182528060200151826020015280604001518260400152505061072051610700516106e0516106c0516106a0516106805160065801610acb565b61078052610620610640525b6106405152602061064051036106405261014061064051101515614ad957614ab6565b61078051610620526107a06000815260008160200152600081604001525061080060006003818352015b610620516103c06108005160038110614b1b57600080fd5b60200201518082028215828483041417614b3457600080fd5b80905090509050610480518080614b4a57600080fd5b820490509050610820526000610840526104206108005160038110614b6e57600080fd5b6020020151610820511115614bb757610820516104206108005160038110614b9557600080fd5b602002015180821015614ba757600080fd5b8082039050905061084052614bed565b6104206108005160038110614bcb57600080fd5b60200201516108205180821015614be157600080fd5b80820390509050610840525b6102a051610840518082028215828483041417614c0957600080fd5b809050905090506402540be4008080614c2157600080fd5b8204905090506107a06108005160038110614c3b57600080fd5b60200201526104206108005160038110614c5457600080fd5b60200201516107a06108005160038110614c6d57600080fd5b60200201516102c0518082028215828483041417614c8a57600080fd5b809050905090506402540be4008080614ca257600080fd5b82049050905080821015614cb557600080fd5b808203905090506108005160038110614ccd57600080fd5b600260c052602060c02001556104206108005160038110614ced57600080fd5b6020020180516107a06108005160038110614d0757600080fd5b602002015180821015614d1957600080fd5b808203905090508152505b8151600101808352811415614b03575b5050610140610880525b61088051516020610880510161088052610880610880511015614d6057614d3e565b632a8722f06108a0526108c06102e080518252806020015182602001528060400151826040015250506109206104208051825280602001518260200152806040015182604001525050610960516109405161092051610900516108e0516108c05160065801610acb565b6109c052610860610880525b6108805152602061088051036108805261014061088051101515614df957614dd6565b6109c05161086052610480516108605180821015614e1657600080fd5b80820390509050610200518082028215828483041417614e3557600080fd5b80905090509050610480518080614e4b57600080fd5b8204905090506109e05260006109e05111614e6557600080fd5b6308c379a0610a00526020610a20526014610a40527f536c697070616765207363726577656420796f75000000000000000000000000610a6052610a40506064356109e0511115614eb7576084610a1cfd5b610aa060006003818352015b6101a0610aa05160038110614ed757600080fd5b602002015115610140610aa05160038110614ef157600080fd5b60200201511615614fad57610aa05160038110614f0d57600080fd5b600060c052602060c02001543b614f2357600080fd5b610aa05160038110614f3457600080fd5b600060c052602060c02001543018614f4b57600080fd5b60006000604463a9059cbb610b805233610ba0526004610aa05160038110614f7257600080fd5b6020020135610bc052610b9c6000610aa05160038110614f9157600080fd5b600060c052602060c02001545af1614fa857600080fd5b61506b565b610aa05160038110614fbe57600080fd5b600060c052602060c02001543b614fd457600080fd5b610aa05160038110614fe557600080fd5b600060c052602060c02001543018614ffc57600080fd5b6020610b60604463a9059cbb610ac05233610ae0526004610aa0516003811061502457600080fd5b6020020135610b0052610adc6000610aa0516003811061504357600080fd5b600060c052602060c02001545af161505a57600080fd5b600050610b605161506a57600080fd5b5b5b8151600101808352811415614ec3575b50506007543b61508b57600080fd5b600754301861509957600080fd5b6000600060446379cc6790610c205233610c40526109e051610c6052610c3c60006007545af16150c857600080fd5b600435610cc052602435610ce052604435610d00526107a051610d20526107c051610d40526107e051610d605261062051610d8052610200516109e0518082101561511257600080fd5b80820390509050610da052337f173599dbf9c6ca6f7c3b590df07ae98a45d74ff54065505141e7de6c46a624c2610100610cc0a2600062ffffff55005b63ee11f5b6600051141561521157341561516857600080fd5b600654331461517657600080fd5b6008541561518357600080fd5b64012a05f200604435111561519757600080fd5b426203f4808181830110156151ab57600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd60005114156152be57341561522a57600080fd5b600654331461523857600080fd5b6000600854114260085411151661524e57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb60005114156152ec5734156152d757600080fd5b60065433146152e557600080fd5b6000600855005b636b441a40600051141561538d57341561530557600080fd5b600435602051811061531657600080fd5b50600654331461532557600080fd5b6009541561533257600080fd5b426203f48081818301101561534657600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156154095734156153a657600080fd5b60065433146153b457600080fd5b600060095411600954421015166153ca57600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561543757341561542257600080fd5b600654331461543057600080fd5b6000600955005b6330c54085600051141561566157341561545057600080fd5b600654331461545e57600080fd5b6101406001815264e8d4a51000816020015264e8d4a510008160400152506101a0600081526000816020015260018160400152506102006001815260018160200152600081604001525061026060006003818352015b61026051600381106154c557600080fd5b600060c052602060c020015461028052610280513b6154e357600080fd5b6102805130186154f257600080fd5b602061034060246370a082316102c052306102e0526102dc610280515afa61551957600080fd5b60005061034051610260516003811061553157600080fd5b600260c052602060c02001548082101561554a57600080fd5b808203905090506102a05260006102a051111561564c57610200610260516003811061557557600080fd5b6020020151156101a0610260516003811061558f57600080fd5b602002015116156155ec57610280513b6155a857600080fd5b6102805130186155b757600080fd5b60006000604463a9059cbb6104205233610440526102a0516104605261043c6000610280515af16155e757600080fd5b61564b565b610280513b6155fa57600080fd5b61028051301861560957600080fd5b6020610400604463a9059cbb6103605233610380526102a0516103a05261037c6000610280515af161563a57600080fd5b6000506104005161564a57600080fd5b5b5b5b81516001018083528114156154b4575b5050005b63e3698853600051141561569d57341561567a57600080fd5b600654331461568857600080fd5b42600e541161569657600080fd5b6001600f55005b633046f97260005114156156cb5734156156b657600080fd5b60065433146156c457600080fd5b6000600f55005b6323746eb860005114156157305734156156e457600080fd5b606051600435806040519013156156fa57600080fd5b809190121561570857600080fd5b506004356003811061571957600080fd5b600060c052602060c020015460005260206000f350005b63b739953e600051141561579557341561574957600080fd5b6060516004358060405190131561575f57600080fd5b809190121561576d57600080fd5b506004356003811061577e57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156157fa5734156157ae57600080fd5b606051600435806040519013156157c457600080fd5b80919012156157d257600080fd5b50600435600381106157e357600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d0600051141561582157341561581357600080fd5b60035460005260206000f350005b63ddca3f43600051141561584857341561583a57600080fd5b60045460005260206000f350005b63fee3f7f9600051141561586f57341561586157600080fd5b60055460005260206000f350005b638da5cb5b600051141561589657341561588857600080fd5b60065460005260206000f350005b63405e28f860005114156158bd5734156158af57600080fd5b60085460005260206000f350005b63e0a0b58660005114156158e45734156158d657600080fd5b60095460005260206000f350005b63b4b577ad600051141561590b5734156158fd57600080fd5b600a5460005260206000f350005b6358680d0b600051141561593257341561592457600080fd5b600b5460005260206000f350005b63e3824462600051141561595957341561594b57600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561598057341561597257600080fd5b600d5460005260206000f350005b5b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009fc689ccada600b6df723d9e47d84d76664a1f23000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000003d0900
-----Decoded View---------------
Arg [0] : _coins (address[3]): 0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643,0x39AA39c021dfbaE8faC545936693aC917d5E7563,0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [1] : _underlying_coins (address[3]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _pool_token (address): 0x9fC689CCaDa600B6DF723D9E47D84d76664a1F23
Arg [3] : _A (uint256): 900
Arg [4] : _fee (uint256): 4000000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [1] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [2] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [3] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [4] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [5] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [6] : 0000000000000000000000009fc689ccada600b6df723d9e47d84d76664a1f23
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000384
Arg [8] : 00000000000000000000000000000000000000000000000000000000003d0900Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...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.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.SignIn
Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.