Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
Purchase 100+ cryptocurrencies instantly, with Visa/Mastercard, Google/Apple Pay, and a variety of other funding methods.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
9 years old Licensed Crypto Casino, Instant Withdraw 24/7, 6000+ Slots available, Paypal Deposit, Instant Live Support 24/7, 30% Rakeback.
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Play 100s of games anonymously with all major cryptos. Join CryptoWins & start winning!
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
Overview
ETH Balance
Eth Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (17)182,869.03962516 aDAIAave interes... (aDAI)$183,417.65@1.00346,397.76318394 aSUSDAave interes... (aSUSD)$46,279.26@0.99749,283 $ ETH35.com - Visit to claim bonus rewards$ ETH35.com ($ ETH3...)3,654 FORMFormation Fi... (FORM)1 nft-aave.comnft-aave.com (nft-aa...)200 TokenERC-20 TOKEN*[Suspicious]8,271 TokenERC-20 TOKEN*[Suspicious]30 TokenERC-20 TOKEN*[Suspicious]30 TokenERC-20 TOKEN*[Suspicious]8,271 TokenERC-20 TOKEN*[Suspicious]8,271 TokenERC-20 TOKEN*[Suspicious]9,283 TokenERC-20 TOKEN*[Suspicious]98,127 TokenERC-20 TOKEN*[Suspicious]10,000 TokenERC-20 TOKEN*[Suspicious]9,283 TokenERC-20 TOKEN*[Spam]100 TokenERC-20 TOKEN*[Spam]100 TokenERC-20 TOKEN*[Spam]NFT Tokens (11)asteth.com : airdrop recipient# asteth.com : airdrop recipientERC-1155apy-aave.comapy-aave.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
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 3,008 transactions
Transaction Hash MethodBlockFromToRemove_liquidity... 20451708 2024-08-04 0:49:47 55 days ago 1722732587 IN 0 ETH$0.00 0.00037209 1.15977177 Remove_liquidity... 20312190 2024-07-15 13:24:23 75 days ago 1721049863 IN 0 ETH$0.00 0.00212786 6.53453555 Remove_liquidity... 20234552 2024-07-04 17:10:47 86 days ago 1720113047 IN 0 ETH$0.00 0.00283748 8.85586614 Remove_liquidity... 20096689 2024-06-15 10:46:59 105 days ago 1718448419 IN 0 ETH$0.00 0.00137792 4.28126057 Remove_liquidity 19966427 2024-05-28 5:58:35 123 days ago 1716875915 IN 0 ETH$0.00 0.00622241 10.99612195 Remove_liquidity... 19515839 2024-03-26 3:07:35 186 days ago 1711422455 IN 0 ETH$0.00 0.00657182 19.15838354 Remove_liquidity... 19459651 2024-03-18 5:38:23 194 days ago 1710740303 IN 0 ETH$0.00 0.00781832 22.79062563 Remove_liquidity... 19416169 2024-03-12 2:58:23 200 days ago 1710212303 IN 0 ETH$0.00 0.01698006 49.49735508 Exchange_underly... 19166828 2024-02-06 4:29:47 235 days ago 1707193787 IN 0 ETH$0.00 0.01311221 21.52514786 Remove_liquidity... 18650356 2023-11-25 17:59:47 308 days ago 1700935187 IN 0 ETH$0.00 0.00777008 23.7221044 Exchange_underly... 18475835 2023-11-01 7:41:59 332 days ago 1698824519 IN 0 ETH$0.00 0.00762211 12.48138274 Remove_liquidity... 18472162 2023-10-31 19:22:11 333 days ago 1698780131 IN 0 ETH$0.00 0.00760889 23.34546044 Remove_liquidity... 18387221 2023-10-19 22:00:11 345 days ago 1697752811 IN 0 ETH$0.00 0.00310793 9.02068182 Add_liquidity 18206510 2023-09-24 15:20:35 370 days ago 1695568835 IN 0 ETH$0.00 0.00362594 8.02361997 Add_liquidity 18206494 2023-09-24 15:17:23 370 days ago 1695568643 IN 0 ETH$0.00 0.00510817 8.14846965 Remove_liquidity 18020719 2023-08-29 13:58:35 396 days ago 1693317515 IN 0 ETH$0.00 0.0240318 43.67838992 Remove_liquidity... 17877545 2023-08-09 13:08:11 416 days ago 1691586491 IN 0 ETH$0.00 0.01098434 32.48950753 Remove_liquidity... 17852885 2023-08-06 2:17:23 419 days ago 1691288243 IN 0 ETH$0.00 0.00414648 12.91784757 Remove_liquidity... 17705675 2023-07-16 11:53:11 440 days ago 1689508391 IN 0 ETH$0.00 0.00461588 14.38525166 Remove_liquidity... 17019434 2023-04-10 18:03:35 537 days ago 1681149815 IN 0 ETH$0.00 0.00843185 26.15178146 Remove_liquidity... 16990806 2023-04-06 16:42:35 541 days ago 1680799355 IN 0 ETH$0.00 0.01055923 30.66691479 Remove_liquidity... 16957685 2023-04-01 23:53:35 546 days ago 1680393215 IN 0 ETH$0.00 0.00643183 18.94391472 Remove_liquidity... 16865130 2023-03-19 23:49:47 559 days ago 1679269787 IN 0 ETH$0.00 0.00771073 23.99751059 Remove_liquidity... 16857122 2023-03-18 20:49:23 560 days ago 1679172563 IN 0 ETH$0.00 0.00580177 17.14278567 Remove_liquidity... 16812141 2023-03-12 13:08:11 566 days ago 1678626491 IN 0 ETH$0.00 0.00591574 18.47401662 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.2.8
Contract Source Code (Vyper language format)
# @version 0.2.8 """ @title Curve saPool @author Curve.Fi @license Copyright (c) Curve.Fi, 2020 - all rights reserved @notice Pool implementation with aToken-style lending """ from vyper.interfaces import ERC20 interface LendingPool: def withdraw(_underlying_asset: address, _amount: uint256, _receiver: address): nonpayable interface CurveToken: def mint(_to: address, _value: uint256) -> bool: nonpayable def burnFrom(_to: address, _value: uint256) -> bool: nonpayable # Events event TokenExchange: buyer: indexed(address) sold_id: int128 tokens_sold: uint256 bought_id: int128 tokens_bought: uint256 event TokenExchangeUnderlying: buyer: indexed(address) sold_id: int128 tokens_sold: uint256 bought_id: int128 tokens_bought: uint256 event AddLiquidity: provider: indexed(address) token_amounts: uint256[N_COINS] fees: uint256[N_COINS] invariant: uint256 token_supply: uint256 event RemoveLiquidity: provider: indexed(address) token_amounts: uint256[N_COINS] fees: uint256[N_COINS] token_supply: uint256 event RemoveLiquidityOne: provider: indexed(address) token_amount: uint256 coin_amount: uint256 event RemoveLiquidityImbalance: provider: indexed(address) token_amounts: uint256[N_COINS] fees: uint256[N_COINS] invariant: uint256 token_supply: uint256 event CommitNewAdmin: deadline: indexed(uint256) admin: indexed(address) event NewAdmin: admin: indexed(address) event CommitNewFee: deadline: indexed(uint256) fee: uint256 admin_fee: uint256 offpeg_fee_multiplier: uint256 event NewFee: fee: uint256 admin_fee: uint256 offpeg_fee_multiplier: uint256 event RampA: old_A: uint256 new_A: uint256 initial_time: uint256 future_time: uint256 event StopRampA: A: uint256 t: uint256 N_COINS: constant(int128) = 2 # fixed constants FEE_DENOMINATOR: constant(uint256) = 10 ** 10 PRECISION: constant(uint256) = 10 ** 18 MAX_ADMIN_FEE: constant(uint256) = 10 * 10 ** 9 MAX_FEE: constant(uint256) = 5 * 10 ** 9 MAX_A: constant(uint256) = 10 ** 6 MAX_A_CHANGE: constant(uint256) = 10 A_PRECISION: constant(uint256) = 100 ADMIN_ACTIONS_DELAY: constant(uint256) = 3 * 86400 MIN_RAMP_TIME: constant(uint256) = 86400 coins: public(address[N_COINS]) underlying_coins: public(address[N_COINS]) admin_balances: public(uint256[N_COINS]) fee: public(uint256) # fee * 1e10 offpeg_fee_multiplier: public(uint256) # * 1e10 admin_fee: public(uint256) # admin_fee * 1e10 owner: public(address) lp_token: public(address) aave_lending_pool: address aave_referral: uint256 initial_A: public(uint256) future_A: public(uint256) initial_A_time: public(uint256) future_A_time: public(uint256) admin_actions_deadline: public(uint256) transfer_ownership_deadline: public(uint256) future_fee: public(uint256) future_admin_fee: public(uint256) future_offpeg_fee_multiplier: public(uint256) # * 1e10 future_owner: public(address) is_killed: bool kill_deadline: uint256 KILL_DEADLINE_DT: constant(uint256) = 2 * 30 * 86400 @external def __init__( _coins: address[N_COINS], _underlying_coins: address[N_COINS], _pool_token: address, _aave_lending_pool: address, _A: uint256, _fee: uint256, _admin_fee: uint256, _offpeg_fee_multiplier: uint256, ): """ @notice Contract constructor @param _coins List of wrapped coin addresses @param _underlying_coins List of underlying coin addresses @param _pool_token Pool LP token address @param _aave_lending_pool Aave lending pool address @param _A Amplification coefficient multiplied by n * (n - 1) @param _fee Swap fee expressed as an integer with 1e10 precision @param _admin_fee Percentage of fee taken as an admin fee, expressed as an integer with 1e10 precision @param _offpeg_fee_multiplier Offpeg fee multiplier """ for i in range(N_COINS): assert _coins[i] != ZERO_ADDRESS assert _underlying_coins[i] != ZERO_ADDRESS self.coins = _coins self.underlying_coins = _underlying_coins self.initial_A = _A * A_PRECISION self.future_A = _A * A_PRECISION self.fee = _fee self.admin_fee = _admin_fee self.offpeg_fee_multiplier = _offpeg_fee_multiplier self.owner = msg.sender self.kill_deadline = block.timestamp + KILL_DEADLINE_DT self.lp_token = _pool_token self.aave_lending_pool = _aave_lending_pool # approve transfer of underlying coin to aave lending pool for coin in _underlying_coins: assert ERC20(coin).approve(_aave_lending_pool, MAX_UINT256) @view @internal def _A() -> uint256: t1: uint256 = self.future_A_time A1: uint256 = self.future_A if block.timestamp < t1: # handle ramping up and down of A A0: uint256 = self.initial_A t0: uint256 = self.initial_A_time # Expressions in uint256 cannot have negative numbers, thus "if" if A1 > A0: return A0 + (A1 - A0) * (block.timestamp - t0) / (t1 - t0) else: return A0 - (A0 - A1) * (block.timestamp - t0) / (t1 - t0) else: # when t1 == 0 or block.timestamp >= t1 return A1 @view @external def A() -> uint256: return self._A() / A_PRECISION @view @external def A_precise() -> uint256: return self._A() @pure @internal def _dynamic_fee(xpi: uint256, xpj: uint256, _fee: uint256, _feemul: uint256) -> uint256: if _feemul <= FEE_DENOMINATOR: return _fee else: xps2: uint256 = (xpi + xpj) xps2 *= xps2 # Doing just ** 2 can overflow apparently return (_feemul * _fee) / ( (_feemul - FEE_DENOMINATOR) * 4 * xpi * xpj / xps2 + \ FEE_DENOMINATOR) @view @external def dynamic_fee(i: int128, j: int128) -> uint256: """ @notice Return the fee for swapping between `i` and `j` @param i Index value for the coin to send @param j Index value of the coin to recieve @return Swap fee expressed as an integer with 1e10 precision """ xpi: uint256 = (ERC20(self.coins[i]).balanceOf(self) - self.admin_balances[i]) xpj: uint256 = (ERC20(self.coins[j]).balanceOf(self) - self.admin_balances[j]) return self._dynamic_fee(xpi, xpj, self.fee, self.offpeg_fee_multiplier) @view @external def balances(i: uint256) -> uint256: """ @notice Get the current balance of a coin within the pool, less the accrued admin fees @param i Index value for the coin to query balance of @return Token balance """ return ERC20(self.coins[i]).balanceOf(self) - self.admin_balances[i] @view @internal def _balances() -> uint256[N_COINS]: result: uint256[N_COINS] = empty(uint256[N_COINS]) for i in range(N_COINS): result[i] = ERC20(self.coins[i]).balanceOf(self) - self.admin_balances[i] return result @pure @internal def get_D(xp: uint256[N_COINS], amp: uint256) -> uint256: """ D invariant calculation in non-overflowing integer operations iteratively A * sum(x_i) * n**n + D = A * D * n**n + D**(n+1) / (n**n * prod(x_i)) Converging solution: D[j+1] = (A * n**n * sum(x_i) - D[j]**(n+1) / (n**n prod(x_i))) / (A * n**n - 1) """ S: uint256 = 0 for _x in xp: S += _x if S == 0: return 0 Dprev: uint256 = 0 D: uint256 = S Ann: uint256 = amp * N_COINS for _i in range(255): D_P: uint256 = D for _x in xp: D_P = D_P * D / (_x * N_COINS + 1) # +1 is to prevent /0 Dprev = D D = (Ann * S / A_PRECISION + D_P * N_COINS) * D / ((Ann - A_PRECISION) * D / A_PRECISION + (N_COINS + 1) * D_P) # Equality with the precision of 1 if D > Dprev: if D - Dprev <= 1: return D else: if Dprev - D <= 1: return D # convergence typically occurs in 4 rounds or less, this should be unreachable! # if it does happen the pool is borked and LPs can withdraw via `remove_liquidity` raise @view @external def get_virtual_price() -> uint256: """ @notice The current virtual price of the pool LP token @dev Useful for calculating profits @return LP token virtual price normalized to 1e18 """ D: uint256 = self.get_D(self._balances(), self._A()) # D is in the units similar to DAI (e.g. converted to precision 1e18) # When balanced, D = n * x_u - total virtual value of the portfolio token_supply: uint256 = ERC20(self.lp_token).totalSupply() return D * PRECISION / token_supply @view @external def calc_token_amount(_amounts: uint256[N_COINS], is_deposit: bool) -> uint256: """ @notice Calculate addition or reduction in token supply from a deposit or withdrawal @dev This calculation accounts for slippage, but not fees. Needed to prevent front-running, not for precise calculations! @param _amounts Amount of each coin being deposited @param is_deposit set True for deposits, False for withdrawals @return Expected amount of LP tokens received """ coin_balances: uint256[N_COINS] = self._balances() amp: uint256 = self._A() D0: uint256 = self.get_D(coin_balances, amp) for i in range(N_COINS): if is_deposit: coin_balances[i] += _amounts[i] else: coin_balances[i] -= _amounts[i] D1: uint256 = self.get_D(coin_balances, amp) token_amount: uint256 = ERC20(self.lp_token).totalSupply() diff: uint256 = 0 if is_deposit: diff = D1 - D0 else: diff = D0 - D1 return diff * token_amount / D0 @external @nonreentrant('lock') def add_liquidity(_amounts: uint256[N_COINS], _min_mint_amount: uint256, _use_underlying: bool = False) -> uint256: """ @notice Deposit coins into the pool @param _amounts List of amounts of coins to deposit @param _min_mint_amount Minimum amount of LP tokens to mint from the deposit @param _use_underlying If True, deposit underlying assets instead of aTokens @return Amount of LP tokens received by depositing """ assert not self.is_killed # dev: is killed # Initial invariant amp: uint256 = self._A() old_balances: uint256[N_COINS] = self._balances() lp_token: address = self.lp_token token_supply: uint256 = ERC20(lp_token).totalSupply() D0: uint256 = 0 if token_supply != 0: D0 = self.get_D(old_balances, amp) new_balances: uint256[N_COINS] = old_balances for i in range(N_COINS): if token_supply == 0: assert _amounts[i] != 0 # dev: initial deposit requires all coins new_balances[i] += _amounts[i] # Invariant after change D1: uint256 = self.get_D(new_balances, amp) assert D1 > D0 # We need to recalculate the invariant accounting for fees # to calculate fair user's share fees: uint256[N_COINS] = empty(uint256[N_COINS]) mint_amount: uint256 = 0 if token_supply != 0: # Only account for fees if we are not the first to deposit ys: uint256 = (D0 + D1) / N_COINS _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _feemul: uint256 = self.offpeg_fee_multiplier _admin_fee: uint256 = self.admin_fee difference: uint256 = 0 for i in range(N_COINS): ideal_balance: uint256 = D1 * old_balances[i] / D0 new_balance: uint256 = new_balances[i] if ideal_balance > new_balance: difference = ideal_balance - new_balance else: difference = new_balance - ideal_balance xs: uint256 = old_balances[i] + new_balance fees[i] = self._dynamic_fee(xs, ys, _fee, _feemul) * difference / FEE_DENOMINATOR if _admin_fee != 0: self.admin_balances[i] += fees[i] * _admin_fee / FEE_DENOMINATOR new_balances[i] = new_balance - fees[i] D2: uint256 = self.get_D(new_balances, amp) mint_amount = token_supply * (D2 - D0) / D0 else: mint_amount = D1 # Take the dust if there was any assert mint_amount >= _min_mint_amount, "Slippage screwed you" # Take coins from the sender if _use_underlying: lending_pool: address = self.aave_lending_pool aave_referral: bytes32 = convert(self.aave_referral, bytes32) # Take coins from the sender for i in range(N_COINS): amount: uint256 = _amounts[i] if amount != 0: coin: address = self.underlying_coins[i] # transfer underlying coin from msg.sender to self assert ERC20(coin).transferFrom(msg.sender, self, amount) # deposit to aave lending pool raw_call( lending_pool, concat( method_id("deposit(address,uint256,address,uint16)"), convert(coin, bytes32), convert(amount, bytes32), convert(self, bytes32), aave_referral, ) ) else: for i in range(N_COINS): amount: uint256 = _amounts[i] if amount != 0: assert ERC20(self.coins[i]).transferFrom(msg.sender, self, amount) # dev: failed transfer # Mint pool tokens CurveToken(lp_token).mint(msg.sender, mint_amount) log AddLiquidity(msg.sender, _amounts, fees, D1, token_supply + mint_amount) return mint_amount @view @internal def get_y(i: int128, j: int128, x: uint256, xp: uint256[N_COINS]) -> uint256: """ Calculate x[j] if one makes x[i] = x Done by solving quadratic equation iteratively. x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A) x_1**2 + b*x_1 = c x_1 = (x_1**2 + c) / (2*x_1 + b) """ # x in the input is converted to the same price/precision assert i != j # dev: same coin assert j >= 0 # dev: j below zero assert j < N_COINS # dev: j above N_COINS # should be unreachable, but good for safety assert i >= 0 assert i < N_COINS amp: uint256 = self._A() D: uint256 = self.get_D(xp, amp) Ann: uint256 = amp * N_COINS c: uint256 = D S_: uint256 = 0 _x: uint256 = 0 y_prev: 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 * A_PRECISION / (Ann * N_COINS) b: uint256 = S_ + D * A_PRECISION / Ann # - D 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: return y else: if y_prev - y <= 1: return y raise @view @internal def _get_dy(i: int128, j: int128, dx: uint256) -> uint256: xp: uint256[N_COINS] = self._balances() x: uint256 = xp[i] + dx y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = (xp[j] - y) _fee: uint256 = self._dynamic_fee( (xp[i] + x) / 2, (xp[j] + y) / 2, self.fee, self.offpeg_fee_multiplier ) * dy / FEE_DENOMINATOR return dy - _fee @view @external def get_dy(i: int128, j: int128, dx: uint256) -> uint256: return self._get_dy(i, j, dx) @view @external def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256: return self._get_dy(i, j, dx) @internal def _exchange(i: int128, j: int128, dx: uint256) -> uint256: assert not self.is_killed # dev: is killed # dx and dy are in aTokens xp: uint256[N_COINS] = self._balances() x: uint256 = xp[i] + dx y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = xp[j] - y dy_fee: uint256 = dy * self._dynamic_fee( (xp[i] + x) / 2, (xp[j] + y) / 2, self.fee, self.offpeg_fee_multiplier ) / FEE_DENOMINATOR admin_fee: uint256 = self.admin_fee if admin_fee != 0: dy_admin_fee: uint256 = dy_fee * admin_fee / FEE_DENOMINATOR if dy_admin_fee != 0: self.admin_balances[j] += dy_admin_fee return dy - dy_fee @external @nonreentrant('lock') def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256) -> uint256: """ @notice Perform an exchange between two coins @dev Index values can be found via the `coins` public getter method @param i Index value for the coin to send @param j Index valie of the coin to recieve @param dx Amount of `i` being exchanged @param min_dy Minimum amount of `j` to receive @return Actual amount of `j` received """ dy: uint256 = self._exchange(i, j, dx) assert dy >= min_dy, "Exchange resulted in fewer coins than expected" assert ERC20(self.coins[i]).transferFrom(msg.sender, self, dx) assert ERC20(self.coins[j]).transfer(msg.sender, dy) log TokenExchange(msg.sender, i, dx, j, dy) return dy @external @nonreentrant('lock') def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256) -> uint256: """ @notice Perform an exchange between two underlying coins @dev Index values can be found via the `underlying_coins` public getter method @param i Index value for the underlying coin to send @param j Index valie of the underlying coin to recieve @param dx Amount of `i` being exchanged @param min_dy Minimum amount of `j` to receive @return Actual amount of `j` received """ dy: uint256 = self._exchange(i, j, dx) assert dy >= min_dy, "Exchange resulted in fewer coins than expected" u_coin_i: address = self.underlying_coins[i] lending_pool: address = self.aave_lending_pool # transfer underlying coin from msg.sender to self assert ERC20(u_coin_i).transferFrom(msg.sender, self, dx) # deposit to aave lending pool raw_call( lending_pool, concat( method_id("deposit(address,uint256,address,uint16)"), convert(u_coin_i, bytes32), convert(dx, bytes32), convert(self, bytes32), convert(self.aave_referral, bytes32), ) ) # withdraw `j` underlying from lending pool and transfer to caller LendingPool(lending_pool).withdraw(self.underlying_coins[j], dy, msg.sender) log TokenExchangeUnderlying(msg.sender, i, dx, j, dy) return dy @external @nonreentrant('lock') def remove_liquidity( _amount: uint256, _min_amounts: uint256[N_COINS], _use_underlying: bool = False, ) -> uint256[N_COINS]: """ @notice Withdraw coins from the pool @dev Withdrawal amounts are based on current deposit ratios @param _amount Quantity of LP tokens to burn in the withdrawal @param _min_amounts Minimum amounts of underlying coins to receive @param _use_underlying If True, withdraw underlying assets instead of aTokens @return List of amounts of coins that were withdrawn """ amounts: uint256[N_COINS] = self._balances() lp_token: address = self.lp_token total_supply: uint256 = ERC20(lp_token).totalSupply() CurveToken(lp_token).burnFrom(msg.sender, _amount) # dev: insufficient funds lending_pool: address = ZERO_ADDRESS if _use_underlying: lending_pool = self.aave_lending_pool for i in range(N_COINS): value: uint256 = amounts[i] * _amount / total_supply assert value >= _min_amounts[i], "Withdrawal resulted in fewer coins than expected" amounts[i] = value if _use_underlying: LendingPool(lending_pool).withdraw(self.underlying_coins[i], value, msg.sender) else: assert ERC20(self.coins[i]).transfer(msg.sender, value) log RemoveLiquidity(msg.sender, amounts, empty(uint256[N_COINS]), total_supply - _amount) return amounts @external @nonreentrant('lock') def remove_liquidity_imbalance( _amounts: uint256[N_COINS], _max_burn_amount: uint256, _use_underlying: bool = False ) -> uint256: """ @notice Withdraw coins from the pool in an imbalanced amount @param _amounts List of amounts of underlying coins to withdraw @param _max_burn_amount Maximum amount of LP token to burn in the withdrawal @param _use_underlying If True, withdraw underlying assets instead of aTokens @return Actual amount of the LP token burned in the withdrawal """ assert not self.is_killed # dev: is killed amp: uint256 = self._A() old_balances: uint256[N_COINS] = self._balances() D0: uint256 = self.get_D(old_balances, amp) new_balances: uint256[N_COINS] = old_balances for i in range(N_COINS): new_balances[i] -= _amounts[i] D1: uint256 = self.get_D(new_balances, amp) ys: uint256 = (D0 + D1) / N_COINS lp_token: address = self.lp_token token_supply: uint256 = ERC20(lp_token).totalSupply() assert token_supply != 0 # dev: zero total supply _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _feemul: uint256 = self.offpeg_fee_multiplier _admin_fee: uint256 = self.admin_fee fees: uint256[N_COINS] = empty(uint256[N_COINS]) for i in range(N_COINS): ideal_balance: uint256 = D1 * old_balances[i] / D0 new_balance: uint256 = new_balances[i] difference: uint256 = 0 if ideal_balance > new_balance: difference = ideal_balance - new_balance else: difference = new_balance - ideal_balance xs: uint256 = new_balance + old_balances[i] fees[i] = self._dynamic_fee(xs, ys, _fee, _feemul) * difference / FEE_DENOMINATOR if _admin_fee != 0: self.admin_balances[i] += fees[i] * _admin_fee / FEE_DENOMINATOR new_balances[i] -= fees[i] D2: uint256 = self.get_D(new_balances, amp) token_amount: uint256 = (D0 - D2) * token_supply / D0 assert token_amount != 0 # dev: zero tokens burned assert token_amount <= _max_burn_amount, "Slippage screwed you" CurveToken(lp_token).burnFrom(msg.sender, token_amount) # dev: insufficient funds lending_pool: address = ZERO_ADDRESS if _use_underlying: lending_pool = self.aave_lending_pool for i in range(N_COINS): amount: uint256 = _amounts[i] if amount != 0: if _use_underlying: LendingPool(lending_pool).withdraw(self.underlying_coins[i], amount, msg.sender) else: assert ERC20(self.coins[i]).transfer(msg.sender, amount) log RemoveLiquidityImbalance(msg.sender, _amounts, fees, D1, token_supply - token_amount) return token_amount @pure @internal def get_y_D(A_: uint256, i: int128, xp: uint256[N_COINS], D: uint256) -> uint256: """ Calculate x[i] if one reduces D from being calculated for xp to D Done by solving quadratic equation iteratively. x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A) x_1**2 + b*x_1 = c x_1 = (x_1**2 + c) / (2*x_1 + b) """ # x in the input is converted to the same price/precision assert i >= 0 # dev: i below zero assert i < N_COINS # dev: i above N_COINS Ann: uint256 = A_ * N_COINS c: uint256 = D S_: uint256 = 0 _x: uint256 = 0 y_prev: uint256 = 0 for _i in range(N_COINS): if _i != i: _x = xp[_i] else: continue S_ += _x c = c * D / (_x * N_COINS) c = c * D * A_PRECISION / (Ann * N_COINS) b: uint256 = S_ + D * A_PRECISION / Ann 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: return y else: if y_prev - y <= 1: return y raise @view @internal def _calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: # First, need to calculate # * Get current D # * Solve Eqn against y_i for D - _token_amount amp: uint256 = self._A() xp: uint256[N_COINS] = self._balances() D0: uint256 = self.get_D(xp, amp) D1: uint256 = D0 - _token_amount * D0 / ERC20(self.lp_token).totalSupply() new_y: uint256 = self.get_y_D(amp, i, xp, D1) xp_reduced: uint256[N_COINS] = xp ys: uint256 = (D0 + D1) / (2 * N_COINS) _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) feemul: uint256 = self.offpeg_fee_multiplier for j in range(N_COINS): dx_expected: uint256 = 0 xavg: uint256 = 0 if j == i: dx_expected = xp[j] * D1 / D0 - new_y xavg = (xp[j] + new_y) / 2 else: dx_expected = xp[j] - xp[j] * D1 / D0 xavg = xp[j] xp_reduced[j] -= self._dynamic_fee(xavg, ys, _fee, feemul) * dx_expected / FEE_DENOMINATOR dy: uint256 = xp_reduced[i] - self.get_y_D(amp, i, xp_reduced, D1) return dy - 1 @view @external def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: """ @notice Calculate the amount received when withdrawing a single coin @dev Result is the same for underlying or wrapped asset withdrawals @param _token_amount Amount of LP tokens to burn in the withdrawal @param i Index value of the coin to withdraw @return Amount of coin received """ return self._calc_withdraw_one_coin(_token_amount, i) @external @nonreentrant('lock') def remove_liquidity_one_coin( _token_amount: uint256, i: int128, _min_amount: uint256, _use_underlying: bool = False ) -> uint256: """ @notice Withdraw a single coin from the pool @param _token_amount Amount of LP tokens to burn in the withdrawal @param i Index value of the coin to withdraw @param _min_amount Minimum amount of coin to receive @param _use_underlying If True, withdraw underlying assets instead of aTokens @return Amount of coin received """ assert not self.is_killed # dev: is killed dy: uint256 = self._calc_withdraw_one_coin(_token_amount, i) assert dy >= _min_amount, "Not enough coins removed" CurveToken(self.lp_token).burnFrom(msg.sender, _token_amount) # dev: insufficient funds if _use_underlying: LendingPool(self.aave_lending_pool).withdraw(self.underlying_coins[i], dy, msg.sender) else: assert ERC20(self.coins[i]).transfer(msg.sender, dy) log RemoveLiquidityOne(msg.sender, _token_amount, dy) return dy ### Admin functions ### @external def ramp_A(_future_A: uint256, _future_time: uint256): assert msg.sender == self.owner # dev: only owner assert block.timestamp >= self.initial_A_time + MIN_RAMP_TIME assert _future_time >= block.timestamp + MIN_RAMP_TIME # dev: insufficient time _initial_A: uint256 = self._A() _future_A_p: uint256 = _future_A * A_PRECISION assert _future_A > 0 and _future_A < MAX_A if _future_A_p < _initial_A: assert _future_A_p * MAX_A_CHANGE >= _initial_A else: assert _future_A_p <= _initial_A * MAX_A_CHANGE self.initial_A = _initial_A self.future_A = _future_A_p self.initial_A_time = block.timestamp self.future_A_time = _future_time log RampA(_initial_A, _future_A_p, block.timestamp, _future_time) @external def stop_ramp_A(): assert msg.sender == self.owner # dev: only owner current_A: uint256 = self._A() self.initial_A = current_A self.future_A = current_A self.initial_A_time = block.timestamp self.future_A_time = block.timestamp # now (block.timestamp < t1) is always False, so we return saved A log StopRampA(current_A, block.timestamp) @external def commit_new_fee(new_fee: uint256, new_admin_fee: uint256, new_offpeg_fee_multiplier: uint256): assert msg.sender == self.owner # dev: only owner assert self.admin_actions_deadline == 0 # dev: active action assert new_fee <= MAX_FEE # dev: fee exceeds maximum assert new_admin_fee <= MAX_ADMIN_FEE # dev: admin fee exceeds maximum assert new_offpeg_fee_multiplier * new_fee <= MAX_FEE * FEE_DENOMINATOR # dev: offpeg multiplier exceeds maximum _deadline: uint256 = block.timestamp + ADMIN_ACTIONS_DELAY self.admin_actions_deadline = _deadline self.future_fee = new_fee self.future_admin_fee = new_admin_fee self.future_offpeg_fee_multiplier = new_offpeg_fee_multiplier log CommitNewFee(_deadline, new_fee, new_admin_fee, new_offpeg_fee_multiplier) @external def apply_new_fee(): assert msg.sender == self.owner # dev: only owner assert block.timestamp >= self.admin_actions_deadline # dev: insufficient time assert self.admin_actions_deadline != 0 # dev: no active action self.admin_actions_deadline = 0 _fee: uint256 = self.future_fee _admin_fee: uint256 = self.future_admin_fee _fml: uint256 = self.future_offpeg_fee_multiplier self.fee = _fee self.admin_fee = _admin_fee self.offpeg_fee_multiplier = _fml log NewFee(_fee, _admin_fee, _fml) @external def revert_new_parameters(): assert msg.sender == self.owner # dev: only owner self.admin_actions_deadline = 0 @external def commit_transfer_ownership(_owner: address): assert msg.sender == self.owner # dev: only owner assert self.transfer_ownership_deadline == 0 # dev: active transfer _deadline: uint256 = block.timestamp + ADMIN_ACTIONS_DELAY self.transfer_ownership_deadline = _deadline self.future_owner = _owner log CommitNewAdmin(_deadline, _owner) @external def apply_transfer_ownership(): assert msg.sender == self.owner # dev: only owner assert block.timestamp >= self.transfer_ownership_deadline # dev: insufficient time assert self.transfer_ownership_deadline != 0 # dev: no active transfer self.transfer_ownership_deadline = 0 _owner: address = self.future_owner self.owner = _owner log NewAdmin(_owner) @external def revert_transfer_ownership(): assert msg.sender == self.owner # dev: only owner self.transfer_ownership_deadline = 0 @external def withdraw_admin_fees(): assert msg.sender == self.owner # dev: only owner for i in range(N_COINS): value: uint256 = self.admin_balances[i] if value != 0: assert ERC20(self.coins[i]).transfer(msg.sender, value) self.admin_balances[i] = 0 @external def donate_admin_fees(): """ Just in case admin balances somehow become higher than total (rounding error?) this can be used to fix the state, too """ assert msg.sender == self.owner # dev: only owner self.admin_balances = empty(uint256[N_COINS]) @external def kill_me(): assert msg.sender == self.owner # dev: only owner assert self.kill_deadline > block.timestamp # dev: deadline has passed self.is_killed = True @external def unkill_me(): assert msg.sender == self.owner # dev: only owner self.is_killed = False @external def set_aave_referral(referral_code: uint256): assert msg.sender == self.owner # dev: only owner assert referral_code < 2 ** 16 # dev: uint16 overflow self.aave_referral = referral_code
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[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","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[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"token_amount","indexed":false},{"type":"uint256","name":"coin_amount","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","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},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewFee","inputs":[{"type":"uint256","name":"deadline","indexed":true},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false},{"type":"uint256","name":"offpeg_fee_multiplier","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewFee","inputs":[{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false},{"type":"uint256","name":"offpeg_fee_multiplier","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampA","inputs":[{"type":"uint256","name":"old_A","indexed":false},{"type":"uint256","name":"new_A","indexed":false},{"type":"uint256","name":"initial_time","indexed":false},{"type":"uint256","name":"future_time","indexed":false}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"t","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[2]","name":"_coins"},{"type":"address[2]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"address","name":"_aave_lending_pool"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"},{"type":"uint256","name":"_admin_fee"},{"type":"uint256","name":"_offpeg_fee_multiplier"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":5199},{"name":"A_precise","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":5161},{"name":"dynamic_fee","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"}],"stateMutability":"view","type":"function","gas":9662},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"i"}],"stateMutability":"view","type":"function","gas":2731},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1115439},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":2219391},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_min_mint_amount"}],"stateMutability":"nonpayable","type":"function"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_min_mint_amount"},{"type":"bool","name":"_use_underlying"}],"stateMutability":"nonpayable","type":"function"},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"stateMutability":"view","type":"function","gas":5315961},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"stateMutability":"view","type":"function","gas":5315991},{"name":"exchange","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"stateMutability":"nonpayable","type":"function","gas":5437961},{"name":"exchange_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"stateMutability":"nonpayable","type":"function","gas":5443079},{"name":"remove_liquidity","outputs":[{"type":"uint256[2]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[2]","name":"_min_amounts"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity","outputs":[{"type":"uint256[2]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[2]","name":"_min_amounts"},{"type":"bool","name":"_use_underlying"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_max_burn_amount"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_max_burn_amount"},{"type":"bool","name":"_use_underlying"}],"stateMutability":"nonpayable","type":"function"},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3974152},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"},{"type":"bool","name":"_use_underlying"}],"stateMutability":"nonpayable","type":"function"},{"name":"ramp_A","outputs":[],"inputs":[{"type":"uint256","name":"_future_A"},{"type":"uint256","name":"_future_time"}],"stateMutability":"nonpayable","type":"function","gas":151924},{"name":"stop_ramp_A","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":148685},{"name":"commit_new_fee","outputs":[],"inputs":[{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"},{"type":"uint256","name":"new_offpeg_fee_multiplier"}],"stateMutability":"nonpayable","type":"function","gas":146452},{"name":"apply_new_fee","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":133714},{"name":"revert_new_parameters","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":21955},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"stateMutability":"nonpayable","type":"function","gas":74693},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":60770},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":22045},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":48455},{"name":"donate_admin_fees","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":42234},{"name":"kill_me","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38028},{"name":"unkill_me","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":22165},{"name":"set_aave_referral","outputs":[],"inputs":[{"type":"uint256","name":"referral_code"}],"stateMutability":"nonpayable","type":"function","gas":37295},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2280},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2310},{"name":"admin_balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2340},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2261},{"name":"offpeg_fee_multiplier","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2291},{"name":"admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2321},{"name":"owner","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2351},{"name":"lp_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2381},{"name":"initial_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2411},{"name":"future_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2441},{"name":"initial_A_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2471},{"name":"future_A_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2501},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2531},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2561},{"name":"future_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2591},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2621},{"name":"future_offpeg_fee_multiplier","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2651},{"name":"future_owner","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2681}]
Contract Creation Code
610140614ecd610140396020614ecd60c03960c05160a01c1561002157600080fd5b60206020614ecd0160c03960c05160a01c1561003c57600080fd5b60206040614ecd0160c03960c05160a01c1561005757600080fd5b60206060614ecd0160c03960c05160a01c1561007257600080fd5b60206080614ecd0160c03960c05160a01c1561008d57600080fd5b602060a0614ecd0160c03960c05160a01c156100a857600080fd5b61028060006002818352015b600061014061028051600281106100ca57600080fd5b6020020151186100d957600080fd5b600061018061028051600281106100ef57600080fd5b6020020151186100fe57600080fd5b5b81516001018083528114156100b4575b5050600060c052602060c02061014051815561016051600182015550600160c052602060c0206101805181556101a051600182015550610200516064808202821582848304141761015f57600080fd5b80905090509050600a55610200516064808202821582848304141761018357600080fd5b80905090509050600b556102205160035561024051600555610260516004553360065542624f1a008181830110156101ba57600080fd5b808201905090506015556101c0516007556101e0516008556102a060006002818352015b60206102a051026101800151610280526020610360604463095ea7b36102c0526101e0516102e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610300526102dc6000610280515af161023f57600080fd5b601f3d1161024c57600080fd5b6000506103605161025c57600080fd5b5b81516001018083528114156101de575b5050614eb556341561000a57600080fd5b600436101561001857614c3b565b600035601c526000156101c1575b61014052600d5461016052600b5461018052610160514210156101ae57600a546101a052600c546101c0526101a051610180511115610107576101a051610180516101a0518082101561007857600080fd5b80820390509050426101c0518082101561009157600080fd5b8082039050905080820282158284830414176100ac57600080fd5b80905090509050610160516101c051808210156100c857600080fd5b8082039050905080806100da57600080fd5b8204905090508181830110156100ef57600080fd5b808201905090506000526000516101405156506101a9565b6101a0516101a051610180518082101561012057600080fd5b80820390509050426101c0518082101561013957600080fd5b80820390509050808202821582848304141761015457600080fd5b80905090509050610160516101c0518082101561017057600080fd5b80820390509050808061018257600080fd5b8204905090508082101561019557600080fd5b808203905090506000526000516101405156505b6101bf565b610180516000526000516101405156505b005b63f446c1d060005114156101f45760065801610026565b610140526101405160648082049050905060005260206000f350005b6376a2f0f0600051141561021e5760065801610026565b610140526101405160005260206000f350005b600015610396575b6101c0526101405261016052610180526101a0526402540be4006101a05111151561026057610180516000526000516101c0515650610394565b610140516101605181818301101561027757600080fd5b808201905090506101e0526101e080516101e051808202821582848304141761029f57600080fd5b809050905090508152506101a0516101805180820282158284830414176102c557600080fd5b809050905090506101a0516402540be400808210156102e357600080fd5b808203905090506004808202821582848304141761030057600080fd5b8090509050905061014051808202821582848304141761031f57600080fd5b8090509050905061016051808202821582848304141761033e57600080fd5b809050905090506101e051808061035457600080fd5b8204905090506402540be40081818301101561036f57600080fd5b80820190509050808061038157600080fd5b8204905090506000526000516101c05156505b005b6376a9cd3e600051141561054c57600435808060008112156103b457195b607f1c156103c157600080fd5b905050602435808060008112156103d457195b607f1c156103e157600080fd5b90505060206101e060246370a0823161016052306101805261017c6004356002811061040c57600080fd5b600060c052602060c02001545afa61042357600080fd5b601f3d1161043057600080fd5b6000506101e0516004356002811061044757600080fd5b600260c052602060c02001548082101561046057600080fd5b8082039050905061014052602061020060246370a0823161018052306101a05261019c6024356002811061049357600080fd5b600060c052602060c02001545afa6104aa57600080fd5b601f3d116104b757600080fd5b60005061020051602435600281106104ce57600080fd5b600260c052602060c0200154808210156104e757600080fd5b808203905090506101605261014051610160516101405161018052610160516101a0526003546101c0526004546101e0526101e0516101c0516101a0516101805160065801610226565b6102405261016052610140526102405160005260206000f350005b634903b0d160005114156105e85760206101c060246370a0823161014052306101605261015c6004356002811061058257600080fd5b600060c052602060c02001545afa61059957600080fd5b601f3d116105a657600080fd5b6000506101c051600435600281106105bd57600080fd5b600260c052602060c0200154808210156105d657600080fd5b8082039050905060005260206000f350005b6000156106f4575b61014052604036610160376101a060006002818352015b602061024060246370a082316101c052306101e0526101dc6101a0516002811061063057600080fd5b600060c052602060c02001545afa61064757600080fd5b601f3d1161065457600080fd5b600050610240516101a0516002811061066c57600080fd5b600260c052602060c02001548082101561068557600080fd5b808203905090506101606101a051600281106106a057600080fd5b60200201525b8151600101808352811415610607575b505060406101a0525b60006101a0511115156106d1576106ed565b60206101a05103610160015160206101a051036101a0526106bf565b6101405156005b600015610a19575b6101a05261014052610160526101805260006101c05261020060006002818352015b6020610200510261014001516101e0526101c080516101e05181818301101561074657600080fd5b808201905090508152505b815160010180835281141561071e575b50506101c051151561077c5760006000526000516101a05156505b60006101e0526101c0516102005261018051600280820282158284830414176107a457600080fd5b8090509050905061022052610240600060ff818352015b61020051610260526102a060006002818352015b60206102a05102610140015161028052610260516102005180820282158284830414176107fb57600080fd5b80905090509050610280516002808202821582848304141761081c57600080fd5b80905090509050600181818301101561083457600080fd5b80820190509050808061084657600080fd5b820490509050610260525b81516001018083528114156107cf575b5050610200516101e052610220516101c051808202821582848304141761088757600080fd5b8090509050905060648082049050905061026051600280820282158284830414176108b157600080fd5b809050905090508181830110156108c757600080fd5b808201905090506102005180820282158284830414176108e657600080fd5b809050905090506102205160648082101561090057600080fd5b8082039050905061020051808202821582848304141761091f57600080fd5b80905090509050606480820490509050600361026051808202821582848304141761094957600080fd5b8090509050905081818301101561095f57600080fd5b80820190509050808061097157600080fd5b820490509050610200526101e0516102005111156109c6576001610200516101e051808210156109a057600080fd5b808203905090501115156109c1576102005160005250506000516101a05156505b6109ff565b60016101e05161020051808210156109dd57600080fd5b808203905090501115156109fe576102005160005250506000516101a05156505b5b5b81516001018083528114156107bb575b505060006000fd005b63bb7b8b806000511415610b825761014051600658016105f0565b61016052610180526101405261016080516101a05280602001516101c052506101405161016051610180516101a0516101c05160065801610026565b6101e0526101c0526101a0526101805261016052610140526101e051610200526101405161016051610180516101a0516101c0516101e051610200516101a051610220526101c051610240526102005161026052610260516102405161022051600658016106fc565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c0516101405260206101e060046318160ddd6101805261019c6007545afa610b2257600080fd5b601f3d11610b2f57600080fd5b6000506101e0516101605261014051670de0b6b3a76400008082028215828483041417610b5b57600080fd5b80905090509050610160518080610b7157600080fd5b82049050905060005260206000f350005b63ed8e84f36000511415610e4c5760443560011c15610ba057600080fd5b6101405161016051600658016105f0565b610180526101a05261016052610140526101808051610140528060200151610160525061014051610160516101805160065801610026565b6101a0526101805261016052610140526101a051610180526101405161016051610180516101a051610140516101c052610160516101e0526101805161020052610200516101e0516101c051600658016106fc565b610260526101a052610180526101605261014052610260516101a0526101c060006002818352015b60443515610cbe576101406101c05160028110610c8257600080fd5b60200201805160046101c05160028110610c9b57600080fd5b6020020135818183011015610caf57600080fd5b80820190509050815250610d08565b6101406101c05160028110610cd257600080fd5b60200201805160046101c05160028110610ceb57600080fd5b602002013580821015610cfd57600080fd5b808203905090508152505b5b8151600101808352811415610c66575b50506101405161016051610180516101a0516101c051610140516101e0526101605161020052610180516102205261022051610200516101e051600658016106fc565b610280526101c0526101a052610180526101605261014052610280516101c052602061026060046318160ddd6102005261021c6007545afa610d9d57600080fd5b601f3d11610daa57600080fd5b600050610260516101e05260006102005260443515610de8576101c0516101a05180821015610dd857600080fd5b8082039050905061020052610e09565b6101a0516101c05180821015610dfd57600080fd5b80820390509050610200525b610200516101e0518082028215828483041417610e2557600080fd5b809050905090506101a0518080610e3b57600080fd5b82049050905060005260206000f350005b630b4c7e4d6000511415610e6557600061014052610e9b565b63ee22be236000511415610e935760643560011c15610e8357600080fd5b6020606461014037600050610e9b565b6000156118f2575b62ffffff5415610eaa57600080fd5b600162ffffff5560145415610ebe57600080fd5b610140516101605160065801610026565b61018052610160526101405261018051610160526101405161016051610180516101a051600658016105f0565b6101c0526101e0526101a0526101805261016052610140526101c080516101805280602001516101a052506007546101c052602061026060046318160ddd6102005261021c6101c0515afa610f5057600080fd5b601f3d11610f5d57600080fd5b600050610260516101e05260006102005260006101e0511815610fec576101405161016051610180516101a0516101c0516101e0516102005161018051610220526101a051610240526101605161026052610260516102405161022051600658016106fc565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c051610200525b61018051610220526101a0516102405261026060006002818352015b6101e05115156110375760006004610260516002811061102757600080fd5b60200201351861103657600080fd5b5b610220610260516002811061104b57600080fd5b6020020180516004610260516002811061106457600080fd5b602002013581818301101561107857600080fd5b808201905090508152505b8151600101808352811415611008575b50506101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516102205161028052610240516102a052610160516102c0526102c0516102a05161028051600658016106fc565b61032052610260526102405261022052610200526101e0526101c0526101a052610180526101605261014052610320516102605261020051610260511161113057600080fd5b6060366102803760006101e051181561155c57610200516102605181818301101561115a57600080fd5b808201905090506002808204905090506102e0526003546002808202821582848304141761118757600080fd5b8090509050905060048082049050905061030052600454610320526005546103405260006103605261038060006002818352015b6102605161018061038051600281106111d357600080fd5b602002015180820282158284830414176111ec57600080fd5b8090509050905061020051808061120257600080fd5b8204905090506103a052610220610380516002811061122057600080fd5b60200201516103c0526103c0516103a051111561125c576103a0516103c0518082101561124c57600080fd5b808203905090506103605261127d565b6103c0516103a0518082101561127157600080fd5b80820390509050610360525b610180610380516002811061129157600080fd5b60200201516103c0518181830110156112a957600080fd5b808201905090506103e052610140610400525b610400515160206104005101610400526104006104005110156112de576112bc565b6103e051610420526102e05161044052610300516104605261032051610480526104805161046051610440516104205160065801610226565b6104e0526103e0610400525b610400515260206104005103610400526101406104005110151561134657611323565b6104e05161036051808202821582848304141761136257600080fd5b809050905090506402540be40080820490509050610280610380516002811061138a57600080fd5b602002015260006103405118156114185761038051600281106113ac57600080fd5b600260c052602060c02001805461028061038051600281106113cd57600080fd5b60200201516103405180820282158284830414176113ea57600080fd5b809050905090506402540be4008082049050905081818301101561140d57600080fd5b808201905090508155505b6103c051610280610380516002811061143057600080fd5b60200201518082101561144257600080fd5b80820390509050610220610380516002811061145d57600080fd5b60200201525b81516001018083528114156111bb575b50506101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561149f5761147d565b610220516103c052610240516103e0526101605161040052610400516103e0516103c051600658016106fc565b610460526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156114fb576114d8565b61046051610380526101e05161038051610200518082101561151c57600080fd5b80820390509050808202821582848304141761153757600080fd5b8090509050905061020051808061154d57600080fd5b8204905090506102c052611565565b610260516102c0525b6044356102c051101515156115b9576308c379a06102e0526020610300526014610320527f536c697070616765207363726577656420796f75000000000000000000000000610340526103205060646102fcfd5b610140511561176b576008546102e0526009546103005261032060006002818352015b600461032051600281106115ef57600080fd5b602002013561034052600061034051181561175357610320516002811061161557600080fd5b600160c052602060c020015461036052602061044060646323b872dd61038052336103a052306103c052610340516103e05261039c6000610360515af161165b57600080fd5b601f3d1161166857600080fd5b6000506104405161167857600080fd5b60006004610380527fe8eda9df000000000000000000000000000000000000000000000000000000006103a0526103806004806020846103e001018260208501600060045af1505080518201915050610360516020826103e0010152602081019050610340516020826103e0010152602081019050306020826103e0010152602081019050610300516020826103e0010152602081019050806103e0526103e090508051602001806104c08284600060045af161173457600080fd5b5050600060006104c0516104e060006102e0515af161175257600080fd5b5b5b81516001018083528114156115dc575b5050611820565b6102e060006002818352015b60046102e0516002811061178a57600080fd5b602002013561030052600061030051181561180c5760206103e060646323b872dd6103205233610340523061036052610300516103805261033c60006102e051600281106117d757600080fd5b600060c052602060c02001545af16117ee57600080fd5b601f3d116117fb57600080fd5b6000506103e05161180b57600080fd5b5b5b8151600101808352811415611777575b50505b602061038060446340c10f196102e05233610300526102c051610320526102fc60006101c0515af161185157600080fd5b601f3d1161185e57600080fd5b600050610380506004356102e0526024356103005261028051610320526102a0516103405261026051610360526101e0516102c0518181830110156118a257600080fd5b8082019050905061038052337f26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a76860c06102e0a26102c051600052600062ffffff5560206000f350600062ffffff55005b600015611d74575b6101e0526101405261016052610180526101a0526101c05261016051610140511861192457600080fd5b600061016051121561193557600080fd5b6002610160511261194557600080fd5b600061014051121561195657600080fd5b6002610140511261196657600080fd5b6101405161016051610180516101a0516101c0516101e0516102005160065801610026565b61022052610200526101e0526101c0526101a05261018052610160526101405261022051610200526101405161016051610180516101a0516101c0516101e05161020051610220516101a051610240526101c051610260526102005161028052610280516102605161024051600658016106fc565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051610220526102005160028082028215828483041417611a4657600080fd5b80905090509050610240526102205161026052606036610280376102e060006002818352015b610140516102e0511415611a8757610180516102a052611abd565b610160516102e0511815611ab7576101a06102e05160028110611aa957600080fd5b60200201516102a052611abc565b611b39565b5b61028080516102a051818183011015611ad557600080fd5b8082019050905081525061026051610220518082028215828483041417611afb57600080fd5b809050905090506102a05160028082028215828483041417611b1c57600080fd5b809050905090508080611b2e57600080fd5b820490509050610260525b8151600101808352811415611a6c575b505061026051610220518082028215828483041417611b6757600080fd5b8090509050905060648082028215828483041417611b8457600080fd5b809050905090506102405160028082028215828483041417611ba557600080fd5b809050905090508080611bb757600080fd5b82049050905061026052610280516102205160648082028215828483041417611bdf57600080fd5b80905090509050610240518080611bf557600080fd5b820490509050818183011015611c0a57600080fd5b808201905090506102e0526102205161030052610320600060ff818352015b610300516102c05261030051610300518082028215828483041417611c4d57600080fd5b8090509050905061026051818183011015611c6757600080fd5b808201905090506002610300518082028215828483041417611c8857600080fd5b809050905090506102e051818183011015611ca257600080fd5b808201905090506102205180821015611cba57600080fd5b808203905090508080611ccc57600080fd5b820490509050610300526102c051610300511115611d21576001610300516102c05180821015611cfb57600080fd5b80820390509050111515611d1c576103005160005250506000516101e05156505b611d5a565b60016102c0516103005180821015611d3857600080fd5b80820390509050111515611d59576103005160005250506000516101e05156505b5b5b8151600101808352811415611c29575b505060006000fd005b600015612036575b6101a0526101405261016052610180526101405161016051610180516101a0516101c0516101e051600658016105f0565b61020052610220526101e0526101c0526101a05261018052610160526101405261020080516101c05280602001516101e052506101c06101405160028110611df457600080fd5b602002015161018051818183011015611e0c57600080fd5b80820190509050610200526101405161016051610180516101a0516101c0516101e05161020051610220516101405161024052610160516102605261020051610280526101c0516102a0526101e0516102c0526102c0516102a051610280516102605161024051600658016118fa565b6103205261022052610200526101e0526101c0526101a05261018052610160526101405261032051610220526101c06101605160028110611ebc57600080fd5b60200201516102205180821015611ed257600080fd5b80820390509050610240526101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516101c06101405160028110611f1957600080fd5b602002015161020051818183011015611f3157600080fd5b80820190509050600280820490509050610280526101c06101605160028110611f5957600080fd5b602002015161022051818183011015611f7157600080fd5b808201905090506002808204905090506102a0526003546102c0526004546102e0526102e0516102c0516102a0516102805160065801610226565b61034052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261034051610240518082028215828483041417611ff457600080fd5b809050905090506402540be400808204905090506102605261024051610260518082101561202157600080fd5b808203905090506000526000516101a0515650005b635e0d443f60005114156120c1576004358080600081121561205457195b607f1c1561206157600080fd5b9050506024358080600081121561207457195b607f1c1561208157600080fd5b90505060043561014052602435610160526044356101805261018051610160516101405160065801611d7c565b6101e0526101e05160005260206000f350005b6307211ef7600051141561214c57600435808060008112156120df57195b607f1c156120ec57600080fd5b905050602435808060008112156120ff57195b607f1c1561210c57600080fd5b90505060043561014052602435610160526044356101805261018051610160516101405160065801611d7c565b6101e0526101e05160005260206000f350005b6000156124ab575b6101a0526101405261016052610180526014541561217157600080fd5b6101405161016051610180516101a0516101c0516101e051600658016105f0565b61020052610220526101e0526101c0526101a05261018052610160526101405261020080516101c05280602001516101e052506101c061014051600281106121d957600080fd5b6020020151610180518181830110156121f157600080fd5b80820190509050610200526101405161016051610180516101a0516101c0516101e05161020051610220516101405161024052610160516102605261020051610280526101c0516102a0526101e0516102c0526102c0516102a051610280516102605161024051600658016118fa565b6103205261022052610200526101e0526101c0526101a05261018052610160526101405261032051610220526101c061016051600281106122a157600080fd5b602002015161022051808210156122b757600080fd5b8082039050905061024052610240516101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516101c0610140516002811061230257600080fd5b60200201516102005181818301101561231a57600080fd5b80820190509050600280820490509050610280526101c0610160516002811061234257600080fd5b60200201516102205181818301101561235a57600080fd5b808201905090506002808204905090506102a0526003546102c0526004546102e0526102e0516102c0516102a0516102805160065801610226565b61034052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103405180820282158284830414176123d957600080fd5b809050905090506402540be4008082049050905061026052600554610280526000610280511815612481576102605161028051808202821582848304141761242057600080fd5b809050905090506402540be400808204905090506102a05260006102a051181561248057610160516002811061245557600080fd5b600260c052602060c0200180546102a05181818301101561247557600080fd5b808201905090508155505b5b61024051610260518082101561249657600080fd5b808203905090506000526000516101a0515650005b633df0212460005114156126f85762ffffff54156124c857600080fd5b600162ffffff55600435808060008112156124df57195b607f1c156124ec57600080fd5b905050602435808060008112156124ff57195b607f1c1561250c57600080fd5b9050506101405160043561016052602435610180526044356101a0526101a051610180516101605160065801612154565b6102005261014052610200516101405260643561014051101515156125c6576308c379a061016052602061018052602e6101a0527f45786368616e676520726573756c74656420696e20666577657220636f696e736101c0527f207468616e2065787065637465640000000000000000000000000000000000006101e0526101a050608461017cfd5b602061022060646323b872dd610160523361018052306101a0526044356101c05261017c6000600435600281106125fc57600080fd5b600060c052602060c02001545af161261357600080fd5b601f3d1161262057600080fd5b6000506102205161263057600080fd5b6020610200604463a9059cbb610160523361018052610140516101a05261017c60006024356002811061266257600080fd5b600060c052602060c02001545af161267957600080fd5b601f3d1161268657600080fd5b6000506102005161269657600080fd5b60043561016052604435610180526024356101a052610140516101c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610160a261014051600052600062ffffff5560206000f350600062ffffff55005b63a6417ed66000511415612a245762ffffff541561271557600080fd5b600162ffffff556004358080600081121561272c57195b607f1c1561273957600080fd5b9050506024358080600081121561274c57195b607f1c1561275957600080fd5b9050506101405160043561016052602435610180526044356101a0526101a051610180516101605160065801612154565b610200526101405261020051610140526064356101405110151515612813576308c379a061016052602061018052602e6101a0527f45786368616e676520726573756c74656420696e20666577657220636f696e736101c0527f207468616e2065787065637465640000000000000000000000000000000000006101e0526101a050608461017cfd5b6004356002811061282357600080fd5b600160c052602060c02001546101605260085461018052602061026060646323b872dd6101a052336101c052306101e052604435610200526101bc6000610160515af161286f57600080fd5b601f3d1161287c57600080fd5b6000506102605161288c57600080fd5b600060046101a0527fe8eda9df000000000000000000000000000000000000000000000000000000006101c0526101a060048060208461020001018260208501600060045af15050805182019150506101605160208261020001015260208101905060443560208261020001015260208101905030602082610200010152602081019050600954602082610200010152602081019050806102005261020090508051602001806102e08284600060045af161294657600080fd5b5050600060006102e0516103006000610180515af161296457600080fd5b610180513b61297257600080fd5b6000600060646369328dec6101a0526024356002811061299157600080fd5b600160c052602060c02001546101c052610140516101e05233610200526101bc6000610180515af16129c257600080fd5b6004356101a0526044356101c0526024356101e0526101405161020052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b60806101a0a261014051600052600062ffffff5560206000f350600062ffffff55005b635b36389c6000511415612a3d57600061014052612a73565b63269b55816000511415612a6b5760643560011c15612a5b57600080fd5b6020606461014037600050612a73565b600015612dc4575b62ffffff5415612a8257600080fd5b600162ffffff55610140516101605161018051600658016105f0565b6101a0526101c0526101805261016052610140526101a0805161016052806020015161018052506007546101a052602061024060046318160ddd6101e0526101fc6101a0515afa612aee57600080fd5b601f3d11612afb57600080fd5b600050610240516101c052602061028060446379cc67906101e0523361020052600435610220526101fc60006101a0515af1612b3657600080fd5b601f3d11612b4357600080fd5b6000506102805060006101e0526101405115612b61576008546101e0525b61020060006002818352015b6101606102005160028110612b8157600080fd5b60200201516004358082028215828483041417612b9d57600080fd5b809050905090506101c0518080612bb357600080fd5b8204905090506102205260246102005160028110612bd057600080fd5b60200201356102205110151515612c4b576308c379a0610240526020610260526030610280527f5769746864726177616c20726573756c74656420696e20666577657220636f696102a0527f6e73207468616e206578706563746564000000000000000000000000000000006102c05261028050608461025cfd5b610220516101606102005160028110612c6357600080fd5b60200201526101405115612cd5576101e0513b612c7f57600080fd5b6000600060646369328dec610240526102005160028110612c9f57600080fd5b600160c052602060c0200154610260526102205161028052336102a05261025c60006101e0515af1612cd057600080fd5b612d3d565b60206102e0604463a9059cbb610240523361026052610220516102805261025c60006102005160028110612d0857600080fd5b600060c052602060c02001545af1612d1f57600080fd5b601f3d11612d2c57600080fd5b6000506102e051612d3c57600080fd5b5b5b8151600101808352811415612b6d575b505061016051610200526101805161022052604036610240376101c05160043580821015612d7b57600080fd5b8082039050905061028052337f7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c60a0610200a2600062ffffff556040610160f3600062ffffff55005b63e31032736000511415612ddd57600061014052612e13565b63e1df4f636000511415612e0b5760643560011c15612dfb57600080fd5b6020606461014037600050612e13565b6000156136c5575b62ffffff5415612e2257600080fd5b600162ffffff5560145415612e3657600080fd5b610140516101605160065801610026565b61018052610160526101405261018051610160526101405161016051610180516101a051600658016105f0565b6101c0526101e0526101a0526101805261016052610140526101c080516101805280602001516101a052506101405161016051610180516101a0516101c051610180516101e0526101a05161020052610160516102205261022051610200516101e051600658016106fc565b610280526101c0526101a052610180526101605261014052610280516101c052610180516101e0526101a0516102005261022060006002818352015b6101e06102205160028110612f3057600080fd5b60200201805160046102205160028110612f4957600080fd5b602002013580821015612f5b57600080fd5b808203905090508152505b8151600101808352811415612f1c575b50506101405161016051610180516101a0516101c0516101e05161020051610220516101e0516102405261020051610260526101605161028052610280516102605161024051600658016106fc565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051610220526101c0516102205181818301101561300857600080fd5b808201905090506002808204905090506102405260075461026052602061030060046318160ddd6102a0526102bc610260515afa61304557600080fd5b601f3d1161305257600080fd5b60005061030051610280526000610280511861306d57600080fd5b6003546002808202821582848304141761308657600080fd5b809050905090506004808204905090506102a0526004546102c0526005546102e0526040366103003761034060006002818352015b6102205161018061034051600281106130d357600080fd5b602002015180820282158284830414176130ec57600080fd5b809050905090506101c051808061310257600080fd5b820490509050610360526101e0610340516002811061312057600080fd5b60200201516103805260006103a052610380516103605111156131625761036051610380518082101561315257600080fd5b808203905090506103a052613183565b61038051610360518082101561317757600080fd5b808203905090506103a0525b61038051610180610340516002811061319b57600080fd5b60200201518181830110156131af57600080fd5b808201905090506103c0526101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156131e4576131c2565b6103c0516104005261024051610420526102a051610440526102c051610460526104605161044051610420516104005160065801610226565b6104c0526103c06103e0525b6103e0515260206103e051036103e0526101406103e05110151561324c57613229565b6104c0516103a051808202821582848304141761326857600080fd5b809050905090506402540be40080820490509050610300610340516002811061329057600080fd5b602002015260006102e051181561331e5761034051600281106132b257600080fd5b600260c052602060c02001805461030061034051600281106132d357600080fd5b60200201516102e05180820282158284830414176132f057600080fd5b809050905090506402540be4008082049050905081818301101561331357600080fd5b808201905090508155505b6101e0610340516002811061333257600080fd5b602002018051610300610340516002811061334c57600080fd5b60200201518082101561335e57600080fd5b808203905090508152505b81516001018083528114156130bb575b5050610140610360525b610360515160206103605101610360526103606103605110156133a557613383565b6101e05161038052610200516103a052610160516103c0526103c0516103a05161038051600658016106fc565b61042052610340610360525b6103605152602061036051036103605261014061036051101515613401576133de565b61042051610340526101c051610340518082101561341e57600080fd5b8082039050905061028051808202821582848304141761343d57600080fd5b809050905090506101c051808061345357600080fd5b820490509050610360526000610360511861346d57600080fd5b60443561036051111515156134c1576308c379a06103805260206103a05260146103c0527f536c697070616765207363726577656420796f750000000000000000000000006103e0526103c050606461039cfd5b602061042060446379cc679061038052336103a052610360516103c05261039c6000610260515af16134f257600080fd5b601f3d116134ff57600080fd5b60005061042050600061038052610140511561351d57600854610380525b6103a060006002818352015b60046103a0516002811061353c57600080fd5b60200201356103c05260006103c05118156136275761014051156135be57610380513b61356857600080fd5b6000600060646369328dec6103e0526103a0516002811061358857600080fd5b600160c052602060c0200154610400526103c0516104205233610440526103fc6000610380515af16135b957600080fd5b613626565b6020610480604463a9059cbb6103e05233610400526103c051610420526103fc60006103a051600281106135f157600080fd5b600060c052602060c02001545af161360857600080fd5b601f3d1161361557600080fd5b6000506104805161362557600080fd5b5b5b5b8151600101808352811415613529575b50506004356103a0526024356103c052610300516103e0526103205161040052610220516104205261028051610360518082101561367557600080fd5b8082039050905061044052337f2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e60c06103a0a261036051600052600062ffffff5560206000f350600062ffffff55005b600015613a32575b6101e0526101405261016052610180526101a0526101c05260006101605112156136f657600080fd5b6002610160511261370657600080fd5b610140516002808202821582848304141761372057600080fd5b80905090509050610200526101c05161022052606036610240376102a060006002818352015b610160516102a0511815613776576101806102a0516002811061376857600080fd5b60200201516102605261377b565b6137f7565b61024080516102605181818301101561379357600080fd5b80820190509050815250610220516101c05180820282158284830414176137b957600080fd5b8090509050905061026051600280820282158284830414176137da57600080fd5b8090509050905080806137ec57600080fd5b820490509050610220525b8151600101808352811415613746575b5050610220516101c051808202821582848304141761382557600080fd5b809050905090506064808202821582848304141761384257600080fd5b80905090509050610200516002808202821582848304141761386357600080fd5b80905090509050808061387557600080fd5b82049050905061022052610240516101c0516064808202821582848304141761389d57600080fd5b809050905090506102005180806138b357600080fd5b8204905090508181830110156138c857600080fd5b808201905090506102a0526101c0516102c0526102e0600060ff818352015b6102c051610280526102c0516102c051808202821582848304141761390b57600080fd5b809050905090506102205181818301101561392557600080fd5b8082019050905060026102c051808202821582848304141761394657600080fd5b809050905090506102a05181818301101561396057600080fd5b808201905090506101c0518082101561397857600080fd5b80820390509050808061398a57600080fd5b8204905090506102c052610280516102c05111156139df5760016102c05161028051808210156139b957600080fd5b808203905090501115156139da576102c05160005250506000516101e05156505b613a18565b6001610280516102c051808210156139f657600080fd5b80820390509050111515613a17576102c05160005250506000516101e05156505b5b5b81516001018083528114156138e7575b505060006000fd005b600015614039575b6101805261014052610160526101405161016051610180516101a05160065801610026565b6101c0526101a0526101805261016052610140526101c0516101a0526101405161016051610180516101a0516101c0516101e051600658016105f0565b61020052610220526101e0526101c0526101a05261018052610160526101405261020080516101c05280602001516101e052506101405161016051610180516101a0516101c0516101e051610200516101c051610220526101e051610240526101a05161026052610260516102405161022051600658016106fc565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c051610200526102005161014051610200518082028215828483041417613b6057600080fd5b8090509050905060206102a060046318160ddd6102405261025c6007545afa613b8857600080fd5b601f3d11613b9557600080fd5b6000506102a0518080613ba757600080fd5b82049050905080821015613bba57600080fd5b80820390509050610220526101405161016051610180516101a0516101c0516101e0516102005161022051610240516101a0516102605261016051610280526101c0516102a0526101e0516102c052610220516102e0526102e0516102c0516102a0516102805161026051600658016136cd565b610340526102405261022052610200526101e0526101c0526101a05261018052610160526101405261034051610240526101c051610260526101e051610280526102005161022051818183011015613c8557600080fd5b808201905090506004808204905090506102a05260035460028082028215828483041417613cb257600080fd5b809050905090506004808204905090506102c0526004546102e05261030060006002818352015b6040366103203761016051610300511415613d9c576101c06103005160028110613d0257600080fd5b6020020151610220518082028215828483041417613d1f57600080fd5b80905090509050610200518080613d3557600080fd5b8204905090506102405180821015613d4c57600080fd5b80820390509050610320526101c06103005160028110613d6b57600080fd5b602002015161024051818183011015613d8357600080fd5b8082019050905060028082049050905061034052613e38565b6101c06103005160028110613db057600080fd5b60200201516101c06103005160028110613dc957600080fd5b6020020151610220518082028215828483041417613de657600080fd5b80905090509050610200518080613dfc57600080fd5b82049050905080821015613e0f57600080fd5b80820390509050610320526101c06103005160028110613e2e57600080fd5b6020020151610340525b6102606103005160028110613e4c57600080fd5b602002018051610140610360525b61036051516020610360510161036052610360610360511015613e7c57613e5a565b61034051610380526102a0516103a0526102c0516103c0526102e0516103e0526103e0516103c0516103a0516103805160065801610226565b61044052610340610360525b6103605152602061036051036103605261014061036051101515613ee457613ec1565b61044051610320518082028215828483041417613f0057600080fd5b809050905090506402540be4008082049050905080821015613f2157600080fd5b808203905090508152505b8151600101808352811415613cd9575b50506102606101605160028110613f5257600080fd5b6020020151610140610320525b61032051516020610320510161032052610320610320511015613f8157613f5f565b6101a0516103405261016051610360526102605161038052610280516103a052610220516103c0526103c0516103a051610380516103605161034051600658016136cd565b61042052610300610320525b6103205152602061032051036103205261014061032051101515613ff557613fd2565b610420518082101561400657600080fd5b80820390509050610300526103005160018082101561402457600080fd5b80820390509050600052600051610180515650005b63cc2b27d76000511415614099576024358080600081121561405757195b607f1c1561406457600080fd5b9050506004356101405260243561016052610160516101405160065801613a3a565b6101c0526101c05160005260206000f350005b631a4d01d260005114156140b2576000610140526140e8565b63517a55a360005114156140e05760643560011c156140d057600080fd5b60206064610140376000506140e8565b600015614322575b62ffffff54156140f757600080fd5b600162ffffff556024358080600081121561410e57195b607f1c1561411b57600080fd5b9050506014541561412b57600080fd5b6101405161016051600435610180526024356101a0526101a0516101805160065801613a3a565b610200526101605261014052610200516101605260443561016051101515156141ba576308c379a06101805260206101a05260186101c0527f4e6f7420656e6f75676820636f696e732072656d6f76656400000000000000006101e0526101c050606461019cfd5b602061022060446379cc679061018052336101a0526004356101c05261019c60006007545af16141e957600080fd5b601f3d116141f657600080fd5b600050610220506101405115614267576008543b61421357600080fd5b6000600060646369328dec610180526024356002811061423257600080fd5b600160c052602060c02001546101a052610160516101c052336101e05261019c60006008545af161426257600080fd5b6142ce565b6020610220604463a9059cbb61018052336101a052610160516101c05261019c60006024356002811061429957600080fd5b600060c052602060c02001545af16142b057600080fd5b601f3d116142bd57600080fd5b600050610220516142cd57600080fd5b5b60043561018052610160516101a052337f9e96dd3b997a2a257eec4df9bb6eaf626e206df5f543bd963682d143300be3106040610180a261016051600052600062ffffff5560206000f350600062ffffff55005b633c157e6460005114156144c657600654331461433e57600080fd5b600c546201518081818301101561435457600080fd5b8082019050905042101561436757600080fd5b426201518081818301101561437b57600080fd5b80820190509050602435101561439057600080fd5b6101405160065801610026565b61016052610140526101605161014052600435606480820282158284830414176143c657600080fd5b8090509050905061016052600060043511156143e957620f4240600435106143ec565b60005b6143f557600080fd5b61014051610160511015614438576101405161016051600a808202821582848304141761442157600080fd5b80905090509050101561443357600080fd5b614469565b61014051600a808202821582848304141761445257600080fd5b8090509050905061016051111561446857600080fd5b5b61014051600a5561016051600b5542600c55602435600d556101405161018052610160516101a052426101c0526024356101e0527fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2546080610180a1005b63551a6588600051141561454b5760065433146144e257600080fd5b6101405160065801610026565b6101605261014052610160516101405261014051600a5561014051600b5542600c5542600d55610140516101605242610180527f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019386040610160a1005b630746dd5a600051141561464c57600654331461456757600080fd5b600e541561457457600080fd5b64012a05f200600435111561458857600080fd5b6402540be400602435111561459c57600080fd5b6802b5e3af16b188000060443560043580820282158284830414176145c057600080fd5b8090509050905011156145d257600080fd5b426203f4808181830110156145e657600080fd5b808201905090506101405261014051600e5560043560105560243560115560443560125560043561016052602435610180526044356101a052610140517fe347cde074ab87e09449fa2b03e8f2cf79094cb1265f4c914365d2247d4147a36060610160a2005b634f12fe9760005114156146f657600654331461466857600080fd5b600e5442101561467757600080fd5b6000600e541861468657600080fd5b6000600e55601054610140526011546101605260125461018052610140516003556101605160055561018051600455610140516101a052610160516101c052610180516101e0527fcfca96e0fef3432146913b2a5a2268a55d3f475fe057e7ffde1082b77693f4f360606101a0a1005b63226840fb600051141561471957600654331461471257600080fd5b6000600e55005b636b441a4060005114156147ad5760043560a01c1561473757600080fd5b600654331461474557600080fd5b600f541561475257600080fd5b426203f48081818301101561476657600080fd5b808201905090506101405261014051600f55600435601355600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156148265760065433146147c957600080fd5b600f544210156147d857600080fd5b6000600f54186147e757600080fd5b6000600f556013546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561484957600654331461484257600080fd5b6000600f55005b6330c54085600051141561493a57600654331461486557600080fd5b61014060006002818352015b610140516002811061488257600080fd5b600260c052602060c0200154610160526000610160511815614925576020610220604463a9059cbb61018052336101a052610160516101c05261019c600061014051600281106148d157600080fd5b600060c052602060c02001545af16148e857600080fd5b601f3d116148f557600080fd5b6000506102205161490557600080fd5b6000610140516002811061491857600080fd5b600260c052602060c02001555b5b8151600101808352811415614871575b5050005b63524c3901600051141561496e57600654331461495657600080fd5b600260c052602060c020600081556000600182015550005b63e3698853600051141561499f57600654331461498a57600080fd5b426015541161499857600080fd5b6001601455005b633046f97260005114156149c25760065433146149bb57600080fd5b6000601455005b63b6aa64c560005114156149f75760065433146149de57600080fd5b62010000600435106149ef57600080fd5b600435600955005b63c66106576000511415614a2c5760043560028110614a1557600080fd5b600060c052602060c020015460005260206000f350005b63b9947eb06000511415614a615760043560028110614a4a57600080fd5b600160c052602060c020015460005260206000f350005b63e2e7d2646000511415614a965760043560028110614a7f57600080fd5b600260c052602060c020015460005260206000f350005b63ddca3f436000511415614ab25760035460005260206000f350005b638edfdd5f6000511415614ace5760045460005260206000f350005b63fee3f7f96000511415614aea5760055460005260206000f350005b638da5cb5b6000511415614b065760065460005260206000f350005b6382c630666000511415614b225760075460005260206000f350005b635409491a6000511415614b3e57600a5460005260206000f350005b63b4b577ad6000511415614b5a57600b5460005260206000f350005b632081066c6000511415614b7657600c5460005260206000f350005b63140522886000511415614b9257600d5460005260206000f350005b63405e28f86000511415614bae57600e5460005260206000f350005b63e0a0b5866000511415614bca57600f5460005260206000f350005b6358680d0b6000511415614be65760105460005260206000f350005b63e38244626000511415614c025760115460005260206000f350005b631e4c4ef86000511415614c1e5760125460005260206000f350005b631ec0cdc16000511415614c3a5760135460005260206000f350005b5b60006000fd5b610274614eb503610274600039610274614eb5036000f3000000000000000000000000028171bca77440897b824ca71d1c56cac55b68a30000000000000000000000006c5024cd4f8a59110119c56f8933403a539555eb0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f5100000000000000000000000002d341ccb60faaf662bc0554d13778015d1b285c0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000003d0900000000000000000000000000000000000000000000000000000000012a05f20000000000000000000000000000000000000000000000000000000004a817c800Deployed Bytecode
0x341561000a57600080fd5b600436101561001857614c3b565b600035601c526000156101c1575b61014052600d5461016052600b5461018052610160514210156101ae57600a546101a052600c546101c0526101a051610180511115610107576101a051610180516101a0518082101561007857600080fd5b80820390509050426101c0518082101561009157600080fd5b8082039050905080820282158284830414176100ac57600080fd5b80905090509050610160516101c051808210156100c857600080fd5b8082039050905080806100da57600080fd5b8204905090508181830110156100ef57600080fd5b808201905090506000526000516101405156506101a9565b6101a0516101a051610180518082101561012057600080fd5b80820390509050426101c0518082101561013957600080fd5b80820390509050808202821582848304141761015457600080fd5b80905090509050610160516101c0518082101561017057600080fd5b80820390509050808061018257600080fd5b8204905090508082101561019557600080fd5b808203905090506000526000516101405156505b6101bf565b610180516000526000516101405156505b005b63f446c1d060005114156101f45760065801610026565b610140526101405160648082049050905060005260206000f350005b6376a2f0f0600051141561021e5760065801610026565b610140526101405160005260206000f350005b600015610396575b6101c0526101405261016052610180526101a0526402540be4006101a05111151561026057610180516000526000516101c0515650610394565b610140516101605181818301101561027757600080fd5b808201905090506101e0526101e080516101e051808202821582848304141761029f57600080fd5b809050905090508152506101a0516101805180820282158284830414176102c557600080fd5b809050905090506101a0516402540be400808210156102e357600080fd5b808203905090506004808202821582848304141761030057600080fd5b8090509050905061014051808202821582848304141761031f57600080fd5b8090509050905061016051808202821582848304141761033e57600080fd5b809050905090506101e051808061035457600080fd5b8204905090506402540be40081818301101561036f57600080fd5b80820190509050808061038157600080fd5b8204905090506000526000516101c05156505b005b6376a9cd3e600051141561054c57600435808060008112156103b457195b607f1c156103c157600080fd5b905050602435808060008112156103d457195b607f1c156103e157600080fd5b90505060206101e060246370a0823161016052306101805261017c6004356002811061040c57600080fd5b600060c052602060c02001545afa61042357600080fd5b601f3d1161043057600080fd5b6000506101e0516004356002811061044757600080fd5b600260c052602060c02001548082101561046057600080fd5b8082039050905061014052602061020060246370a0823161018052306101a05261019c6024356002811061049357600080fd5b600060c052602060c02001545afa6104aa57600080fd5b601f3d116104b757600080fd5b60005061020051602435600281106104ce57600080fd5b600260c052602060c0200154808210156104e757600080fd5b808203905090506101605261014051610160516101405161018052610160516101a0526003546101c0526004546101e0526101e0516101c0516101a0516101805160065801610226565b6102405261016052610140526102405160005260206000f350005b634903b0d160005114156105e85760206101c060246370a0823161014052306101605261015c6004356002811061058257600080fd5b600060c052602060c02001545afa61059957600080fd5b601f3d116105a657600080fd5b6000506101c051600435600281106105bd57600080fd5b600260c052602060c0200154808210156105d657600080fd5b8082039050905060005260206000f350005b6000156106f4575b61014052604036610160376101a060006002818352015b602061024060246370a082316101c052306101e0526101dc6101a0516002811061063057600080fd5b600060c052602060c02001545afa61064757600080fd5b601f3d1161065457600080fd5b600050610240516101a0516002811061066c57600080fd5b600260c052602060c02001548082101561068557600080fd5b808203905090506101606101a051600281106106a057600080fd5b60200201525b8151600101808352811415610607575b505060406101a0525b60006101a0511115156106d1576106ed565b60206101a05103610160015160206101a051036101a0526106bf565b6101405156005b600015610a19575b6101a05261014052610160526101805260006101c05261020060006002818352015b6020610200510261014001516101e0526101c080516101e05181818301101561074657600080fd5b808201905090508152505b815160010180835281141561071e575b50506101c051151561077c5760006000526000516101a05156505b60006101e0526101c0516102005261018051600280820282158284830414176107a457600080fd5b8090509050905061022052610240600060ff818352015b61020051610260526102a060006002818352015b60206102a05102610140015161028052610260516102005180820282158284830414176107fb57600080fd5b80905090509050610280516002808202821582848304141761081c57600080fd5b80905090509050600181818301101561083457600080fd5b80820190509050808061084657600080fd5b820490509050610260525b81516001018083528114156107cf575b5050610200516101e052610220516101c051808202821582848304141761088757600080fd5b8090509050905060648082049050905061026051600280820282158284830414176108b157600080fd5b809050905090508181830110156108c757600080fd5b808201905090506102005180820282158284830414176108e657600080fd5b809050905090506102205160648082101561090057600080fd5b8082039050905061020051808202821582848304141761091f57600080fd5b80905090509050606480820490509050600361026051808202821582848304141761094957600080fd5b8090509050905081818301101561095f57600080fd5b80820190509050808061097157600080fd5b820490509050610200526101e0516102005111156109c6576001610200516101e051808210156109a057600080fd5b808203905090501115156109c1576102005160005250506000516101a05156505b6109ff565b60016101e05161020051808210156109dd57600080fd5b808203905090501115156109fe576102005160005250506000516101a05156505b5b5b81516001018083528114156107bb575b505060006000fd005b63bb7b8b806000511415610b825761014051600658016105f0565b61016052610180526101405261016080516101a05280602001516101c052506101405161016051610180516101a0516101c05160065801610026565b6101e0526101c0526101a0526101805261016052610140526101e051610200526101405161016051610180516101a0516101c0516101e051610200516101a051610220526101c051610240526102005161026052610260516102405161022051600658016106fc565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c0516101405260206101e060046318160ddd6101805261019c6007545afa610b2257600080fd5b601f3d11610b2f57600080fd5b6000506101e0516101605261014051670de0b6b3a76400008082028215828483041417610b5b57600080fd5b80905090509050610160518080610b7157600080fd5b82049050905060005260206000f350005b63ed8e84f36000511415610e4c5760443560011c15610ba057600080fd5b6101405161016051600658016105f0565b610180526101a05261016052610140526101808051610140528060200151610160525061014051610160516101805160065801610026565b6101a0526101805261016052610140526101a051610180526101405161016051610180516101a051610140516101c052610160516101e0526101805161020052610200516101e0516101c051600658016106fc565b610260526101a052610180526101605261014052610260516101a0526101c060006002818352015b60443515610cbe576101406101c05160028110610c8257600080fd5b60200201805160046101c05160028110610c9b57600080fd5b6020020135818183011015610caf57600080fd5b80820190509050815250610d08565b6101406101c05160028110610cd257600080fd5b60200201805160046101c05160028110610ceb57600080fd5b602002013580821015610cfd57600080fd5b808203905090508152505b5b8151600101808352811415610c66575b50506101405161016051610180516101a0516101c051610140516101e0526101605161020052610180516102205261022051610200516101e051600658016106fc565b610280526101c0526101a052610180526101605261014052610280516101c052602061026060046318160ddd6102005261021c6007545afa610d9d57600080fd5b601f3d11610daa57600080fd5b600050610260516101e05260006102005260443515610de8576101c0516101a05180821015610dd857600080fd5b8082039050905061020052610e09565b6101a0516101c05180821015610dfd57600080fd5b80820390509050610200525b610200516101e0518082028215828483041417610e2557600080fd5b809050905090506101a0518080610e3b57600080fd5b82049050905060005260206000f350005b630b4c7e4d6000511415610e6557600061014052610e9b565b63ee22be236000511415610e935760643560011c15610e8357600080fd5b6020606461014037600050610e9b565b6000156118f2575b62ffffff5415610eaa57600080fd5b600162ffffff5560145415610ebe57600080fd5b610140516101605160065801610026565b61018052610160526101405261018051610160526101405161016051610180516101a051600658016105f0565b6101c0526101e0526101a0526101805261016052610140526101c080516101805280602001516101a052506007546101c052602061026060046318160ddd6102005261021c6101c0515afa610f5057600080fd5b601f3d11610f5d57600080fd5b600050610260516101e05260006102005260006101e0511815610fec576101405161016051610180516101a0516101c0516101e0516102005161018051610220526101a051610240526101605161026052610260516102405161022051600658016106fc565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c051610200525b61018051610220526101a0516102405261026060006002818352015b6101e05115156110375760006004610260516002811061102757600080fd5b60200201351861103657600080fd5b5b610220610260516002811061104b57600080fd5b6020020180516004610260516002811061106457600080fd5b602002013581818301101561107857600080fd5b808201905090508152505b8151600101808352811415611008575b50506101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516102205161028052610240516102a052610160516102c0526102c0516102a05161028051600658016106fc565b61032052610260526102405261022052610200526101e0526101c0526101a052610180526101605261014052610320516102605261020051610260511161113057600080fd5b6060366102803760006101e051181561155c57610200516102605181818301101561115a57600080fd5b808201905090506002808204905090506102e0526003546002808202821582848304141761118757600080fd5b8090509050905060048082049050905061030052600454610320526005546103405260006103605261038060006002818352015b6102605161018061038051600281106111d357600080fd5b602002015180820282158284830414176111ec57600080fd5b8090509050905061020051808061120257600080fd5b8204905090506103a052610220610380516002811061122057600080fd5b60200201516103c0526103c0516103a051111561125c576103a0516103c0518082101561124c57600080fd5b808203905090506103605261127d565b6103c0516103a0518082101561127157600080fd5b80820390509050610360525b610180610380516002811061129157600080fd5b60200201516103c0518181830110156112a957600080fd5b808201905090506103e052610140610400525b610400515160206104005101610400526104006104005110156112de576112bc565b6103e051610420526102e05161044052610300516104605261032051610480526104805161046051610440516104205160065801610226565b6104e0526103e0610400525b610400515260206104005103610400526101406104005110151561134657611323565b6104e05161036051808202821582848304141761136257600080fd5b809050905090506402540be40080820490509050610280610380516002811061138a57600080fd5b602002015260006103405118156114185761038051600281106113ac57600080fd5b600260c052602060c02001805461028061038051600281106113cd57600080fd5b60200201516103405180820282158284830414176113ea57600080fd5b809050905090506402540be4008082049050905081818301101561140d57600080fd5b808201905090508155505b6103c051610280610380516002811061143057600080fd5b60200201518082101561144257600080fd5b80820390509050610220610380516002811061145d57600080fd5b60200201525b81516001018083528114156111bb575b50506101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561149f5761147d565b610220516103c052610240516103e0526101605161040052610400516103e0516103c051600658016106fc565b610460526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156114fb576114d8565b61046051610380526101e05161038051610200518082101561151c57600080fd5b80820390509050808202821582848304141761153757600080fd5b8090509050905061020051808061154d57600080fd5b8204905090506102c052611565565b610260516102c0525b6044356102c051101515156115b9576308c379a06102e0526020610300526014610320527f536c697070616765207363726577656420796f75000000000000000000000000610340526103205060646102fcfd5b610140511561176b576008546102e0526009546103005261032060006002818352015b600461032051600281106115ef57600080fd5b602002013561034052600061034051181561175357610320516002811061161557600080fd5b600160c052602060c020015461036052602061044060646323b872dd61038052336103a052306103c052610340516103e05261039c6000610360515af161165b57600080fd5b601f3d1161166857600080fd5b6000506104405161167857600080fd5b60006004610380527fe8eda9df000000000000000000000000000000000000000000000000000000006103a0526103806004806020846103e001018260208501600060045af1505080518201915050610360516020826103e0010152602081019050610340516020826103e0010152602081019050306020826103e0010152602081019050610300516020826103e0010152602081019050806103e0526103e090508051602001806104c08284600060045af161173457600080fd5b5050600060006104c0516104e060006102e0515af161175257600080fd5b5b5b81516001018083528114156115dc575b5050611820565b6102e060006002818352015b60046102e0516002811061178a57600080fd5b602002013561030052600061030051181561180c5760206103e060646323b872dd6103205233610340523061036052610300516103805261033c60006102e051600281106117d757600080fd5b600060c052602060c02001545af16117ee57600080fd5b601f3d116117fb57600080fd5b6000506103e05161180b57600080fd5b5b5b8151600101808352811415611777575b50505b602061038060446340c10f196102e05233610300526102c051610320526102fc60006101c0515af161185157600080fd5b601f3d1161185e57600080fd5b600050610380506004356102e0526024356103005261028051610320526102a0516103405261026051610360526101e0516102c0518181830110156118a257600080fd5b8082019050905061038052337f26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a76860c06102e0a26102c051600052600062ffffff5560206000f350600062ffffff55005b600015611d74575b6101e0526101405261016052610180526101a0526101c05261016051610140511861192457600080fd5b600061016051121561193557600080fd5b6002610160511261194557600080fd5b600061014051121561195657600080fd5b6002610140511261196657600080fd5b6101405161016051610180516101a0516101c0516101e0516102005160065801610026565b61022052610200526101e0526101c0526101a05261018052610160526101405261022051610200526101405161016051610180516101a0516101c0516101e05161020051610220516101a051610240526101c051610260526102005161028052610280516102605161024051600658016106fc565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051610220526102005160028082028215828483041417611a4657600080fd5b80905090509050610240526102205161026052606036610280376102e060006002818352015b610140516102e0511415611a8757610180516102a052611abd565b610160516102e0511815611ab7576101a06102e05160028110611aa957600080fd5b60200201516102a052611abc565b611b39565b5b61028080516102a051818183011015611ad557600080fd5b8082019050905081525061026051610220518082028215828483041417611afb57600080fd5b809050905090506102a05160028082028215828483041417611b1c57600080fd5b809050905090508080611b2e57600080fd5b820490509050610260525b8151600101808352811415611a6c575b505061026051610220518082028215828483041417611b6757600080fd5b8090509050905060648082028215828483041417611b8457600080fd5b809050905090506102405160028082028215828483041417611ba557600080fd5b809050905090508080611bb757600080fd5b82049050905061026052610280516102205160648082028215828483041417611bdf57600080fd5b80905090509050610240518080611bf557600080fd5b820490509050818183011015611c0a57600080fd5b808201905090506102e0526102205161030052610320600060ff818352015b610300516102c05261030051610300518082028215828483041417611c4d57600080fd5b8090509050905061026051818183011015611c6757600080fd5b808201905090506002610300518082028215828483041417611c8857600080fd5b809050905090506102e051818183011015611ca257600080fd5b808201905090506102205180821015611cba57600080fd5b808203905090508080611ccc57600080fd5b820490509050610300526102c051610300511115611d21576001610300516102c05180821015611cfb57600080fd5b80820390509050111515611d1c576103005160005250506000516101e05156505b611d5a565b60016102c0516103005180821015611d3857600080fd5b80820390509050111515611d59576103005160005250506000516101e05156505b5b5b8151600101808352811415611c29575b505060006000fd005b600015612036575b6101a0526101405261016052610180526101405161016051610180516101a0516101c0516101e051600658016105f0565b61020052610220526101e0526101c0526101a05261018052610160526101405261020080516101c05280602001516101e052506101c06101405160028110611df457600080fd5b602002015161018051818183011015611e0c57600080fd5b80820190509050610200526101405161016051610180516101a0516101c0516101e05161020051610220516101405161024052610160516102605261020051610280526101c0516102a0526101e0516102c0526102c0516102a051610280516102605161024051600658016118fa565b6103205261022052610200526101e0526101c0526101a05261018052610160526101405261032051610220526101c06101605160028110611ebc57600080fd5b60200201516102205180821015611ed257600080fd5b80820390509050610240526101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516101c06101405160028110611f1957600080fd5b602002015161020051818183011015611f3157600080fd5b80820190509050600280820490509050610280526101c06101605160028110611f5957600080fd5b602002015161022051818183011015611f7157600080fd5b808201905090506002808204905090506102a0526003546102c0526004546102e0526102e0516102c0516102a0516102805160065801610226565b61034052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261034051610240518082028215828483041417611ff457600080fd5b809050905090506402540be400808204905090506102605261024051610260518082101561202157600080fd5b808203905090506000526000516101a0515650005b635e0d443f60005114156120c1576004358080600081121561205457195b607f1c1561206157600080fd5b9050506024358080600081121561207457195b607f1c1561208157600080fd5b90505060043561014052602435610160526044356101805261018051610160516101405160065801611d7c565b6101e0526101e05160005260206000f350005b6307211ef7600051141561214c57600435808060008112156120df57195b607f1c156120ec57600080fd5b905050602435808060008112156120ff57195b607f1c1561210c57600080fd5b90505060043561014052602435610160526044356101805261018051610160516101405160065801611d7c565b6101e0526101e05160005260206000f350005b6000156124ab575b6101a0526101405261016052610180526014541561217157600080fd5b6101405161016051610180516101a0516101c0516101e051600658016105f0565b61020052610220526101e0526101c0526101a05261018052610160526101405261020080516101c05280602001516101e052506101c061014051600281106121d957600080fd5b6020020151610180518181830110156121f157600080fd5b80820190509050610200526101405161016051610180516101a0516101c0516101e05161020051610220516101405161024052610160516102605261020051610280526101c0516102a0526101e0516102c0526102c0516102a051610280516102605161024051600658016118fa565b6103205261022052610200526101e0526101c0526101a05261018052610160526101405261032051610220526101c061016051600281106122a157600080fd5b602002015161022051808210156122b757600080fd5b8082039050905061024052610240516101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516101c0610140516002811061230257600080fd5b60200201516102005181818301101561231a57600080fd5b80820190509050600280820490509050610280526101c0610160516002811061234257600080fd5b60200201516102205181818301101561235a57600080fd5b808201905090506002808204905090506102a0526003546102c0526004546102e0526102e0516102c0516102a0516102805160065801610226565b61034052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103405180820282158284830414176123d957600080fd5b809050905090506402540be4008082049050905061026052600554610280526000610280511815612481576102605161028051808202821582848304141761242057600080fd5b809050905090506402540be400808204905090506102a05260006102a051181561248057610160516002811061245557600080fd5b600260c052602060c0200180546102a05181818301101561247557600080fd5b808201905090508155505b5b61024051610260518082101561249657600080fd5b808203905090506000526000516101a0515650005b633df0212460005114156126f85762ffffff54156124c857600080fd5b600162ffffff55600435808060008112156124df57195b607f1c156124ec57600080fd5b905050602435808060008112156124ff57195b607f1c1561250c57600080fd5b9050506101405160043561016052602435610180526044356101a0526101a051610180516101605160065801612154565b6102005261014052610200516101405260643561014051101515156125c6576308c379a061016052602061018052602e6101a0527f45786368616e676520726573756c74656420696e20666577657220636f696e736101c0527f207468616e2065787065637465640000000000000000000000000000000000006101e0526101a050608461017cfd5b602061022060646323b872dd610160523361018052306101a0526044356101c05261017c6000600435600281106125fc57600080fd5b600060c052602060c02001545af161261357600080fd5b601f3d1161262057600080fd5b6000506102205161263057600080fd5b6020610200604463a9059cbb610160523361018052610140516101a05261017c60006024356002811061266257600080fd5b600060c052602060c02001545af161267957600080fd5b601f3d1161268657600080fd5b6000506102005161269657600080fd5b60043561016052604435610180526024356101a052610140516101c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610160a261014051600052600062ffffff5560206000f350600062ffffff55005b63a6417ed66000511415612a245762ffffff541561271557600080fd5b600162ffffff556004358080600081121561272c57195b607f1c1561273957600080fd5b9050506024358080600081121561274c57195b607f1c1561275957600080fd5b9050506101405160043561016052602435610180526044356101a0526101a051610180516101605160065801612154565b610200526101405261020051610140526064356101405110151515612813576308c379a061016052602061018052602e6101a0527f45786368616e676520726573756c74656420696e20666577657220636f696e736101c0527f207468616e2065787065637465640000000000000000000000000000000000006101e0526101a050608461017cfd5b6004356002811061282357600080fd5b600160c052602060c02001546101605260085461018052602061026060646323b872dd6101a052336101c052306101e052604435610200526101bc6000610160515af161286f57600080fd5b601f3d1161287c57600080fd5b6000506102605161288c57600080fd5b600060046101a0527fe8eda9df000000000000000000000000000000000000000000000000000000006101c0526101a060048060208461020001018260208501600060045af15050805182019150506101605160208261020001015260208101905060443560208261020001015260208101905030602082610200010152602081019050600954602082610200010152602081019050806102005261020090508051602001806102e08284600060045af161294657600080fd5b5050600060006102e0516103006000610180515af161296457600080fd5b610180513b61297257600080fd5b6000600060646369328dec6101a0526024356002811061299157600080fd5b600160c052602060c02001546101c052610140516101e05233610200526101bc6000610180515af16129c257600080fd5b6004356101a0526044356101c0526024356101e0526101405161020052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b60806101a0a261014051600052600062ffffff5560206000f350600062ffffff55005b635b36389c6000511415612a3d57600061014052612a73565b63269b55816000511415612a6b5760643560011c15612a5b57600080fd5b6020606461014037600050612a73565b600015612dc4575b62ffffff5415612a8257600080fd5b600162ffffff55610140516101605161018051600658016105f0565b6101a0526101c0526101805261016052610140526101a0805161016052806020015161018052506007546101a052602061024060046318160ddd6101e0526101fc6101a0515afa612aee57600080fd5b601f3d11612afb57600080fd5b600050610240516101c052602061028060446379cc67906101e0523361020052600435610220526101fc60006101a0515af1612b3657600080fd5b601f3d11612b4357600080fd5b6000506102805060006101e0526101405115612b61576008546101e0525b61020060006002818352015b6101606102005160028110612b8157600080fd5b60200201516004358082028215828483041417612b9d57600080fd5b809050905090506101c0518080612bb357600080fd5b8204905090506102205260246102005160028110612bd057600080fd5b60200201356102205110151515612c4b576308c379a0610240526020610260526030610280527f5769746864726177616c20726573756c74656420696e20666577657220636f696102a0527f6e73207468616e206578706563746564000000000000000000000000000000006102c05261028050608461025cfd5b610220516101606102005160028110612c6357600080fd5b60200201526101405115612cd5576101e0513b612c7f57600080fd5b6000600060646369328dec610240526102005160028110612c9f57600080fd5b600160c052602060c0200154610260526102205161028052336102a05261025c60006101e0515af1612cd057600080fd5b612d3d565b60206102e0604463a9059cbb610240523361026052610220516102805261025c60006102005160028110612d0857600080fd5b600060c052602060c02001545af1612d1f57600080fd5b601f3d11612d2c57600080fd5b6000506102e051612d3c57600080fd5b5b5b8151600101808352811415612b6d575b505061016051610200526101805161022052604036610240376101c05160043580821015612d7b57600080fd5b8082039050905061028052337f7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c60a0610200a2600062ffffff556040610160f3600062ffffff55005b63e31032736000511415612ddd57600061014052612e13565b63e1df4f636000511415612e0b5760643560011c15612dfb57600080fd5b6020606461014037600050612e13565b6000156136c5575b62ffffff5415612e2257600080fd5b600162ffffff5560145415612e3657600080fd5b610140516101605160065801610026565b61018052610160526101405261018051610160526101405161016051610180516101a051600658016105f0565b6101c0526101e0526101a0526101805261016052610140526101c080516101805280602001516101a052506101405161016051610180516101a0516101c051610180516101e0526101a05161020052610160516102205261022051610200516101e051600658016106fc565b610280526101c0526101a052610180526101605261014052610280516101c052610180516101e0526101a0516102005261022060006002818352015b6101e06102205160028110612f3057600080fd5b60200201805160046102205160028110612f4957600080fd5b602002013580821015612f5b57600080fd5b808203905090508152505b8151600101808352811415612f1c575b50506101405161016051610180516101a0516101c0516101e05161020051610220516101e0516102405261020051610260526101605161028052610280516102605161024051600658016106fc565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051610220526101c0516102205181818301101561300857600080fd5b808201905090506002808204905090506102405260075461026052602061030060046318160ddd6102a0526102bc610260515afa61304557600080fd5b601f3d1161305257600080fd5b60005061030051610280526000610280511861306d57600080fd5b6003546002808202821582848304141761308657600080fd5b809050905090506004808204905090506102a0526004546102c0526005546102e0526040366103003761034060006002818352015b6102205161018061034051600281106130d357600080fd5b602002015180820282158284830414176130ec57600080fd5b809050905090506101c051808061310257600080fd5b820490509050610360526101e0610340516002811061312057600080fd5b60200201516103805260006103a052610380516103605111156131625761036051610380518082101561315257600080fd5b808203905090506103a052613183565b61038051610360518082101561317757600080fd5b808203905090506103a0525b61038051610180610340516002811061319b57600080fd5b60200201518181830110156131af57600080fd5b808201905090506103c0526101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156131e4576131c2565b6103c0516104005261024051610420526102a051610440526102c051610460526104605161044051610420516104005160065801610226565b6104c0526103c06103e0525b6103e0515260206103e051036103e0526101406103e05110151561324c57613229565b6104c0516103a051808202821582848304141761326857600080fd5b809050905090506402540be40080820490509050610300610340516002811061329057600080fd5b602002015260006102e051181561331e5761034051600281106132b257600080fd5b600260c052602060c02001805461030061034051600281106132d357600080fd5b60200201516102e05180820282158284830414176132f057600080fd5b809050905090506402540be4008082049050905081818301101561331357600080fd5b808201905090508155505b6101e0610340516002811061333257600080fd5b602002018051610300610340516002811061334c57600080fd5b60200201518082101561335e57600080fd5b808203905090508152505b81516001018083528114156130bb575b5050610140610360525b610360515160206103605101610360526103606103605110156133a557613383565b6101e05161038052610200516103a052610160516103c0526103c0516103a05161038051600658016106fc565b61042052610340610360525b6103605152602061036051036103605261014061036051101515613401576133de565b61042051610340526101c051610340518082101561341e57600080fd5b8082039050905061028051808202821582848304141761343d57600080fd5b809050905090506101c051808061345357600080fd5b820490509050610360526000610360511861346d57600080fd5b60443561036051111515156134c1576308c379a06103805260206103a05260146103c0527f536c697070616765207363726577656420796f750000000000000000000000006103e0526103c050606461039cfd5b602061042060446379cc679061038052336103a052610360516103c05261039c6000610260515af16134f257600080fd5b601f3d116134ff57600080fd5b60005061042050600061038052610140511561351d57600854610380525b6103a060006002818352015b60046103a0516002811061353c57600080fd5b60200201356103c05260006103c05118156136275761014051156135be57610380513b61356857600080fd5b6000600060646369328dec6103e0526103a0516002811061358857600080fd5b600160c052602060c0200154610400526103c0516104205233610440526103fc6000610380515af16135b957600080fd5b613626565b6020610480604463a9059cbb6103e05233610400526103c051610420526103fc60006103a051600281106135f157600080fd5b600060c052602060c02001545af161360857600080fd5b601f3d1161361557600080fd5b6000506104805161362557600080fd5b5b5b5b8151600101808352811415613529575b50506004356103a0526024356103c052610300516103e0526103205161040052610220516104205261028051610360518082101561367557600080fd5b8082039050905061044052337f2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e60c06103a0a261036051600052600062ffffff5560206000f350600062ffffff55005b600015613a32575b6101e0526101405261016052610180526101a0526101c05260006101605112156136f657600080fd5b6002610160511261370657600080fd5b610140516002808202821582848304141761372057600080fd5b80905090509050610200526101c05161022052606036610240376102a060006002818352015b610160516102a0511815613776576101806102a0516002811061376857600080fd5b60200201516102605261377b565b6137f7565b61024080516102605181818301101561379357600080fd5b80820190509050815250610220516101c05180820282158284830414176137b957600080fd5b8090509050905061026051600280820282158284830414176137da57600080fd5b8090509050905080806137ec57600080fd5b820490509050610220525b8151600101808352811415613746575b5050610220516101c051808202821582848304141761382557600080fd5b809050905090506064808202821582848304141761384257600080fd5b80905090509050610200516002808202821582848304141761386357600080fd5b80905090509050808061387557600080fd5b82049050905061022052610240516101c0516064808202821582848304141761389d57600080fd5b809050905090506102005180806138b357600080fd5b8204905090508181830110156138c857600080fd5b808201905090506102a0526101c0516102c0526102e0600060ff818352015b6102c051610280526102c0516102c051808202821582848304141761390b57600080fd5b809050905090506102205181818301101561392557600080fd5b8082019050905060026102c051808202821582848304141761394657600080fd5b809050905090506102a05181818301101561396057600080fd5b808201905090506101c0518082101561397857600080fd5b80820390509050808061398a57600080fd5b8204905090506102c052610280516102c05111156139df5760016102c05161028051808210156139b957600080fd5b808203905090501115156139da576102c05160005250506000516101e05156505b613a18565b6001610280516102c051808210156139f657600080fd5b80820390509050111515613a17576102c05160005250506000516101e05156505b5b5b81516001018083528114156138e7575b505060006000fd005b600015614039575b6101805261014052610160526101405161016051610180516101a05160065801610026565b6101c0526101a0526101805261016052610140526101c0516101a0526101405161016051610180516101a0516101c0516101e051600658016105f0565b61020052610220526101e0526101c0526101a05261018052610160526101405261020080516101c05280602001516101e052506101405161016051610180516101a0516101c0516101e051610200516101c051610220526101e051610240526101a05161026052610260516102405161022051600658016106fc565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c051610200526102005161014051610200518082028215828483041417613b6057600080fd5b8090509050905060206102a060046318160ddd6102405261025c6007545afa613b8857600080fd5b601f3d11613b9557600080fd5b6000506102a0518080613ba757600080fd5b82049050905080821015613bba57600080fd5b80820390509050610220526101405161016051610180516101a0516101c0516101e0516102005161022051610240516101a0516102605261016051610280526101c0516102a0526101e0516102c052610220516102e0526102e0516102c0516102a0516102805161026051600658016136cd565b610340526102405261022052610200526101e0526101c0526101a05261018052610160526101405261034051610240526101c051610260526101e051610280526102005161022051818183011015613c8557600080fd5b808201905090506004808204905090506102a05260035460028082028215828483041417613cb257600080fd5b809050905090506004808204905090506102c0526004546102e05261030060006002818352015b6040366103203761016051610300511415613d9c576101c06103005160028110613d0257600080fd5b6020020151610220518082028215828483041417613d1f57600080fd5b80905090509050610200518080613d3557600080fd5b8204905090506102405180821015613d4c57600080fd5b80820390509050610320526101c06103005160028110613d6b57600080fd5b602002015161024051818183011015613d8357600080fd5b8082019050905060028082049050905061034052613e38565b6101c06103005160028110613db057600080fd5b60200201516101c06103005160028110613dc957600080fd5b6020020151610220518082028215828483041417613de657600080fd5b80905090509050610200518080613dfc57600080fd5b82049050905080821015613e0f57600080fd5b80820390509050610320526101c06103005160028110613e2e57600080fd5b6020020151610340525b6102606103005160028110613e4c57600080fd5b602002018051610140610360525b61036051516020610360510161036052610360610360511015613e7c57613e5a565b61034051610380526102a0516103a0526102c0516103c0526102e0516103e0526103e0516103c0516103a0516103805160065801610226565b61044052610340610360525b6103605152602061036051036103605261014061036051101515613ee457613ec1565b61044051610320518082028215828483041417613f0057600080fd5b809050905090506402540be4008082049050905080821015613f2157600080fd5b808203905090508152505b8151600101808352811415613cd9575b50506102606101605160028110613f5257600080fd5b6020020151610140610320525b61032051516020610320510161032052610320610320511015613f8157613f5f565b6101a0516103405261016051610360526102605161038052610280516103a052610220516103c0526103c0516103a051610380516103605161034051600658016136cd565b61042052610300610320525b6103205152602061032051036103205261014061032051101515613ff557613fd2565b610420518082101561400657600080fd5b80820390509050610300526103005160018082101561402457600080fd5b80820390509050600052600051610180515650005b63cc2b27d76000511415614099576024358080600081121561405757195b607f1c1561406457600080fd5b9050506004356101405260243561016052610160516101405160065801613a3a565b6101c0526101c05160005260206000f350005b631a4d01d260005114156140b2576000610140526140e8565b63517a55a360005114156140e05760643560011c156140d057600080fd5b60206064610140376000506140e8565b600015614322575b62ffffff54156140f757600080fd5b600162ffffff556024358080600081121561410e57195b607f1c1561411b57600080fd5b9050506014541561412b57600080fd5b6101405161016051600435610180526024356101a0526101a0516101805160065801613a3a565b610200526101605261014052610200516101605260443561016051101515156141ba576308c379a06101805260206101a05260186101c0527f4e6f7420656e6f75676820636f696e732072656d6f76656400000000000000006101e0526101c050606461019cfd5b602061022060446379cc679061018052336101a0526004356101c05261019c60006007545af16141e957600080fd5b601f3d116141f657600080fd5b600050610220506101405115614267576008543b61421357600080fd5b6000600060646369328dec610180526024356002811061423257600080fd5b600160c052602060c02001546101a052610160516101c052336101e05261019c60006008545af161426257600080fd5b6142ce565b6020610220604463a9059cbb61018052336101a052610160516101c05261019c60006024356002811061429957600080fd5b600060c052602060c02001545af16142b057600080fd5b601f3d116142bd57600080fd5b600050610220516142cd57600080fd5b5b60043561018052610160516101a052337f9e96dd3b997a2a257eec4df9bb6eaf626e206df5f543bd963682d143300be3106040610180a261016051600052600062ffffff5560206000f350600062ffffff55005b633c157e6460005114156144c657600654331461433e57600080fd5b600c546201518081818301101561435457600080fd5b8082019050905042101561436757600080fd5b426201518081818301101561437b57600080fd5b80820190509050602435101561439057600080fd5b6101405160065801610026565b61016052610140526101605161014052600435606480820282158284830414176143c657600080fd5b8090509050905061016052600060043511156143e957620f4240600435106143ec565b60005b6143f557600080fd5b61014051610160511015614438576101405161016051600a808202821582848304141761442157600080fd5b80905090509050101561443357600080fd5b614469565b61014051600a808202821582848304141761445257600080fd5b8090509050905061016051111561446857600080fd5b5b61014051600a5561016051600b5542600c55602435600d556101405161018052610160516101a052426101c0526024356101e0527fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2546080610180a1005b63551a6588600051141561454b5760065433146144e257600080fd5b6101405160065801610026565b6101605261014052610160516101405261014051600a5561014051600b5542600c5542600d55610140516101605242610180527f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019386040610160a1005b630746dd5a600051141561464c57600654331461456757600080fd5b600e541561457457600080fd5b64012a05f200600435111561458857600080fd5b6402540be400602435111561459c57600080fd5b6802b5e3af16b188000060443560043580820282158284830414176145c057600080fd5b8090509050905011156145d257600080fd5b426203f4808181830110156145e657600080fd5b808201905090506101405261014051600e5560043560105560243560115560443560125560043561016052602435610180526044356101a052610140517fe347cde074ab87e09449fa2b03e8f2cf79094cb1265f4c914365d2247d4147a36060610160a2005b634f12fe9760005114156146f657600654331461466857600080fd5b600e5442101561467757600080fd5b6000600e541861468657600080fd5b6000600e55601054610140526011546101605260125461018052610140516003556101605160055561018051600455610140516101a052610160516101c052610180516101e0527fcfca96e0fef3432146913b2a5a2268a55d3f475fe057e7ffde1082b77693f4f360606101a0a1005b63226840fb600051141561471957600654331461471257600080fd5b6000600e55005b636b441a4060005114156147ad5760043560a01c1561473757600080fd5b600654331461474557600080fd5b600f541561475257600080fd5b426203f48081818301101561476657600080fd5b808201905090506101405261014051600f55600435601355600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156148265760065433146147c957600080fd5b600f544210156147d857600080fd5b6000600f54186147e757600080fd5b6000600f556013546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561484957600654331461484257600080fd5b6000600f55005b6330c54085600051141561493a57600654331461486557600080fd5b61014060006002818352015b610140516002811061488257600080fd5b600260c052602060c0200154610160526000610160511815614925576020610220604463a9059cbb61018052336101a052610160516101c05261019c600061014051600281106148d157600080fd5b600060c052602060c02001545af16148e857600080fd5b601f3d116148f557600080fd5b6000506102205161490557600080fd5b6000610140516002811061491857600080fd5b600260c052602060c02001555b5b8151600101808352811415614871575b5050005b63524c3901600051141561496e57600654331461495657600080fd5b600260c052602060c020600081556000600182015550005b63e3698853600051141561499f57600654331461498a57600080fd5b426015541161499857600080fd5b6001601455005b633046f97260005114156149c25760065433146149bb57600080fd5b6000601455005b63b6aa64c560005114156149f75760065433146149de57600080fd5b62010000600435106149ef57600080fd5b600435600955005b63c66106576000511415614a2c5760043560028110614a1557600080fd5b600060c052602060c020015460005260206000f350005b63b9947eb06000511415614a615760043560028110614a4a57600080fd5b600160c052602060c020015460005260206000f350005b63e2e7d2646000511415614a965760043560028110614a7f57600080fd5b600260c052602060c020015460005260206000f350005b63ddca3f436000511415614ab25760035460005260206000f350005b638edfdd5f6000511415614ace5760045460005260206000f350005b63fee3f7f96000511415614aea5760055460005260206000f350005b638da5cb5b6000511415614b065760065460005260206000f350005b6382c630666000511415614b225760075460005260206000f350005b635409491a6000511415614b3e57600a5460005260206000f350005b63b4b577ad6000511415614b5a57600b5460005260206000f350005b632081066c6000511415614b7657600c5460005260206000f350005b63140522886000511415614b9257600d5460005260206000f350005b63405e28f86000511415614bae57600e5460005260206000f350005b63e0a0b5866000511415614bca57600f5460005260206000f350005b6358680d0b6000511415614be65760105460005260206000f350005b63e38244626000511415614c025760115460005260206000f350005b631e4c4ef86000511415614c1e5760125460005260206000f350005b631ec0cdc16000511415614c3a5760135460005260206000f350005b5b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000028171bca77440897b824ca71d1c56cac55b68a30000000000000000000000006c5024cd4f8a59110119c56f8933403a539555eb0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f5100000000000000000000000002d341ccb60faaf662bc0554d13778015d1b285c0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000003d0900000000000000000000000000000000000000000000000000000000012a05f20000000000000000000000000000000000000000000000000000000004a817c800
-----Decoded View---------------
Arg [0] : _coins (address[2]): 0x028171bCA77440897B824Ca71D1c56caC55b68A3,0x6C5024Cd4F8A59110119C56f8933403A539555EB
Arg [1] : _underlying_coins (address[2]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0x57Ab1ec28D129707052df4dF418D58a2D46d5f51
Arg [2] : _pool_token (address): 0x02d341CcB60fAaf662bC0554d13778015d1b285C
Arg [3] : _aave_lending_pool (address): 0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9
Arg [4] : _A (uint256): 100
Arg [5] : _fee (uint256): 4000000
Arg [6] : _admin_fee (uint256): 5000000000
Arg [7] : _offpeg_fee_multiplier (uint256): 20000000000
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000028171bca77440897b824ca71d1c56cac55b68a3
Arg [1] : 0000000000000000000000006c5024cd4f8a59110119c56f8933403a539555eb
Arg [2] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [3] : 00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51
Arg [4] : 00000000000000000000000002d341ccb60faaf662bc0554d13778015d1b285c
Arg [5] : 0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [7] : 00000000000000000000000000000000000000000000000000000000003d0900
Arg [8] : 000000000000000000000000000000000000000000000000000000012a05f200
Arg [9] : 00000000000000000000000000000000000000000000000000000004a817c800Loading...LoadingLoading...Loading
Loading...Loading
Loading...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.Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.