15M+ users trust MoonPay. Checkout with your preferred payment method.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Collect points for eligible actions and use multipliers to win big.
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
Buy, sell, and exchange 200+ cryptocurrencies effortlessly. Get your free crypto debit card and pay with crypto anywhere.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
Play all your favorite Slots & Live Games, including Plinko, Aviator and Crash! Truly anonymous casino.
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 (34)1,000 MTVMultiVAC (MTV)$1.23@0.00121 QDAOQ DAO Govern... (QDAO)$2.11@2.118,835,846.74053203 sUSDSynth sUSD (sUSD)$8,720,768.67@0.9872,071,765.20517725 DAIDai Stableco... (DAI)$2,071,765.21@1.002,092,257.339993 USDTTether USD (USDT)$2,094,349.60@1.0012,096,687.867601 USDCUSDC (USDC)$2,098,784.56@1.001722.102 BGBGBigMouthFrog (BGBG)1 CNXTCrowdnext (CNXT)0.5 DOTCdotc.pro tok... (DOTC)25 HARPHarpoon (HARP)1 QDeFiQ DeFi Ratin... (QDeFi)200 RAMPRAMP DEFI (RAMP)10 UNFIUnifi Protoc... (UNFI)0.1 HQG环球股 (HQG)3,314,010.0441154 sUSDSynth sUSD (sUSD)3,999.99 TokenERC-20 TOKEN*[Suspicious]8,271 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]9,000 TokenERC-20 TOKEN*[Suspicious]400 TokenERC-20 TOKEN*[Suspicious]788 TokenERC-20 TOKEN*[Suspicious]100,000 TokenERC-20 TOKEN*[Suspicious]4,214 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]350 TokenERC-20 TOKEN*[Suspicious]700 TokenERC-20 TOKEN*[Unsafe]7,000 TokenERC-20 TOKEN*[Unsafe]7,000 TokenERC-20 TOKEN*[Unsafe]19.998 TokenERC-20 TOKEN*[Unsafe]7,000 TokenERC-20 TOKEN*[Spam]856,420,144,564 TokenERC-20 TOKEN*[Spam]150 TokenERC-20 TOKEN*[Spam]6 TokenERC-20 TOKEN*[Spam]NFT Tokens (12)nft-dai.comDAI Mysterybox NFTERC-1155Reward Club [QEfkfA1G]Reward Club [w7cIVAag]ERC-1155The Nft Mint Club CollectionThe Nft Mint Club CollectionERC-1155ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
Multichain Info
1 address found via- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Info
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 91,724 transactions
Transaction Hash MethodBlockFromToValue Remove_liquidity 19883405 2024-05-16 15:22:47 2 days ago 1715872967 IN 0 ETH 0.00291139 10.66473651 Add_liquidity 19883312 2024-05-16 15:04:11 2 days ago 1715871851 IN 0 ETH 0.00520966 14.65250163 Remove_liquidity... 19883266 2024-05-16 14:54:59 2 days ago 1715871299 IN 0 ETH 0.00368316 9.00264253 Add_liquidity 19883231 2024-05-16 14:47:59 2 days ago 1715870879 IN 0 ETH 0.00258146 7.25040148 Add_liquidity 19883193 2024-05-16 14:40:23 2 days ago 1715870423 IN 0 ETH 0.00289192 7.69219551 Exchange 19874481 2024-05-15 9:27:47 4 days ago 1715765267 IN 0 ETH 0.0015243 6.38205478 Exchange_underly... 19823921 2024-05-08 7:41:35 11 days ago 1715154095 IN 0 ETH 0.00088702 4 Exchange_underly... 19813008 2024-05-06 19:04:23 12 days ago 1715022263 IN 0 ETH 0.00117739 5.30822627 Exchange_underly... 19812954 2024-05-06 18:53:35 12 days ago 1715021615 IN 0 ETH 0.00117367 5.18047304 Exchange_underly... 19812330 2024-05-06 16:48:11 12 days ago 1715014091 IN 0 ETH 0.0014435 6.31798655 Exchange_underly... 19783530 2024-05-02 16:08:11 16 days ago 1714666091 IN 0 ETH 0.00462394 19.35474505 Exchange 19782150 2024-05-02 11:30:23 17 days ago 1714649423 IN 0 ETH 0.00167965 7.48031778 Exchange_underly... 19727019 2024-04-24 18:28:47 24 days ago 1713983327 IN 0 ETH 0.0026527 12.14385521 Exchange_underly... 19675645 2024-04-17 13:59:23 31 days ago 1713362363 IN 0 ETH 0.00645652 29.18334605 Exchange_underly... 19630531 2024-04-11 6:15:35 38 days ago 1712816135 IN 0 ETH 0.002662 11.68008462 Remove_liquidity 19629661 2024-04-11 3:19:23 38 days ago 1712805563 IN 0 ETH 0.00336868 12.34307888 Exchange_underly... 19624571 2024-04-10 10:15:23 39 days ago 1712744123 IN 0 ETH 0.00444258 20.27483189 Exchange_underly... 19621007 2024-04-09 22:17:47 39 days ago 1712701067 IN 0 ETH 0.00398264 18.17577797 Exchange 19592665 2024-04-05 22:58:35 43 days ago 1712357915 IN 0 ETH 0.00288174 12.3078229 Exchange 19592647 2024-04-05 22:54:59 43 days ago 1712357699 IN 0 ETH 0.00332445 14.54680538 Exchange 19551218 2024-03-31 3:30:35 49 days ago 1711855835 IN 0 ETH 0.00210067 17.02574353 Exchange 19495583 2024-03-23 6:42:11 57 days ago 1711176131 IN 0 ETH 0.00336395 15.49846747 Exchange_underly... 19450841 2024-03-16 23:54:11 63 days ago 1710633251 IN 0 ETH 0.00640777 27.12376539 Exchange 19442135 2024-03-15 18:29:23 64 days ago 1710527363 IN 0 ETH 0.00757139 34.2487226 Exchange 19442067 2024-03-15 18:15:35 64 days ago 1710526535 IN 0 ETH 0.00904738 41.83353339 Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block From To Value 19888316 2024-05-17 7:50:35 2 days ago 1715932235 0 ETH 19888316 2024-05-17 7:50:35 2 days ago 1715932235 0 ETH 19888316 2024-05-17 7:50:35 2 days ago 1715932235 0 ETH 19888311 2024-05-17 7:49:35 2 days ago 1715932175 0 ETH 19888311 2024-05-17 7:49:35 2 days ago 1715932175 0 ETH 19888311 2024-05-17 7:49:35 2 days ago 1715932175 0 ETH 19888285 2024-05-17 7:44:23 2 days ago 1715931863 0 ETH 19888285 2024-05-17 7:44:23 2 days ago 1715931863 0 ETH 19888285 2024-05-17 7:44:23 2 days ago 1715931863 0 ETH 19888279 2024-05-17 7:43:11 2 days ago 1715931791 0 ETH 19888279 2024-05-17 7:43:11 2 days ago 1715931791 0 ETH 19888279 2024-05-17 7:43:11 2 days ago 1715931791 0 ETH 19888279 2024-05-17 7:43:11 2 days ago 1715931791 0 ETH 19888279 2024-05-17 7:43:11 2 days ago 1715931791 0 ETH 19888279 2024-05-17 7:43:11 2 days ago 1715931791 0 ETH 19888255 2024-05-17 7:38:23 2 days ago 1715931503 0 ETH 19888255 2024-05-17 7:38:23 2 days ago 1715931503 0 ETH 19888255 2024-05-17 7:38:23 2 days ago 1715931503 0 ETH 19888255 2024-05-17 7:38:23 2 days ago 1715931503 0 ETH 19888255 2024-05-17 7:38:23 2 days ago 1715931503 0 ETH 19888255 2024-05-17 7:38:23 2 days ago 1715931503 0 ETH 19888199 2024-05-17 7:26:47 2 days ago 1715930807 0 ETH 19888199 2024-05-17 7:26:47 2 days ago 1715930807 0 ETH 19888199 2024-05-17 7:26:47 2 days ago 1715930807 0 ETH 19888171 2024-05-17 7:21:11 2 days ago 1715930471 0 ETH Loading...LoadingContract Source Code Verified (Exact Match)
Contract Name:Vyper_contract
Compiler Versionvyper:0.1.0b17
Contract Source Code (Vyper language format)
# (c) Curve.Fi, 2020 # External Contracts contract ERC20m: def totalSupply() -> uint256: constant def allowance(_owner: address, _spender: address) -> uint256: constant def transfer(_to: address, _value: uint256) -> bool: modifying def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying def approve(_spender: address, _value: uint256) -> bool: modifying def mint(_to: address, _value: uint256): modifying def burn(_value: uint256): modifying def burnFrom(_to: address, _value: uint256): modifying def name() -> string[64]: constant def symbol() -> string[32]: constant def decimals() -> uint256: constant def balanceOf(arg0: address) -> uint256: constant def set_minter(_minter: address): modifying # External Contracts contract cERC20: def totalSupply() -> uint256: constant def allowance(_owner: address, _spender: address) -> uint256: constant def transfer(_to: address, _value: uint256) -> bool: modifying def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying def approve(_spender: address, _value: uint256) -> bool: modifying def burn(_value: uint256): modifying def burnFrom(_to: address, _value: uint256): modifying def name() -> string[64]: constant def symbol() -> string[32]: constant def decimals() -> uint256: constant def balanceOf(arg0: address) -> uint256: constant def mint(mintAmount: uint256) -> uint256: modifying def redeem(redeemTokens: uint256) -> uint256: modifying def redeemUnderlying(redeemAmount: uint256) -> uint256: modifying def exchangeRateStored() -> uint256: constant def exchangeRateCurrent() -> uint256: modifying def supplyRatePerBlock() -> uint256: constant def accrualBlockNumber() -> uint256: constant from vyper.interfaces import ERC20 # Tether transfer-only ABI contract USDT: def transfer(_to: address, _value: uint256): modifying def transferFrom(_from: address, _to: address, _value: uint256): modifying # This can (and needs to) be changed at compile time N_COINS: constant(int128) = 4 # <- change ZERO256: constant(uint256) = 0 # This hack is really bad XXX ZEROS: constant(uint256[N_COINS]) = [ZERO256, ZERO256, ZERO256, ZERO256] # <- change USE_LENDING: constant(bool[N_COINS]) = [False, False, False, False] # Flag "ERC20s" which don't return from transfer() and transferFrom() TETHERED: constant(bool[N_COINS]) = [False, False, True, False] FEE_DENOMINATOR: constant(uint256) = 10 ** 10 LENDING_PRECISION: constant(uint256) = 10 ** 18 PRECISION: constant(uint256) = 10 ** 18 # The precision to convert to PRECISION_MUL: constant(uint256[N_COINS]) = [convert(1, uint256), convert(1000000000000, uint256), convert(1000000000000, uint256), convert(1, uint256)] # PRECISION_MUL: constant(uint256[N_COINS]) = [ # PRECISION / convert(PRECISION, uint256), # DAI # PRECISION / convert(10 ** 6, uint256), # USDC # PRECISION / convert(10 ** 6, uint256)] # USDT admin_actions_delay: constant(uint256) = 3 * 86400 # Events TokenExchange: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256}) TokenExchangeUnderlying: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256}) AddLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256}) RemoveLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], token_supply: uint256}) RemoveLiquidityImbalance: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256}) CommitNewAdmin: event({deadline: indexed(timestamp), admin: indexed(address)}) NewAdmin: event({admin: indexed(address)}) CommitNewParameters: event({deadline: indexed(timestamp), A: uint256, fee: uint256, admin_fee: uint256}) NewParameters: event({A: uint256, fee: uint256, admin_fee: uint256}) coins: public(address[N_COINS]) underlying_coins: public(address[N_COINS]) balances: public(uint256[N_COINS]) A: public(uint256) # 2 x amplification coefficient fee: public(uint256) # fee * 1e10 admin_fee: public(uint256) # admin_fee * 1e10 max_admin_fee: constant(uint256) = 5 * 10 ** 9 max_fee: constant(uint256) = 5 * 10 ** 9 max_A: constant(uint256) = 10 ** 6 owner: public(address) token: ERC20m admin_actions_deadline: public(timestamp) transfer_ownership_deadline: public(timestamp) future_A: public(uint256) future_fee: public(uint256) future_admin_fee: public(uint256) future_owner: public(address) kill_deadline: timestamp kill_deadline_dt: constant(uint256) = 2 * 30 * 86400 is_killed: bool @public def __init__(_coins: address[N_COINS], _underlying_coins: address[N_COINS], _pool_token: address, _A: uint256, _fee: uint256): """ _coins: Addresses of ERC20 conracts of coins (c-tokens) involved _underlying_coins: Addresses of plain coins (ERC20) _pool_token: Address of the token representing LP share _A: Amplification coefficient multiplied by n * (n - 1) _fee: Fee to charge for exchanges """ for i in range(N_COINS): assert _coins[i] != ZERO_ADDRESS assert _underlying_coins[i] != ZERO_ADDRESS self.balances[i] = 0 self.coins = _coins self.underlying_coins = _underlying_coins self.A = _A self.fee = _fee self.admin_fee = 0 self.owner = msg.sender self.kill_deadline = block.timestamp + kill_deadline_dt self.is_killed = False self.token = ERC20m(_pool_token) @private @constant def _stored_rates() -> uint256[N_COINS]: # exchangeRateStored * (1 + supplyRatePerBlock * (getBlockNumber - accrualBlockNumber) / 1e18) result: uint256[N_COINS] = PRECISION_MUL use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): rate: uint256 = LENDING_PRECISION # Used with no lending if use_lending[i]: rate = cERC20(self.coins[i]).exchangeRateStored() supply_rate: uint256 = cERC20(self.coins[i]).supplyRatePerBlock() old_block: uint256 = cERC20(self.coins[i]).accrualBlockNumber() rate += rate * supply_rate * (block.number - old_block) / LENDING_PRECISION result[i] *= rate return result @private def _current_rates() -> uint256[N_COINS]: result: uint256[N_COINS] = PRECISION_MUL use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): rate: uint256 = LENDING_PRECISION # Used with no lending if use_lending[i]: rate = cERC20(self.coins[i]).exchangeRateCurrent() result[i] *= rate return result @private @constant def _xp(rates: uint256[N_COINS]) -> uint256[N_COINS]: result: uint256[N_COINS] = rates for i in range(N_COINS): result[i] = result[i] * self.balances[i] / PRECISION return result @private @constant def _xp_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256[N_COINS]: result: uint256[N_COINS] = rates for i in range(N_COINS): result[i] = result[i] * _balances[i] / PRECISION return result @private @constant def get_D(xp: uint256[N_COINS]) -> uint256: S: uint256 = 0 for _x in xp: S += _x if S == 0: return 0 Dprev: uint256 = 0 D: uint256 = S Ann: uint256 = self.A * N_COINS for _i in range(255): D_P: uint256 = D for _x in xp: D_P = D_P * D / (_x * N_COINS + 1) # +1 is to prevent /0 Dprev = D D = (Ann * S + D_P * N_COINS) * D / ((Ann - 1) * D + (N_COINS + 1) * D_P) # Equality with the precision of 1 if D > Dprev: if D - Dprev <= 1: break else: if Dprev - D <= 1: break return D @private @constant def get_D_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256: return self.get_D(self._xp_mem(rates, _balances)) @public @constant def get_virtual_price() -> uint256: """ Returns portfolio virtual price (for calculating profit) scaled up by 1e18 """ D: uint256 = self.get_D(self._xp(self._stored_rates())) # D is in the units similar to DAI (e.g. converted to precision 1e18) # When balanced, D = n * x_u - total virtual value of the portfolio token_supply: uint256 = self.token.totalSupply() return D * PRECISION / token_supply @public @constant def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256: """ Simplified method to calculate addition or reduction in token supply at deposit or withdrawal without taking fees into account (but looking at slippage). Needed to prevent front-running, not for precise calculations! """ _balances: uint256[N_COINS] = self.balances rates: uint256[N_COINS] = self._stored_rates() D0: uint256 = self.get_D_mem(rates, _balances) for i in range(N_COINS): if deposit: _balances[i] += amounts[i] else: _balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, _balances) token_amount: uint256 = self.token.totalSupply() diff: uint256 = 0 if deposit: diff = D1 - D0 else: diff = D0 - D1 return diff * token_amount / D0 @public @nonreentrant('lock') def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256): # Amounts is amounts of c-tokens assert not self.is_killed tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING fees: uint256[N_COINS] = ZEROS _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _admin_fee: uint256 = self.admin_fee token_supply: uint256 = self.token.totalSupply() rates: uint256[N_COINS] = self._current_rates() # Initial invariant D0: uint256 = 0 old_balances: uint256[N_COINS] = self.balances if token_supply > 0: D0 = self.get_D_mem(rates, old_balances) new_balances: uint256[N_COINS] = old_balances for i in range(N_COINS): if token_supply == 0: assert amounts[i] > 0 # balances store amounts of c-tokens new_balances[i] = old_balances[i] + amounts[i] # Invariant after change D1: uint256 = self.get_D_mem(rates, new_balances) assert D1 > D0 # We need to recalculate the invariant accounting for fees # to calculate fair user's share D2: uint256 = D1 if token_supply > 0: # Only account for fees if we are not the first to deposit for i in range(N_COINS): ideal_balance: uint256 = D1 * old_balances[i] / D0 difference: uint256 = 0 if ideal_balance > new_balances[i]: difference = ideal_balance - new_balances[i] else: difference = new_balances[i] - ideal_balance fees[i] = _fee * difference / FEE_DENOMINATOR self.balances[i] = new_balances[i] - (fees[i] * _admin_fee / FEE_DENOMINATOR) new_balances[i] -= fees[i] D2 = self.get_D_mem(rates, new_balances) else: self.balances = new_balances # Calculate, how much pool tokens to mint mint_amount: uint256 = 0 if token_supply == 0: mint_amount = D1 # Take the dust if there was any else: mint_amount = token_supply * (D2 - D0) / D0 assert mint_amount >= min_mint_amount, "Slippage screwed you" # Take coins from the sender for i in range(N_COINS): if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transferFrom(msg.sender, self, amounts[i]) else: assert_modifiable( cERC20(self.coins[i]).transferFrom(msg.sender, self, amounts[i])) # Mint pool tokens self.token.mint(msg.sender, mint_amount) log.AddLiquidity(msg.sender, amounts, fees, D1, token_supply + mint_amount) @private @constant def get_y(i: int128, j: int128, x: uint256, _xp: uint256[N_COINS]) -> uint256: # x in the input is converted to the same price/precision assert (i != j) and (i >= 0) and (j >= 0) and (i < N_COINS) and (j < N_COINS) D: uint256 = self.get_D(_xp) c: uint256 = D S_: uint256 = 0 Ann: uint256 = self.A * N_COINS _x: uint256 = 0 for _i in range(N_COINS): if _i == i: _x = x elif _i != j: _x = _xp[_i] else: continue S_ += _x c = c * D / (_x * N_COINS) c = c * D / (Ann * N_COINS) b: uint256 = S_ + D / Ann # - D y_prev: uint256 = 0 y: uint256 = D for _i in range(255): y_prev = y y = (y*y + c) / (2 * y + b - D) # Equality with the precision of 1 if y > y_prev: if y - y_prev <= 1: break else: if y_prev - y <= 1: break return y @public @constant def get_dy(i: int128, j: int128, dx: uint256) -> uint256: # dx and dy in c-units rates: uint256[N_COINS] = self._stored_rates() xp: uint256[N_COINS] = self._xp(rates) x: uint256 = xp[i] + (dx * rates[i] / PRECISION) y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = (xp[j] - y) * PRECISION / rates[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @public @constant def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256: # dx and dy in underlying units rates: uint256[N_COINS] = self._stored_rates() xp: uint256[N_COINS] = self._xp(rates) precisions: uint256[N_COINS] = PRECISION_MUL x: uint256 = xp[i] + dx * precisions[i] y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = (xp[j] - y) / precisions[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @private def _exchange(i: int128, j: int128, dx: uint256, rates: uint256[N_COINS]) -> uint256: assert not self.is_killed # dx and dy are in c-tokens xp: uint256[N_COINS] = self._xp(rates) x: uint256 = xp[i] + dx * rates[i] / PRECISION y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = xp[j] - y dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR dy_admin_fee: uint256 = dy_fee * self.admin_fee / FEE_DENOMINATOR self.balances[i] = x * PRECISION / rates[i] self.balances[j] = (y + (dy_fee - dy_admin_fee)) * PRECISION / rates[j] _dy: uint256 = (dy - dy_fee) * PRECISION / rates[j] return _dy @public @nonreentrant('lock') def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._current_rates() dy: uint256 = self._exchange(i, j, dx, rates) assert dy >= min_dy, "Exchange resulted in fewer coins than expected" tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transferFrom(msg.sender, self, dx) else: assert_modifiable(cERC20(self.coins[i]).transferFrom(msg.sender, self, dx)) if tethered[j] and not use_lending[j]: USDT(self.coins[j]).transfer(msg.sender, dy) else: assert_modifiable(cERC20(self.coins[j]).transfer(msg.sender, dy)) log.TokenExchange(msg.sender, i, dx, j, dy) @public @nonreentrant('lock') def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._current_rates() precisions: uint256[N_COINS] = PRECISION_MUL rate_i: uint256 = rates[i] / precisions[i] rate_j: uint256 = rates[j] / precisions[j] dx_: uint256 = dx * PRECISION / rate_i dy_: uint256 = self._exchange(i, j, dx_, rates) dy: uint256 = dy_ * rate_j / PRECISION assert dy >= min_dy, "Exchange resulted in fewer coins than expected" use_lending: bool[N_COINS] = USE_LENDING tethered: bool[N_COINS] = TETHERED ok: uint256 = 0 if tethered[i]: USDT(self.underlying_coins[i]).transferFrom(msg.sender, self, dx) else: assert_modifiable(ERC20(self.underlying_coins[i])\ .transferFrom(msg.sender, self, dx)) if use_lending[i]: ERC20(self.underlying_coins[i]).approve(self.coins[i], dx) ok = cERC20(self.coins[i]).mint(dx) if ok > 0: raise "Could not mint coin" if use_lending[j]: ok = cERC20(self.coins[j]).redeem(dy_) if ok > 0: raise "Could not redeem coin" if tethered[j]: USDT(self.underlying_coins[j]).transfer(msg.sender, dy) else: assert_modifiable(ERC20(self.underlying_coins[j])\ .transfer(msg.sender, dy)) log.TokenExchangeUnderlying(msg.sender, i, dx, j, dy) @public @nonreentrant('lock') def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]): total_supply: uint256 = self.token.totalSupply() amounts: uint256[N_COINS] = ZEROS fees: uint256[N_COINS] = ZEROS tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): value: uint256 = self.balances[i] * _amount / total_supply assert value >= min_amounts[i], "Withdrawal resulted in fewer coins than expected" self.balances[i] -= value amounts[i] = value if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transfer(msg.sender, value) else: assert_modifiable(cERC20(self.coins[i]).transfer( msg.sender, value)) self.token.burnFrom(msg.sender, _amount) # Will raise if not enough log.RemoveLiquidity(msg.sender, amounts, fees, total_supply - _amount) @public @nonreentrant('lock') def remove_liquidity_imbalance(amounts: uint256[N_COINS], max_burn_amount: uint256): assert not self.is_killed tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING token_supply: uint256 = self.token.totalSupply() assert token_supply > 0 _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _admin_fee: uint256 = self.admin_fee rates: uint256[N_COINS] = self._current_rates() old_balances: uint256[N_COINS] = self.balances new_balances: uint256[N_COINS] = old_balances D0: uint256 = self.get_D_mem(rates, old_balances) for i in range(N_COINS): new_balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, new_balances) fees: uint256[N_COINS] = ZEROS for i in range(N_COINS): ideal_balance: uint256 = D1 * old_balances[i] / D0 difference: uint256 = 0 if ideal_balance > new_balances[i]: difference = ideal_balance - new_balances[i] else: difference = new_balances[i] - ideal_balance fees[i] = _fee * difference / FEE_DENOMINATOR self.balances[i] = new_balances[i] - (fees[i] * _admin_fee / FEE_DENOMINATOR) new_balances[i] -= fees[i] D2: uint256 = self.get_D_mem(rates, new_balances) token_amount: uint256 = (D0 - D2) * token_supply / D0 assert token_amount > 0 assert token_amount <= max_burn_amount, "Slippage screwed you" for i in range(N_COINS): if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transfer(msg.sender, amounts[i]) else: assert_modifiable(cERC20(self.coins[i]).transfer(msg.sender, amounts[i])) self.token.burnFrom(msg.sender, token_amount) # Will raise if not enough log.RemoveLiquidityImbalance(msg.sender, amounts, fees, D1, token_supply - token_amount) ### Admin functions ### @public def commit_new_parameters(amplification: uint256, new_fee: uint256, new_admin_fee: uint256): assert msg.sender == self.owner assert self.admin_actions_deadline == 0 assert new_admin_fee <= max_admin_fee assert new_fee <= max_fee assert amplification <= max_A _deadline: timestamp = block.timestamp + admin_actions_delay self.admin_actions_deadline = _deadline self.future_A = amplification self.future_fee = new_fee self.future_admin_fee = new_admin_fee log.CommitNewParameters(_deadline, amplification, new_fee, new_admin_fee) @public def apply_new_parameters(): assert msg.sender == self.owner assert self.admin_actions_deadline <= block.timestamp\ and self.admin_actions_deadline > 0 self.admin_actions_deadline = 0 _A: uint256 = self.future_A _fee: uint256 = self.future_fee _admin_fee: uint256 = self.future_admin_fee self.A = _A self.fee = _fee self.admin_fee = _admin_fee log.NewParameters(_A, _fee, _admin_fee) @public def revert_new_parameters(): assert msg.sender == self.owner self.admin_actions_deadline = 0 @public def commit_transfer_ownership(_owner: address): assert msg.sender == self.owner assert self.transfer_ownership_deadline == 0 _deadline: timestamp = block.timestamp + admin_actions_delay self.transfer_ownership_deadline = _deadline self.future_owner = _owner log.CommitNewAdmin(_deadline, _owner) @public def apply_transfer_ownership(): assert msg.sender == self.owner assert block.timestamp >= self.transfer_ownership_deadline\ and self.transfer_ownership_deadline > 0 self.transfer_ownership_deadline = 0 _owner: address = self.future_owner self.owner = _owner log.NewAdmin(_owner) @public def revert_transfer_ownership(): assert msg.sender == self.owner self.transfer_ownership_deadline = 0 @public def withdraw_admin_fees(): assert msg.sender == self.owner _precisions: uint256[N_COINS] = PRECISION_MUL tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): c: address = self.coins[i] value: uint256 = cERC20(c).balanceOf(self) - self.balances[i] if value > 0: if tethered[i] and not use_lending[i]: USDT(c).transfer(msg.sender, value) else: assert_modifiable(cERC20(c).transfer(msg.sender, value)) @public def kill_me(): assert msg.sender == self.owner assert self.kill_deadline > block.timestamp self.is_killed = True @public def unkill_me(): assert msg.sender == self.owner self.is_killed = False
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","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[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewParameters","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1570535},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":6103471},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":9331701},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3489637},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3489467},{"name":"exchange","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7034253},{"name":"exchange_underlying","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7050488},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":241191},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":9330864},{"name":"commit_new_parameters","outputs":[],"inputs":[{"type":"uint256","name":"amplification"},{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":146045},{"name":"apply_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":133452},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21775},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74452},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60508},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21865},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":23448},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37818},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21955},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2130},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2160},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2190},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2021},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2051},{"name":"admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2081},{"name":"owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2111},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2141},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"future_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"future_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291}]
Contract Creation Code
740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526101606159916101403934156100a257600080fd5b602061599160c03960c05160205181106100bb57600080fd5b50602060206159910160c03960c05160205181106100d857600080fd5b50602060406159910160c03960c05160205181106100f557600080fd5b50602060606159910160c03960c051602051811061011257600080fd5b50602060806159910160c03960c051602051811061012f57600080fd5b50602060a06159910160c03960c051602051811061014c57600080fd5b50602060c06159910160c03960c051602051811061016957600080fd5b50602060e06159910160c03960c051602051811061018657600080fd5b5060206101006159910160c03960c05160205181106101a457600080fd5b506102a060006004818352015b60006101406102a051600481106101c757600080fd5b6020020151186101d657600080fd5b60006101c06102a051600481106101ec57600080fd5b6020020151186101fb57600080fd5b60006102a0516004811061020e57600080fd5b600260c052602060c02001555b81516001018083528114156101b1575b5050600060c052602060c020610140805182558060200151600183015580604001516002830155806060015160038301555050600160c052602060c0206101c0805182558060200151600183015580604001516002830155806060015160038301555050610260516003556102805160045560006005553360065542624f1a008181830110156102ba57600080fd5b80820190509050600e556000600f556102405160075561597956600436101561000d5761569e565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610400575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e0600081526000816020015260008160400152600081606001525061026060006004818352015b670de0b6b3a7640000610280526101e0610260516004811061011c57600080fd5b60200201511561037557610260516004811061013757600080fd5b600060c052602060c02001543b61014d57600080fd5b610260516004811061015e57600080fd5b600060c052602060c0200154301861017557600080fd5b6020610300600463182df0f56102a0526102bc610260516004811061019957600080fd5b600060c052602060c02001545afa6101b057600080fd5b600050610300516102805261026051600481106101cc57600080fd5b600060c052602060c02001543b6101e257600080fd5b61026051600481106101f357600080fd5b600060c052602060c0200154301861020a57600080fd5b60206103a0600463ae9d70b06103405261035c610260516004811061022e57600080fd5b600060c052602060c02001545afa61024557600080fd5b6000506103a05161032052610260516004811061026157600080fd5b600060c052602060c02001543b61027757600080fd5b610260516004811061028857600080fd5b600060c052602060c0200154301861029f57600080fd5b60206104406004636c540baf6103e0526103fc61026051600481106102c357600080fd5b600060c052602060c02001545afa6102da57600080fd5b600050610440516103c05261028080516102805161032051808202821582848304141761030657600080fd5b80905090509050436103c0518082101561031f57600080fd5b80820390509050808202821582848304141761033a57600080fd5b80905090509050670de0b6b3a7640000808061035557600080fd5b82049050905081818301101561036a57600080fd5b808201905090508152505b610160610260516004811061038957600080fd5b6020020180516102805180820282158284830414176103a757600080fd5b809050905090508152505b81516001018083528114156100fb575b50506080610460525b6000610460511115156103dd576103f9565b60206104605103610160015160206104605103610460526103cb565b6101405156005b6000156105a8575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e0600081526000816020015260008160400152600081606001525061026060006004818352015b670de0b6b3a7640000610280526101e0610260516004811061047b57600080fd5b60200201511561051d57610260516004811061049657600080fd5b600060c052602060c02001543b6104ac57600080fd5b61026051600481106104bd57600080fd5b600060c052602060c020015430186104d457600080fd5b6020610300600463bd6d894d6102a0526102bc600061026051600481106104fa57600080fd5b600060c052602060c02001545af161051157600080fd5b60005061030051610280525b610160610260516004811061053157600080fd5b60200201805161028051808202821582848304141761054f57600080fd5b809050905090508152505b815160010180835281141561045a575b50506080610320525b600061032051111515610585576105a1565b6020610320510361016001516020610320510361032052610573565b6101405156005b6000156106cd575b6101c0526101405261016052610180526101a0526101e061014080518252806020015182602001528060400151826040015280606001518260600152505061026060006004818352015b6101e0610260516004811061060e57600080fd5b6020020151610260516004811061062457600080fd5b600260c052602060c0200154808202821582848304141761064457600080fd5b80905090509050670de0b6b3a7640000808061065f57600080fd5b8204905090506101e0610260516004811061067957600080fd5b60200201525b81516001018083528114156105fa575b50506080610280525b6000610280511115156106aa576106c6565b602061028051036101e001516020610280510361028052610698565b6101c05156005b6000156107fe575b610240526101405261016052610180526101a0526101c0526101e05261020052610220526102606101408051825280602001518260200152806040015182604001528060600151826060015250506102e060006004818352015b6102606102e0516004811061074357600080fd5b60200201516101c06102e0516004811061075c57600080fd5b6020020151808202821582848304141761077557600080fd5b80905090509050670de0b6b3a7640000808061079057600080fd5b8204905090506102606102e051600481106107aa57600080fd5b60200201525b815160010180835281141561072f575b50506080610300525b6000610300511115156107db576107f7565b60206103005103610260015160206103005103610300526107c9565b6102405156005b600015610b03575b6101c0526101405261016052610180526101a05260006101e05261022060006004818352015b602061022051026101400151610200526101e080516102005181818301101561085457600080fd5b808201905090508152505b815160010180835281141561082c575b50506101e051151561088a5760006000526000516101c05156505b6000610260526101e05161028052600354600480820282158284830414176108b157600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006004818352015b602061032051026101400151610300526102e05161028051808202821582848304141761090857600080fd5b80905090509050610300516004808202821582848304141761092957600080fd5b80905090509050600181818301101561094157600080fd5b80820190509050808061095357600080fd5b8204905090506102e0525b81516001018083528114156108dc575b505061028051610260526102a0516101e051808202821582848304141761099457600080fd5b809050905090506102e051600480820282158284830414176109b557600080fd5b809050905090508181830110156109cb57600080fd5b808201905090506102805180820282158284830414176109ea57600080fd5b809050905090506102a051600180821015610a0457600080fd5b80820390509050610280518082028215828483041417610a2357600080fd5b8090509050905060056102e0518082028215828483041417610a4457600080fd5b80905090509050818183011015610a5a57600080fd5b808201905090508080610a6c57600080fd5b8204905090506102805261026051610280511115610ab3576001610280516102605180821015610a9b57600080fd5b80820390509050111515610aae57610aef565b610ade565b6001610260516102805180821015610aca57600080fd5b80820390509050111515610add57610aef565b5b5b81516001018083528114156108c8575b5050610280516000526000516101c0515650005b600015610cd1575b610240526101405261016052610180526101a0526101c0526101e0526102005261022052610140610660525b61066051516020610660510161066052610660610660511015610b5957610b37565b6305eb8fa6610680526106a0610140610460525b61046051516020610460510161046052610460610460511015610b8f57610b6d565b6342d3b3c3610480526104a06101408051825280602001518260200152806040015182604001528060600151826060015250506105206101c080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a051600658016106d5565b6105e052610600526106205261064052610440610460525b6104605152602061046051036104605261014061046051101515610c5057610c2d565b6105e0805182528060200151826020015280604001518260400152806060015182606001525050610700516106e0516106c0516106a05160065801610806565b61076052610640610660525b6106605152602061066051036106605261014061066051101515610cbf57610c9c565b61076051600052600051610240515650005b63bb7b8b806000511415610f45573415610cea57600080fd5b6101406106e0525b6106e0515160206106e051016106e0526106e06106e0511015610d1457610cf2565b6305eb8fa661070052610720610140610560525b61056051516020610560510161056052610560610560511015610d4a57610d28565b631db7662b610580526105a06101406104c0525b6104c0515160206104c051016104c0526104c06104c0511015610d8057610d5e565b600658016100a9565b6104e0526105005261052052610540526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515610dc457610da1565b6104e0805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a051600658016105b0565b61066052610680526106a0526106c052610540610560525b6105605152602061056051036105605261014061056051101515610e3f57610e1c565b6106608051825280602001518260200152806040015182604001528060600151826060015250506107805161076051610740516107205160065801610806565b6107e0526106c06106e0525b6106e0515260206106e051036106e0526101406106e051101515610eae57610e8b565b6107e051610140526007543b610ec357600080fd5b6007543018610ed157600080fd5b602061088060046318160ddd6108205261083c6007545afa610ef257600080fd5b600050610880516108005261014051670de0b6b3a76400008082028215828483041417610f1e57600080fd5b80905090509050610800518080610f3457600080fd5b82049050905060005260206000f350005b63cf701ff760005114156113a8573415610f5e57600080fd5b60843560028110610f6e57600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101c06101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b61026052610280526102a0526102c05261022052610200526101e0526101c0526101a052610180526101605261014052610260805182528060200151826020015280604001518260400152806060015182606001525050610140610300525b6103005151602061030051016103005261030061030051101561106557611043565b631f30ab74610320526103406101c08051825280602001518260200152806040015182604001528060600151826060015250506103c061014080518252806020015182602001528060400151826040015280606001518260600152505061042051610400516103e0516103c0516103a05161038051610360516103405160065801610b0b565b610480526102e0610300525b610300515260206103005103610300526101406103005110151561111a576110f7565b610480516102e0526104a060006004818352015b60843515611186576101406104a0516004811061114a57600080fd5b60200201805160046104a0516004811061116357600080fd5b602002013581818301101561117757600080fd5b808201905090508152506111d0565b6101406104a0516004811061119a57600080fd5b60200201805160046104a051600481106111b357600080fd5b6020020135808210156111c557600080fd5b808203905090508152505b5b815160010180835281141561112e575b50506101406104e0525b6104e0515160206104e051016104e0526104e06104e051101561120d576111eb565b631f30ab74610500526105206101c08051825280602001518260200152806040015182604001528060600151826060015250506105a0610140805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516105805161056051610540516105205160065801610b0b565b610660526104c06104e0525b6104e0515260206104e051036104e0526101406104e0511015156112c25761129f565b610660516104c0526007543b6112d757600080fd5b60075430186112e557600080fd5b602061070060046318160ddd6106a0526106bc6007545afa61130657600080fd5b600050610700516106805260006107205260843515611344576104c0516102e0518082101561133457600080fd5b8082039050905061072052611365565b6102e0516104c0518082101561135957600080fd5b80820390509050610720525b6107205161068051808202821582848304141761138157600080fd5b809050905090506102e051808061139757600080fd5b82049050905060005260206000f350005b63029b2f346000511415611f545762ffffff54156113c557600080fd5b600162ffffff5534156113d757600080fd5b600f54156113e457600080fd5b61014060008152600081602001526001816040015260008160600152506101c0600081526000816020015260008160400152600081606001525061024060008152600081602001526000816040015260008160600152506004546004808202821582848304141761145457600080fd5b80905090509050600c808061146857600080fd5b8204905090506102c0526005546102e0526007543b61148657600080fd5b600754301861149457600080fd5b602061038060046318160ddd6103205261033c6007545afa6114b557600080fd5b60005061038051610300526103a0610140610420525b610420515160206104205101610420526104206104205110156114ed576114cb565b60065801610408565b6104405261046052610480526104a052610400610420525b61042051526020610420510361042052610140610420511015156115315761150e565b61044080518252806020015182602001528060400151826040015280606001518260600152505060006104c0526104e060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050600061030051111561169b57610140610560525b610560515160206105605101610560526105606105605110156115dd576115bb565b631f30ab74610580526105a06103a08051825280602001518260200152806040015182604001528060600151826060015250506106206104e080518252806020015182602001528060400151826040015280606001518260600152505061068051610660516106405161062051610600516105e0516105c0516105a05160065801610b0b565b6106e052610540610560525b61056051526020610560510361056052610140610560511015156116925761166f565b6106e0516104c0525b6107006104e080518252806020015182602001528060400151826040015280606001518260600152505061078060006004818352015b610300511515611700576000600461078051600481106116f057600080fd5b6020020135116116ff57600080fd5b5b6104e0610780516004811061171457600080fd5b60200201516004610780516004811061172c57600080fd5b602002013581818301101561174057600080fd5b80820190509050610700610780516004811061175b57600080fd5b60200201525b81516001018083528114156116d1575b50506101406107c0525b6107c0515160206107c051016107c0526107c06107c051101561179d5761177b565b631f30ab746107e0526108006103a08051825280602001518260200152806040015182604001528060600151826060015250506108806107008051825280602001518260200152806040015182604001528060600151826060015250506108e0516108c0516108a051610880516108605161084051610820516108005160065801610b0b565b610940526107a06107c0525b6107c0515260206107c051036107c0526101406107c0511015156118525761182f565b610940516107a0526104c0516107a0511161186c57600080fd5b6107a051610960526000610300511115611bab5761098060006004818352015b6107a0516104e061098051600481106118a457600080fd5b602002015180820282158284830414176118bd57600080fd5b809050905090506104c05180806118d357600080fd5b8204905090506109a05260006109c05261070061098051600481106118f757600080fd5b60200201516109a0511115611940576109a051610700610980516004811061191e57600080fd5b60200201518082101561193057600080fd5b808203905090506109c052611976565b610700610980516004811061195457600080fd5b60200201516109a0518082101561196a57600080fd5b808203905090506109c0525b6102c0516109c051808202821582848304141761199257600080fd5b809050905090506402540be40080806119aa57600080fd5b82049050905061024061098051600481106119c457600080fd5b602002015261070061098051600481106119dd57600080fd5b602002015161024061098051600481106119f657600080fd5b60200201516102e0518082028215828483041417611a1357600080fd5b809050905090506402540be4008080611a2b57600080fd5b82049050905080821015611a3e57600080fd5b808203905090506109805160048110611a5657600080fd5b600260c052602060c02001556107006109805160048110611a7657600080fd5b6020020180516102406109805160048110611a9057600080fd5b602002015180821015611aa257600080fd5b808203905090508152505b815160010180835281141561188c575b50506101406109e0525b6109e0515160206109e051016109e0526109806109e0511015611ae957611ac7565b631f30ab74610a0052610a206103a0805182528060200151826020015280604001518260400152806060015182606001525050610aa0610700805182528060200151826020015280604001518260400152806060015182606001525050610b0051610ae051610ac051610aa051610a8051610a6051610a4051610a205160065801610b0b565b610b60526109606109e0525b6109e0515260206109e051036109e0526101406109e051101515611b9e57611b7b565b610b605161096052611bdd565b600260c052602060c0206107008051825580602001516001830155806040015160028301558060600151600383015550505b6000610b8052610300511515611bfa576107a051610b8052611c4f565b61030051610960516104c05180821015611c1357600080fd5b808203905090508082028215828483041417611c2e57600080fd5b809050905090506104c0518080611c4457600080fd5b820490509050610b80525b6308c379a0610ba0526020610bc0526014610be0527f536c697070616765207363726577656420796f75000000000000000000000000610c0052610be050608435610b80511015611ca1576084610bbcfd5b610c4060006004818352015b6101c0610c405160048110611cc157600080fd5b602002015115610140610c405160048110611cdb57600080fd5b60200201511615611d9c57610c405160048110611cf757600080fd5b600060c052602060c02001543b611d0d57600080fd5b610c405160048110611d1e57600080fd5b600060c052602060c02001543018611d3557600080fd5b6000600060646323b872dd610d405233610d605230610d80526004610c405160048110611d6157600080fd5b6020020135610da052610d5c6000610c405160048110611d8057600080fd5b600060c052602060c02001545af1611d9757600080fd5b611e5f565b610c405160048110611dad57600080fd5b600060c052602060c02001543b611dc357600080fd5b610c405160048110611dd457600080fd5b600060c052602060c02001543018611deb57600080fd5b6020610d2060646323b872dd610c605233610c805230610ca0526004610c405160048110611e1857600080fd5b6020020135610cc052610c7c6000610c405160048110611e3757600080fd5b600060c052602060c02001545af1611e4e57600080fd5b600050610d2051611e5e57600080fd5b5b5b8151600101808352811415611cad575b50506007543b611e7f57600080fd5b6007543018611e8d57600080fd5b6000600060446340c10f19610e005233610e2052610b8051610e4052610e1c60006007545af1611ebc57600080fd5b600435610ea052602435610ec052604435610ee052606435610f005261024051610f205261026051610f405261028051610f60526102a051610f80526107a051610fa05261030051610b8051818183011015611f1757600080fd5b80820190509050610fc052337f3f1915775e0c9a38a57a7bb7f1f9005f486fb904e1f84aa215364d567319a58d610140610ea0a2600062ffffff55005b600015612358575b610220526101405261016052610180526101a0526101c0526101e052610200526000610140511215610160516101405114151660006101605112151660046101405112166004610160511216611fb157600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051610240516305eb8fa6610280526102a06101a0805182528060200151826020015280604001518260400152806060015182606001525050610300516102e0516102c0516102a05160065801610806565b610360526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161024052610240516103805260006103a0526003546004808202821582848304141761207857600080fd5b809050905090506103c05260006103e05261040060006004818352015b610140516104005114156120b057610180516103e0526120e6565b610160516104005118156120e0576101a061040051600481106120d257600080fd5b60200201516103e0526120e5565b612162565b5b6103a080516103e0518181830110156120fe57600080fd5b808201905090508152506103805161024051808202821582848304141761212457600080fd5b809050905090506103e0516004808202821582848304141761214557600080fd5b80905090509050808061215757600080fd5b820490509050610380525b8151600101808352811415612095575b50506103805161024051808202821582848304141761219057600080fd5b809050905090506103c051600480820282158284830414176121b157600080fd5b8090509050905080806121c357600080fd5b820490509050610380526103a051610240516103c05180806121e457600080fd5b8204905090508181830110156121f957600080fd5b80820190509050610420526000610440526102405161046052610480600060ff818352015b61046051610440526104605161046051808202821582848304141761224257600080fd5b809050905090506103805181818301101561225c57600080fd5b80820190509050600261046051808202821582848304141761227d57600080fd5b809050905090506104205181818301101561229757600080fd5b8082019050905061024051808210156122af57600080fd5b8082039050905080806122c157600080fd5b82049050905061046052610440516104605111156123085760016104605161044051808210156122f057600080fd5b8082039050905011151561230357612344565b612333565b600161044051610460518082101561231f57600080fd5b8082039050905011151561233257612344565b5b5b815160010180835281141561221e575b505061046051600052600051610220515650005b635e0d443f600051141561272f57341561237157600080fd5b6060516004358060405190131561238757600080fd5b809190121561239557600080fd5b50606051602435806040519013156123ac57600080fd5b80919012156123ba57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561244b57612429565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016105b0565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156124d2576124af565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606004356004811061250c57600080fd5b60200201516044356101406004356004811061252757600080fd5b6020020151808202821582848304141761254057600080fd5b80905090509050670de0b6b3a7640000808061255b57600080fd5b82049050905081818301101561257057600080fd5b80820190509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156125a557612583565b631e8c3fd36104c0526004356104e0526024356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611f5c565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a0511015156126425761261f565b61060051610480526102606024356004811061265d57600080fd5b6020020151610480518082101561267357600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761269757600080fd5b80905090509050610140602435600481106126b157600080fd5b602002015180806126c157600080fd5b820490509050610620526004546106205180820282158284830414176126e657600080fd5b809050905090506402540be40080806126fe57600080fd5b8204905090506106405261062051610640518082101561271d57600080fd5b8082039050905060005260206000f350005b6307211ef76000511415612aed57341561274857600080fd5b6060516004358060405190131561275e57600080fd5b809190121561276c57600080fd5b506060516024358060405190131561278357600080fd5b809190121561279157600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561282257612800565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016105b0565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156128a957612886565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506102606004356004811061290857600080fd5b60200201516044356104606004356004811061292357600080fd5b6020020151808202821582848304141761293c57600080fd5b8090509050905081818301101561295257600080fd5b808201905090506104e052610140610520525b6105205151602061052051016105205261052061052051101561298757612965565b631e8c3fd36105405260043561056052602435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611f5c565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612a2457612a01565b610680516105005261026060243560048110612a3f57600080fd5b60200201516105005180821015612a5557600080fd5b8082039050905061046060243560048110612a6f57600080fd5b60200201518080612a7f57600080fd5b8204905090506106a0526004546106a0518082028215828483041417612aa457600080fd5b809050905090506402540be4008080612abc57600080fd5b8204905090506106c0526106a0516106c05180821015612adb57600080fd5b8082039050905060005260206000f350005b600015612f92575b610220526101405261016052610180526101a0526101c0526101e05261020052600f5415612b2257600080fd5b6102406101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015612b4f57612b2d565b631db7662b6102e0526103006101a080518252806020015182602001528060400151826040015280606001518260600152505061036051610340516103205161030051600658016105b0565b6103c0526103e05261040052610420526102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515612bd657612bb3565b6103c08051825280602001518260200152806040015182604001528060600151826060015250506102406101405160048110612c1157600080fd5b6020020151610180516101a06101405160048110612c2e57600080fd5b60200201518082028215828483041417612c4757600080fd5b80905090509050670de0b6b3a76400008080612c6257600080fd5b820490509050818183011015612c7757600080fd5b8082019050905061044052610140610480525b61048051516020610480510161048052610480610480511015612cac57612c8a565b631e8c3fd36104a052610140516104c052610160516104e052610440516105005261052061024080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c05160065801611f5c565b6105e052610460610480525b6104805152602061048051036104805261014061048051101515612d4b57612d28565b6105e051610460526102406101605160048110612d6757600080fd5b60200201516104605180821015612d7d57600080fd5b8082039050905061060052610600516004548082028215828483041417612da357600080fd5b809050905090506402540be4008080612dbb57600080fd5b82049050905061062052610620516005548082028215828483041417612de057600080fd5b809050905090506402540be4008080612df857600080fd5b8204905090506106405261044051670de0b6b3a76400008082028215828483041417612e2357600080fd5b809050905090506101a06101405160048110612e3e57600080fd5b60200201518080612e4e57600080fd5b8204905090506101405160048110612e6557600080fd5b600260c052602060c020015561046051610620516106405180821015612e8a57600080fd5b80820390509050818183011015612ea057600080fd5b80820190509050670de0b6b3a76400008082028215828483041417612ec457600080fd5b809050905090506101a06101605160048110612edf57600080fd5b60200201518080612eef57600080fd5b8204905090506101605160048110612f0657600080fd5b600260c052602060c0200155610600516106205180821015612f2757600080fd5b80820390509050670de0b6b3a76400008082028215828483041417612f4b57600080fd5b809050905090506101a06101605160048110612f6657600080fd5b60200201518080612f7657600080fd5b8204905090506106605261066051600052600051610220515650005b633df02124600051141561352e5762ffffff5415612faf57600080fd5b600162ffffff553415612fc157600080fd5b60605160043580604051901315612fd757600080fd5b8091901215612fe557600080fd5b5060605160243580604051901315612ffc57600080fd5b809190121561300a57600080fd5b506101406101405161016051610180516101a05160065801610408565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051632ce785a36102a0526004356102c0526024356102e0526044356103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051610300516102e0516102c05160065801612af5565b6103e052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103e051610260526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356102605110156131ae5760a461041cfd5b6104c060008152600081602001526001816040015260008160600152506105406000815260008160200152600081604001526000816060015250610540600435600481106131fb57600080fd5b6020020151156104c06004356004811061321457600080fd5b602002015116156132bd576004356004811061322f57600080fd5b600060c052602060c02001543b61324557600080fd5b6004356004811061325557600080fd5b600060c052602060c0200154301861326c57600080fd5b6000600060646323b872dd6106a052336106c052306106e052604435610700526106bc6000600435600481106132a157600080fd5b600060c052602060c02001545af16132b857600080fd5b613368565b600435600481106132cd57600080fd5b600060c052602060c02001543b6132e357600080fd5b600435600481106132f357600080fd5b600060c052602060c0200154301861330a57600080fd5b602061068060646323b872dd6105c052336105e0523061060052604435610620526105dc60006004356004811061334057600080fd5b600060c052602060c02001545af161335757600080fd5b6000506106805161336757600080fd5b5b6105406024356004811061337b57600080fd5b6020020151156104c06024356004811061339457600080fd5b6020020151161561343957602435600481106133af57600080fd5b600060c052602060c02001543b6133c557600080fd5b602435600481106133d557600080fd5b600060c052602060c020015430186133ec57600080fd5b60006000604463a9059cbb610820523361084052610260516108605261083c60006024356004811061341d57600080fd5b600060c052602060c02001545af161343457600080fd5b6134e0565b6024356004811061344957600080fd5b600060c052602060c02001543b61345f57600080fd5b6024356004811061346f57600080fd5b600060c052602060c0200154301861348657600080fd5b6020610800604463a9059cbb610760523361078052610260516107a05261077c6000602435600481106134b857600080fd5b600060c052602060c02001545af16134cf57600080fd5b600050610800516134df57600080fd5b5b6004356108c0526044356108e052602435610900526102605161092052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd9714060806108c0a2600062ffffff55005b63a6417ed66000511415613eac5762ffffff541561354b57600080fd5b600162ffffff55341561355d57600080fd5b6060516004358060405190131561357357600080fd5b809190121561358157600080fd5b506060516024358060405190131561359857600080fd5b80919012156135a657600080fd5b506101406101405161016051610180516101a05160065801610408565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101406004356004811061364257600080fd5b60200201516102606004356004811061365a57600080fd5b6020020151808061366a57600080fd5b8204905090506102e0526101406024356004811061368757600080fd5b60200201516102606024356004811061369f57600080fd5b602002015180806136af57600080fd5b82049050905061030052604435670de0b6b3a764000080820282158284830414176136d957600080fd5b809050905090506102e05180806136ef57600080fd5b82049050905061032052610140610360525b6103605151602061036051016103605261036061036051101561372357613701565b632ce785a3610380526004356103a0526024356103c052610320516103e052610400610140805182528060200151826020015280604001518260400152806060015182606001525050610460516104405161042051610400516103e0516103c0516103a05160065801612af5565b6104c052610340610360525b61036051526020610360510361036052610140610360511015156137c05761379d565b6104c05161034052610340516103005180820282158284830414176137e457600080fd5b80905090509050670de0b6b3a764000080806137ff57600080fd5b8204905090506104e0526308c379a061050052602061052052602e610540527f45786368616e676520726573756c74656420696e20666577657220636f696e73610560527f207468616e20657870656374656400000000000000000000000000000000000061058052610540506064356104e05110156138805760a461051cfd5b6105c06000815260008160200152600081604001526000816060015250610640600081526000816020015260018160400152600081606001525060006106c052610640600435600481106138d357600080fd5b60200201511561397b57600435600481106138ed57600080fd5b600160c052602060c02001543b61390357600080fd5b6004356004811061391357600080fd5b600160c052602060c0200154301861392a57600080fd5b6000600060646323b872dd6107c052336107e0523061080052604435610820526107dc60006004356004811061395f57600080fd5b600160c052602060c02001545af161397657600080fd5b613a26565b6004356004811061398b57600080fd5b600160c052602060c02001543b6139a157600080fd5b600435600481106139b157600080fd5b600160c052602060c020015430186139c857600080fd5b60206107a060646323b872dd6106e05233610700523061072052604435610740526106fc6000600435600481106139fe57600080fd5b600160c052602060c02001545af1613a1557600080fd5b6000506107a051613a2557600080fd5b5b6105c060043560048110613a3957600080fd5b602002015115613bee5760043560048110613a5357600080fd5b600160c052602060c02001543b613a6957600080fd5b60043560048110613a7957600080fd5b600160c052602060c02001543018613a9057600080fd5b6020610920604463095ea7b36108805260043560048110613ab057600080fd5b600060c052602060c02001546108a0526044356108c05261089c600060043560048110613adc57600080fd5b600160c052602060c02001545af1613af357600080fd5b6000506109205060043560048110613b0a57600080fd5b600060c052602060c02001543b613b2057600080fd5b60043560048110613b3057600080fd5b600060c052602060c02001543018613b4757600080fd5b60206109c0602463a0712d68610940526044356109605261095c600060043560048110613b7357600080fd5b600060c052602060c02001545af1613b8a57600080fd5b6000506109c0516106c05260006106c0511115613bed576308c379a06109e0526020610a00526013610a20527f436f756c64206e6f74206d696e7420636f696e00000000000000000000000000610a4052610a20506000613bec5760846109fcfd5b5b5b6105c060243560048110613c0157600080fd5b602002015115613d005760243560048110613c1b57600080fd5b600060c052602060c02001543b613c3157600080fd5b60243560048110613c4157600080fd5b600060c052602060c02001543018613c5857600080fd5b6020610b00602463db006a75610a805261034051610aa052610a9c600060243560048110613c8557600080fd5b600060c052602060c02001545af1613c9c57600080fd5b600050610b00516106c05260006106c0511115613cff576308c379a0610b20526020610b40526015610b60527f436f756c64206e6f742072656465656d20636f696e0000000000000000000000610b8052610b60506000613cfe576084610b3cfd5b5b5b61064060243560048110613d1357600080fd5b602002015115613db75760243560048110613d2d57600080fd5b600160c052602060c02001543b613d4357600080fd5b60243560048110613d5357600080fd5b600160c052602060c02001543018613d6a57600080fd5b60006000604463a9059cbb610c805233610ca0526104e051610cc052610c9c600060243560048110613d9b57600080fd5b600160c052602060c02001545af1613db257600080fd5b613e5e565b60243560048110613dc757600080fd5b600160c052602060c02001543b613ddd57600080fd5b60243560048110613ded57600080fd5b600160c052602060c02001543018613e0457600080fd5b6020610c60604463a9059cbb610bc05233610be0526104e051610c0052610bdc600060243560048110613e3657600080fd5b600160c052602060c02001545af1613e4d57600080fd5b600050610c6051613e5d57600080fd5b5b600435610d2052604435610d4052602435610d60526104e051610d8052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610d20a2600062ffffff55005b637d49d87560005114156143455762ffffff5415613ec957600080fd5b600162ffffff553415613edb57600080fd5b6007543b613ee857600080fd5b6007543018613ef657600080fd5b60206101c060046318160ddd6101605261017c6007545afa613f1757600080fd5b6000506101c051610140526101e0600081526000816020015260008160400152600081606001525061026060008152600081602001526000816040015260008160600152506102e0600081526000816020015260018160400152600081606001525061036060008152600081602001526000816040015260008160600152506103e060006004818352015b6103e05160048110613fb357600080fd5b600260c052602060c02001546004358082028215828483041417613fd657600080fd5b80905090509050610140518080613fec57600080fd5b820490509050610400526308c379a0610420526020610440526030610460527f5769746864726177616c20726573756c74656420696e20666577657220636f69610480527f6e73207468616e206578706563746564000000000000000000000000000000006104a0526104605060246103e0516004811061406c57600080fd5b60200201356104005110156140825760a461043cfd5b6103e0516004811061409357600080fd5b600260c052602060c02001805461040051808210156140b157600080fd5b80820390509050815550610400516101e06103e051600481106140d357600080fd5b60200201526103606103e051600481106140ec57600080fd5b6020020151156102e06103e0516004811061410657600080fd5b602002015116156141ae576103e0516004811061412257600080fd5b600060c052602060c02001543b61413857600080fd5b6103e0516004811061414957600080fd5b600060c052602060c0200154301861416057600080fd5b60006000604463a9059cbb6105a052336105c052610400516105e0526105bc60006103e0516004811061419257600080fd5b600060c052602060c02001545af16141a957600080fd5b614258565b6103e051600481106141bf57600080fd5b600060c052602060c02001543b6141d557600080fd5b6103e051600481106141e657600080fd5b600060c052602060c020015430186141fd57600080fd5b6020610580604463a9059cbb6104e052336105005261040051610520526104fc60006103e0516004811061423057600080fd5b600060c052602060c02001545af161424757600080fd5b6000506105805161425757600080fd5b5b5b8151600101808352811415613fa2575b50506007543b61427857600080fd5b600754301861428657600080fd5b6000600060446379cc67906106405233610660526004356106805261065c60006007545af16142b457600080fd5b6101e0516106e052610200516107005261022051610720526102405161074052610260516107605261028051610780526102a0516107a0526102c0516107c052610140516004358082101561430857600080fd5b808203905090506107e052337f9878ca375e106f2a43c3b599fc624568131c4c9a4ba66a14563715763be9d59d6101206106e0a2600062ffffff55005b6318a7bd766000511415614e315762ffffff541561436257600080fd5b600162ffffff55341561437457600080fd5b600f541561438157600080fd5b61014060008152600081602001526001816040015260008160600152506101c060008152600081602001526000816040015260008160600152506007543b6143c857600080fd5b60075430186143d657600080fd5b60206102c060046318160ddd6102605261027c6007545afa6143f757600080fd5b6000506102c051610240526000610240511161441257600080fd5b6004546004808202821582848304141761442b57600080fd5b80905090509050600c808061443f57600080fd5b8204905090506102e052600554610300526103206101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561447d5761445b565b60065801610408565b6103c0526103e05261040052610420526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156144c15761449e565b6103c080518252806020015182602001528060400151826040015280606001518260600152505061044060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506104c0610440805182528060200151826020015280604001518260400152806060015182606001525050610140610560525b6105605151602061056051016105605261056061056051101561458557614563565b631f30ab74610580526105a061032080518252806020015182602001528060400151826040015280606001518260600152505061062061044080518252806020015182602001528060400151826040015280606001518260600152505061068051610660516106405161062051610600516105e0516105c0516105a05160065801610b0b565b6106e052610540610560525b610560515260206105605103610560526101406105605110151561463a57614617565b6106e0516105405261070060006004818352015b6104c0610700516004811061466257600080fd5b6020020180516004610700516004811061467b57600080fd5b60200201358082101561468d57600080fd5b808203905090508152505b815160010180835281141561464e575b5050610140610740525b610740515160206107405101610740526107406107405110156146d4576146b2565b631f30ab74610760526107806103208051825280602001518260200152806040015182604001528060600151826060015250506108006104c0805182528060200151826020015280604001518260400152806060015182606001525050610860516108405161082051610800516107e0516107c0516107a0516107805160065801610b0b565b6108c052610720610740525b610740515260206107405103610740526101406107405110151561478957614766565b6108c051610720526108e0600081526000816020015260008160400152600081606001525061096060006004818352015b6107205161044061096051600481106147d257600080fd5b602002015180820282158284830414176147eb57600080fd5b8090509050905061054051808061480157600080fd5b8204905090506109805260006109a0526104c0610960516004811061482557600080fd5b602002015161098051111561486e57610980516104c0610960516004811061484c57600080fd5b60200201518082101561485e57600080fd5b808203905090506109a0526148a4565b6104c0610960516004811061488257600080fd5b6020020151610980518082101561489857600080fd5b808203905090506109a0525b6102e0516109a05180820282158284830414176148c057600080fd5b809050905090506402540be40080806148d857600080fd5b8204905090506108e061096051600481106148f257600080fd5b60200201526104c0610960516004811061490b57600080fd5b60200201516108e0610960516004811061492457600080fd5b602002015161030051808202821582848304141761494157600080fd5b809050905090506402540be400808061495957600080fd5b8204905090508082101561496c57600080fd5b80820390509050610960516004811061498457600080fd5b600260c052602060c02001556104c061096051600481106149a457600080fd5b6020020180516108e061096051600481106149be57600080fd5b6020020151808210156149d057600080fd5b808203905090508152505b81516001018083528114156147ba575b50506101406109e0525b6109e0515160206109e051016109e0526109e06109e0511015614a17576149f5565b631f30ab74610a0052610a20610320805182528060200151826020015280604001518260400152806060015182606001525050610aa06104c0805182528060200151826020015280604001518260400152806060015182606001525050610b0051610ae051610ac051610aa051610a8051610a6051610a4051610a205160065801610b0b565b610b60526109c06109e0525b6109e0515260206109e051036109e0526101406109e051101515614acc57614aa9565b610b60516109c052610540516109c05180821015614ae957600080fd5b80820390509050610240518082028215828483041417614b0857600080fd5b80905090509050610540518080614b1e57600080fd5b820490509050610b80526000610b805111614b3857600080fd5b6308c379a0610ba0526020610bc0526014610be0527f536c697070616765207363726577656420796f75000000000000000000000000610c0052610be050608435610b80511115614b8a576084610bbcfd5b610c4060006004818352015b6101c0610c405160048110614baa57600080fd5b602002015115610140610c405160048110614bc457600080fd5b60200201511615614c8057610c405160048110614be057600080fd5b600060c052602060c02001543b614bf657600080fd5b610c405160048110614c0757600080fd5b600060c052602060c02001543018614c1e57600080fd5b60006000604463a9059cbb610d205233610d40526004610c405160048110614c4557600080fd5b6020020135610d6052610d3c6000610c405160048110614c6457600080fd5b600060c052602060c02001545af1614c7b57600080fd5b614d3e565b610c405160048110614c9157600080fd5b600060c052602060c02001543b614ca757600080fd5b610c405160048110614cb857600080fd5b600060c052602060c02001543018614ccf57600080fd5b6020610d00604463a9059cbb610c605233610c80526004610c405160048110614cf757600080fd5b6020020135610ca052610c7c6000610c405160048110614d1657600080fd5b600060c052602060c02001545af1614d2d57600080fd5b600050610d0051614d3d57600080fd5b5b5b8151600101808352811415614b96575b50506007543b614d5e57600080fd5b6007543018614d6c57600080fd5b6000600060446379cc6790610dc05233610de052610b8051610e0052610ddc60006007545af1614d9b57600080fd5b600435610e6052602435610e8052604435610ea052606435610ec0526108e051610ee05261090051610f005261092051610f205261094051610f405261072051610f605261024051610b805180821015614df457600080fd5b80820390509050610f8052337fb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602610140610e60a2600062ffffff55005b63ee11f5b66000511415614f19573415614e4a57600080fd5b6006543314614e5857600080fd5b60085415614e6557600080fd5b64012a05f2006044351115614e7957600080fd5b64012a05f2006024351115614e8d57600080fd5b620f42406004351115614e9f57600080fd5b426203f480818183011015614eb357600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614fc6573415614f3257600080fd5b6006543314614f4057600080fd5b60006008541142600854111516614f5657600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614ff4573415614fdf57600080fd5b6006543314614fed57600080fd5b6000600855005b636b441a40600051141561509557341561500d57600080fd5b600435602051811061501e57600080fd5b50600654331461502d57600080fd5b6009541561503a57600080fd5b426203f48081818301101561504e57600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156151115734156150ae57600080fd5b60065433146150bc57600080fd5b600060095411600954421015166150d257600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561513f57341561512a57600080fd5b600654331461513857600080fd5b6000600955005b6330c54085600051141561537e57341561515857600080fd5b600654331461516657600080fd5b6101406001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101c0600081526000816020015260018160400152600081606001525061024060008152600081602001526000816040015260008160600152506102c060006004818352015b6102c051600481106151e257600080fd5b600060c052602060c02001546102e0526102e0513b61520057600080fd5b6102e051301861520f57600080fd5b60206103a060246370a0823161032052306103405261033c6102e0515afa61523657600080fd5b6000506103a0516102c0516004811061524e57600080fd5b600260c052602060c02001548082101561526757600080fd5b80820390509050610300526000610300511115615369576102406102c0516004811061529257600080fd5b6020020151156101c06102c051600481106152ac57600080fd5b60200201511615615309576102e0513b6152c557600080fd5b6102e05130186152d457600080fd5b60006000604463a9059cbb61048052336104a052610300516104c05261049c60006102e0515af161530457600080fd5b615368565b6102e0513b61531757600080fd5b6102e051301861532657600080fd5b6020610460604463a9059cbb6103c052336103e05261030051610400526103dc60006102e0515af161535757600080fd5b6000506104605161536757600080fd5b5b5b5b81516001018083528114156151d1575b5050005b63e369885360005114156153ba57341561539757600080fd5b60065433146153a557600080fd5b42600e54116153b357600080fd5b6001600f55005b633046f97260005114156153e85734156153d357600080fd5b60065433146153e157600080fd5b6000600f55005b6323746eb8600051141561544d57341561540157600080fd5b6060516004358060405190131561541757600080fd5b809190121561542557600080fd5b506004356004811061543657600080fd5b600060c052602060c020015460005260206000f350005b63b739953e60005114156154b257341561546657600080fd5b6060516004358060405190131561547c57600080fd5b809190121561548a57600080fd5b506004356004811061549b57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156155175734156154cb57600080fd5b606051600435806040519013156154e157600080fd5b80919012156154ef57600080fd5b506004356004811061550057600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d0600051141561553e57341561553057600080fd5b60035460005260206000f350005b63ddca3f43600051141561556557341561555757600080fd5b60045460005260206000f350005b63fee3f7f9600051141561558c57341561557e57600080fd5b60055460005260206000f350005b638da5cb5b60005114156155b35734156155a557600080fd5b60065460005260206000f350005b63405e28f860005114156155da5734156155cc57600080fd5b60085460005260206000f350005b63e0a0b58660005114156156015734156155f357600080fd5b60095460005260206000f350005b63b4b577ad600051141561562857341561561a57600080fd5b600a5460005260206000f350005b6358680d0b600051141561564f57341561564157600080fd5b600b5460005260206000f350005b63e3824462600051141561567657341561566857600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561569d57341561568f57600080fd5b600d5460005260206000f350005b5b60006000fd5b6102d5615979036102d56000396102d5615979036000f30000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51000000000000000000000000c25a3a3b969415c80451098fa907ec722572917f000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000003d0900Deployed Bytecode
0x600436101561000d5761569e565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610400575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e0600081526000816020015260008160400152600081606001525061026060006004818352015b670de0b6b3a7640000610280526101e0610260516004811061011c57600080fd5b60200201511561037557610260516004811061013757600080fd5b600060c052602060c02001543b61014d57600080fd5b610260516004811061015e57600080fd5b600060c052602060c0200154301861017557600080fd5b6020610300600463182df0f56102a0526102bc610260516004811061019957600080fd5b600060c052602060c02001545afa6101b057600080fd5b600050610300516102805261026051600481106101cc57600080fd5b600060c052602060c02001543b6101e257600080fd5b61026051600481106101f357600080fd5b600060c052602060c0200154301861020a57600080fd5b60206103a0600463ae9d70b06103405261035c610260516004811061022e57600080fd5b600060c052602060c02001545afa61024557600080fd5b6000506103a05161032052610260516004811061026157600080fd5b600060c052602060c02001543b61027757600080fd5b610260516004811061028857600080fd5b600060c052602060c0200154301861029f57600080fd5b60206104406004636c540baf6103e0526103fc61026051600481106102c357600080fd5b600060c052602060c02001545afa6102da57600080fd5b600050610440516103c05261028080516102805161032051808202821582848304141761030657600080fd5b80905090509050436103c0518082101561031f57600080fd5b80820390509050808202821582848304141761033a57600080fd5b80905090509050670de0b6b3a7640000808061035557600080fd5b82049050905081818301101561036a57600080fd5b808201905090508152505b610160610260516004811061038957600080fd5b6020020180516102805180820282158284830414176103a757600080fd5b809050905090508152505b81516001018083528114156100fb575b50506080610460525b6000610460511115156103dd576103f9565b60206104605103610160015160206104605103610460526103cb565b6101405156005b6000156105a8575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e0600081526000816020015260008160400152600081606001525061026060006004818352015b670de0b6b3a7640000610280526101e0610260516004811061047b57600080fd5b60200201511561051d57610260516004811061049657600080fd5b600060c052602060c02001543b6104ac57600080fd5b61026051600481106104bd57600080fd5b600060c052602060c020015430186104d457600080fd5b6020610300600463bd6d894d6102a0526102bc600061026051600481106104fa57600080fd5b600060c052602060c02001545af161051157600080fd5b60005061030051610280525b610160610260516004811061053157600080fd5b60200201805161028051808202821582848304141761054f57600080fd5b809050905090508152505b815160010180835281141561045a575b50506080610320525b600061032051111515610585576105a1565b6020610320510361016001516020610320510361032052610573565b6101405156005b6000156106cd575b6101c0526101405261016052610180526101a0526101e061014080518252806020015182602001528060400151826040015280606001518260600152505061026060006004818352015b6101e0610260516004811061060e57600080fd5b6020020151610260516004811061062457600080fd5b600260c052602060c0200154808202821582848304141761064457600080fd5b80905090509050670de0b6b3a7640000808061065f57600080fd5b8204905090506101e0610260516004811061067957600080fd5b60200201525b81516001018083528114156105fa575b50506080610280525b6000610280511115156106aa576106c6565b602061028051036101e001516020610280510361028052610698565b6101c05156005b6000156107fe575b610240526101405261016052610180526101a0526101c0526101e05261020052610220526102606101408051825280602001518260200152806040015182604001528060600151826060015250506102e060006004818352015b6102606102e0516004811061074357600080fd5b60200201516101c06102e0516004811061075c57600080fd5b6020020151808202821582848304141761077557600080fd5b80905090509050670de0b6b3a7640000808061079057600080fd5b8204905090506102606102e051600481106107aa57600080fd5b60200201525b815160010180835281141561072f575b50506080610300525b6000610300511115156107db576107f7565b60206103005103610260015160206103005103610300526107c9565b6102405156005b600015610b03575b6101c0526101405261016052610180526101a05260006101e05261022060006004818352015b602061022051026101400151610200526101e080516102005181818301101561085457600080fd5b808201905090508152505b815160010180835281141561082c575b50506101e051151561088a5760006000526000516101c05156505b6000610260526101e05161028052600354600480820282158284830414176108b157600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006004818352015b602061032051026101400151610300526102e05161028051808202821582848304141761090857600080fd5b80905090509050610300516004808202821582848304141761092957600080fd5b80905090509050600181818301101561094157600080fd5b80820190509050808061095357600080fd5b8204905090506102e0525b81516001018083528114156108dc575b505061028051610260526102a0516101e051808202821582848304141761099457600080fd5b809050905090506102e051600480820282158284830414176109b557600080fd5b809050905090508181830110156109cb57600080fd5b808201905090506102805180820282158284830414176109ea57600080fd5b809050905090506102a051600180821015610a0457600080fd5b80820390509050610280518082028215828483041417610a2357600080fd5b8090509050905060056102e0518082028215828483041417610a4457600080fd5b80905090509050818183011015610a5a57600080fd5b808201905090508080610a6c57600080fd5b8204905090506102805261026051610280511115610ab3576001610280516102605180821015610a9b57600080fd5b80820390509050111515610aae57610aef565b610ade565b6001610260516102805180821015610aca57600080fd5b80820390509050111515610add57610aef565b5b5b81516001018083528114156108c8575b5050610280516000526000516101c0515650005b600015610cd1575b610240526101405261016052610180526101a0526101c0526101e0526102005261022052610140610660525b61066051516020610660510161066052610660610660511015610b5957610b37565b6305eb8fa6610680526106a0610140610460525b61046051516020610460510161046052610460610460511015610b8f57610b6d565b6342d3b3c3610480526104a06101408051825280602001518260200152806040015182604001528060600151826060015250506105206101c080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a051600658016106d5565b6105e052610600526106205261064052610440610460525b6104605152602061046051036104605261014061046051101515610c5057610c2d565b6105e0805182528060200151826020015280604001518260400152806060015182606001525050610700516106e0516106c0516106a05160065801610806565b61076052610640610660525b6106605152602061066051036106605261014061066051101515610cbf57610c9c565b61076051600052600051610240515650005b63bb7b8b806000511415610f45573415610cea57600080fd5b6101406106e0525b6106e0515160206106e051016106e0526106e06106e0511015610d1457610cf2565b6305eb8fa661070052610720610140610560525b61056051516020610560510161056052610560610560511015610d4a57610d28565b631db7662b610580526105a06101406104c0525b6104c0515160206104c051016104c0526104c06104c0511015610d8057610d5e565b600658016100a9565b6104e0526105005261052052610540526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515610dc457610da1565b6104e0805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a051600658016105b0565b61066052610680526106a0526106c052610540610560525b6105605152602061056051036105605261014061056051101515610e3f57610e1c565b6106608051825280602001518260200152806040015182604001528060600151826060015250506107805161076051610740516107205160065801610806565b6107e0526106c06106e0525b6106e0515260206106e051036106e0526101406106e051101515610eae57610e8b565b6107e051610140526007543b610ec357600080fd5b6007543018610ed157600080fd5b602061088060046318160ddd6108205261083c6007545afa610ef257600080fd5b600050610880516108005261014051670de0b6b3a76400008082028215828483041417610f1e57600080fd5b80905090509050610800518080610f3457600080fd5b82049050905060005260206000f350005b63cf701ff760005114156113a8573415610f5e57600080fd5b60843560028110610f6e57600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101c06101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b61026052610280526102a0526102c05261022052610200526101e0526101c0526101a052610180526101605261014052610260805182528060200151826020015280604001518260400152806060015182606001525050610140610300525b6103005151602061030051016103005261030061030051101561106557611043565b631f30ab74610320526103406101c08051825280602001518260200152806040015182604001528060600151826060015250506103c061014080518252806020015182602001528060400151826040015280606001518260600152505061042051610400516103e0516103c0516103a05161038051610360516103405160065801610b0b565b610480526102e0610300525b610300515260206103005103610300526101406103005110151561111a576110f7565b610480516102e0526104a060006004818352015b60843515611186576101406104a0516004811061114a57600080fd5b60200201805160046104a0516004811061116357600080fd5b602002013581818301101561117757600080fd5b808201905090508152506111d0565b6101406104a0516004811061119a57600080fd5b60200201805160046104a051600481106111b357600080fd5b6020020135808210156111c557600080fd5b808203905090508152505b5b815160010180835281141561112e575b50506101406104e0525b6104e0515160206104e051016104e0526104e06104e051101561120d576111eb565b631f30ab74610500526105206101c08051825280602001518260200152806040015182604001528060600151826060015250506105a0610140805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516105805161056051610540516105205160065801610b0b565b610660526104c06104e0525b6104e0515260206104e051036104e0526101406104e0511015156112c25761129f565b610660516104c0526007543b6112d757600080fd5b60075430186112e557600080fd5b602061070060046318160ddd6106a0526106bc6007545afa61130657600080fd5b600050610700516106805260006107205260843515611344576104c0516102e0518082101561133457600080fd5b8082039050905061072052611365565b6102e0516104c0518082101561135957600080fd5b80820390509050610720525b6107205161068051808202821582848304141761138157600080fd5b809050905090506102e051808061139757600080fd5b82049050905060005260206000f350005b63029b2f346000511415611f545762ffffff54156113c557600080fd5b600162ffffff5534156113d757600080fd5b600f54156113e457600080fd5b61014060008152600081602001526001816040015260008160600152506101c0600081526000816020015260008160400152600081606001525061024060008152600081602001526000816040015260008160600152506004546004808202821582848304141761145457600080fd5b80905090509050600c808061146857600080fd5b8204905090506102c0526005546102e0526007543b61148657600080fd5b600754301861149457600080fd5b602061038060046318160ddd6103205261033c6007545afa6114b557600080fd5b60005061038051610300526103a0610140610420525b610420515160206104205101610420526104206104205110156114ed576114cb565b60065801610408565b6104405261046052610480526104a052610400610420525b61042051526020610420510361042052610140610420511015156115315761150e565b61044080518252806020015182602001528060400151826040015280606001518260600152505060006104c0526104e060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050600061030051111561169b57610140610560525b610560515160206105605101610560526105606105605110156115dd576115bb565b631f30ab74610580526105a06103a08051825280602001518260200152806040015182604001528060600151826060015250506106206104e080518252806020015182602001528060400151826040015280606001518260600152505061068051610660516106405161062051610600516105e0516105c0516105a05160065801610b0b565b6106e052610540610560525b61056051526020610560510361056052610140610560511015156116925761166f565b6106e0516104c0525b6107006104e080518252806020015182602001528060400151826040015280606001518260600152505061078060006004818352015b610300511515611700576000600461078051600481106116f057600080fd5b6020020135116116ff57600080fd5b5b6104e0610780516004811061171457600080fd5b60200201516004610780516004811061172c57600080fd5b602002013581818301101561174057600080fd5b80820190509050610700610780516004811061175b57600080fd5b60200201525b81516001018083528114156116d1575b50506101406107c0525b6107c0515160206107c051016107c0526107c06107c051101561179d5761177b565b631f30ab746107e0526108006103a08051825280602001518260200152806040015182604001528060600151826060015250506108806107008051825280602001518260200152806040015182604001528060600151826060015250506108e0516108c0516108a051610880516108605161084051610820516108005160065801610b0b565b610940526107a06107c0525b6107c0515260206107c051036107c0526101406107c0511015156118525761182f565b610940516107a0526104c0516107a0511161186c57600080fd5b6107a051610960526000610300511115611bab5761098060006004818352015b6107a0516104e061098051600481106118a457600080fd5b602002015180820282158284830414176118bd57600080fd5b809050905090506104c05180806118d357600080fd5b8204905090506109a05260006109c05261070061098051600481106118f757600080fd5b60200201516109a0511115611940576109a051610700610980516004811061191e57600080fd5b60200201518082101561193057600080fd5b808203905090506109c052611976565b610700610980516004811061195457600080fd5b60200201516109a0518082101561196a57600080fd5b808203905090506109c0525b6102c0516109c051808202821582848304141761199257600080fd5b809050905090506402540be40080806119aa57600080fd5b82049050905061024061098051600481106119c457600080fd5b602002015261070061098051600481106119dd57600080fd5b602002015161024061098051600481106119f657600080fd5b60200201516102e0518082028215828483041417611a1357600080fd5b809050905090506402540be4008080611a2b57600080fd5b82049050905080821015611a3e57600080fd5b808203905090506109805160048110611a5657600080fd5b600260c052602060c02001556107006109805160048110611a7657600080fd5b6020020180516102406109805160048110611a9057600080fd5b602002015180821015611aa257600080fd5b808203905090508152505b815160010180835281141561188c575b50506101406109e0525b6109e0515160206109e051016109e0526109806109e0511015611ae957611ac7565b631f30ab74610a0052610a206103a0805182528060200151826020015280604001518260400152806060015182606001525050610aa0610700805182528060200151826020015280604001518260400152806060015182606001525050610b0051610ae051610ac051610aa051610a8051610a6051610a4051610a205160065801610b0b565b610b60526109606109e0525b6109e0515260206109e051036109e0526101406109e051101515611b9e57611b7b565b610b605161096052611bdd565b600260c052602060c0206107008051825580602001516001830155806040015160028301558060600151600383015550505b6000610b8052610300511515611bfa576107a051610b8052611c4f565b61030051610960516104c05180821015611c1357600080fd5b808203905090508082028215828483041417611c2e57600080fd5b809050905090506104c0518080611c4457600080fd5b820490509050610b80525b6308c379a0610ba0526020610bc0526014610be0527f536c697070616765207363726577656420796f75000000000000000000000000610c0052610be050608435610b80511015611ca1576084610bbcfd5b610c4060006004818352015b6101c0610c405160048110611cc157600080fd5b602002015115610140610c405160048110611cdb57600080fd5b60200201511615611d9c57610c405160048110611cf757600080fd5b600060c052602060c02001543b611d0d57600080fd5b610c405160048110611d1e57600080fd5b600060c052602060c02001543018611d3557600080fd5b6000600060646323b872dd610d405233610d605230610d80526004610c405160048110611d6157600080fd5b6020020135610da052610d5c6000610c405160048110611d8057600080fd5b600060c052602060c02001545af1611d9757600080fd5b611e5f565b610c405160048110611dad57600080fd5b600060c052602060c02001543b611dc357600080fd5b610c405160048110611dd457600080fd5b600060c052602060c02001543018611deb57600080fd5b6020610d2060646323b872dd610c605233610c805230610ca0526004610c405160048110611e1857600080fd5b6020020135610cc052610c7c6000610c405160048110611e3757600080fd5b600060c052602060c02001545af1611e4e57600080fd5b600050610d2051611e5e57600080fd5b5b5b8151600101808352811415611cad575b50506007543b611e7f57600080fd5b6007543018611e8d57600080fd5b6000600060446340c10f19610e005233610e2052610b8051610e4052610e1c60006007545af1611ebc57600080fd5b600435610ea052602435610ec052604435610ee052606435610f005261024051610f205261026051610f405261028051610f60526102a051610f80526107a051610fa05261030051610b8051818183011015611f1757600080fd5b80820190509050610fc052337f3f1915775e0c9a38a57a7bb7f1f9005f486fb904e1f84aa215364d567319a58d610140610ea0a2600062ffffff55005b600015612358575b610220526101405261016052610180526101a0526101c0526101e052610200526000610140511215610160516101405114151660006101605112151660046101405112166004610160511216611fb157600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051610240516305eb8fa6610280526102a06101a0805182528060200151826020015280604001518260400152806060015182606001525050610300516102e0516102c0516102a05160065801610806565b610360526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161024052610240516103805260006103a0526003546004808202821582848304141761207857600080fd5b809050905090506103c05260006103e05261040060006004818352015b610140516104005114156120b057610180516103e0526120e6565b610160516104005118156120e0576101a061040051600481106120d257600080fd5b60200201516103e0526120e5565b612162565b5b6103a080516103e0518181830110156120fe57600080fd5b808201905090508152506103805161024051808202821582848304141761212457600080fd5b809050905090506103e0516004808202821582848304141761214557600080fd5b80905090509050808061215757600080fd5b820490509050610380525b8151600101808352811415612095575b50506103805161024051808202821582848304141761219057600080fd5b809050905090506103c051600480820282158284830414176121b157600080fd5b8090509050905080806121c357600080fd5b820490509050610380526103a051610240516103c05180806121e457600080fd5b8204905090508181830110156121f957600080fd5b80820190509050610420526000610440526102405161046052610480600060ff818352015b61046051610440526104605161046051808202821582848304141761224257600080fd5b809050905090506103805181818301101561225c57600080fd5b80820190509050600261046051808202821582848304141761227d57600080fd5b809050905090506104205181818301101561229757600080fd5b8082019050905061024051808210156122af57600080fd5b8082039050905080806122c157600080fd5b82049050905061046052610440516104605111156123085760016104605161044051808210156122f057600080fd5b8082039050905011151561230357612344565b612333565b600161044051610460518082101561231f57600080fd5b8082039050905011151561233257612344565b5b5b815160010180835281141561221e575b505061046051600052600051610220515650005b635e0d443f600051141561272f57341561237157600080fd5b6060516004358060405190131561238757600080fd5b809190121561239557600080fd5b50606051602435806040519013156123ac57600080fd5b80919012156123ba57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561244b57612429565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016105b0565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156124d2576124af565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606004356004811061250c57600080fd5b60200201516044356101406004356004811061252757600080fd5b6020020151808202821582848304141761254057600080fd5b80905090509050670de0b6b3a7640000808061255b57600080fd5b82049050905081818301101561257057600080fd5b80820190509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156125a557612583565b631e8c3fd36104c0526004356104e0526024356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611f5c565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a0511015156126425761261f565b61060051610480526102606024356004811061265d57600080fd5b6020020151610480518082101561267357600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761269757600080fd5b80905090509050610140602435600481106126b157600080fd5b602002015180806126c157600080fd5b820490509050610620526004546106205180820282158284830414176126e657600080fd5b809050905090506402540be40080806126fe57600080fd5b8204905090506106405261062051610640518082101561271d57600080fd5b8082039050905060005260206000f350005b6307211ef76000511415612aed57341561274857600080fd5b6060516004358060405190131561275e57600080fd5b809190121561276c57600080fd5b506060516024358060405190131561278357600080fd5b809190121561279157600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561282257612800565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016105b0565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156128a957612886565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506102606004356004811061290857600080fd5b60200201516044356104606004356004811061292357600080fd5b6020020151808202821582848304141761293c57600080fd5b8090509050905081818301101561295257600080fd5b808201905090506104e052610140610520525b6105205151602061052051016105205261052061052051101561298757612965565b631e8c3fd36105405260043561056052602435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611f5c565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612a2457612a01565b610680516105005261026060243560048110612a3f57600080fd5b60200201516105005180821015612a5557600080fd5b8082039050905061046060243560048110612a6f57600080fd5b60200201518080612a7f57600080fd5b8204905090506106a0526004546106a0518082028215828483041417612aa457600080fd5b809050905090506402540be4008080612abc57600080fd5b8204905090506106c0526106a0516106c05180821015612adb57600080fd5b8082039050905060005260206000f350005b600015612f92575b610220526101405261016052610180526101a0526101c0526101e05261020052600f5415612b2257600080fd5b6102406101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015612b4f57612b2d565b631db7662b6102e0526103006101a080518252806020015182602001528060400151826040015280606001518260600152505061036051610340516103205161030051600658016105b0565b6103c0526103e05261040052610420526102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515612bd657612bb3565b6103c08051825280602001518260200152806040015182604001528060600151826060015250506102406101405160048110612c1157600080fd5b6020020151610180516101a06101405160048110612c2e57600080fd5b60200201518082028215828483041417612c4757600080fd5b80905090509050670de0b6b3a76400008080612c6257600080fd5b820490509050818183011015612c7757600080fd5b8082019050905061044052610140610480525b61048051516020610480510161048052610480610480511015612cac57612c8a565b631e8c3fd36104a052610140516104c052610160516104e052610440516105005261052061024080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c05160065801611f5c565b6105e052610460610480525b6104805152602061048051036104805261014061048051101515612d4b57612d28565b6105e051610460526102406101605160048110612d6757600080fd5b60200201516104605180821015612d7d57600080fd5b8082039050905061060052610600516004548082028215828483041417612da357600080fd5b809050905090506402540be4008080612dbb57600080fd5b82049050905061062052610620516005548082028215828483041417612de057600080fd5b809050905090506402540be4008080612df857600080fd5b8204905090506106405261044051670de0b6b3a76400008082028215828483041417612e2357600080fd5b809050905090506101a06101405160048110612e3e57600080fd5b60200201518080612e4e57600080fd5b8204905090506101405160048110612e6557600080fd5b600260c052602060c020015561046051610620516106405180821015612e8a57600080fd5b80820390509050818183011015612ea057600080fd5b80820190509050670de0b6b3a76400008082028215828483041417612ec457600080fd5b809050905090506101a06101605160048110612edf57600080fd5b60200201518080612eef57600080fd5b8204905090506101605160048110612f0657600080fd5b600260c052602060c0200155610600516106205180821015612f2757600080fd5b80820390509050670de0b6b3a76400008082028215828483041417612f4b57600080fd5b809050905090506101a06101605160048110612f6657600080fd5b60200201518080612f7657600080fd5b8204905090506106605261066051600052600051610220515650005b633df02124600051141561352e5762ffffff5415612faf57600080fd5b600162ffffff553415612fc157600080fd5b60605160043580604051901315612fd757600080fd5b8091901215612fe557600080fd5b5060605160243580604051901315612ffc57600080fd5b809190121561300a57600080fd5b506101406101405161016051610180516101a05160065801610408565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051632ce785a36102a0526004356102c0526024356102e0526044356103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051610300516102e0516102c05160065801612af5565b6103e052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103e051610260526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356102605110156131ae5760a461041cfd5b6104c060008152600081602001526001816040015260008160600152506105406000815260008160200152600081604001526000816060015250610540600435600481106131fb57600080fd5b6020020151156104c06004356004811061321457600080fd5b602002015116156132bd576004356004811061322f57600080fd5b600060c052602060c02001543b61324557600080fd5b6004356004811061325557600080fd5b600060c052602060c0200154301861326c57600080fd5b6000600060646323b872dd6106a052336106c052306106e052604435610700526106bc6000600435600481106132a157600080fd5b600060c052602060c02001545af16132b857600080fd5b613368565b600435600481106132cd57600080fd5b600060c052602060c02001543b6132e357600080fd5b600435600481106132f357600080fd5b600060c052602060c0200154301861330a57600080fd5b602061068060646323b872dd6105c052336105e0523061060052604435610620526105dc60006004356004811061334057600080fd5b600060c052602060c02001545af161335757600080fd5b6000506106805161336757600080fd5b5b6105406024356004811061337b57600080fd5b6020020151156104c06024356004811061339457600080fd5b6020020151161561343957602435600481106133af57600080fd5b600060c052602060c02001543b6133c557600080fd5b602435600481106133d557600080fd5b600060c052602060c020015430186133ec57600080fd5b60006000604463a9059cbb610820523361084052610260516108605261083c60006024356004811061341d57600080fd5b600060c052602060c02001545af161343457600080fd5b6134e0565b6024356004811061344957600080fd5b600060c052602060c02001543b61345f57600080fd5b6024356004811061346f57600080fd5b600060c052602060c0200154301861348657600080fd5b6020610800604463a9059cbb610760523361078052610260516107a05261077c6000602435600481106134b857600080fd5b600060c052602060c02001545af16134cf57600080fd5b600050610800516134df57600080fd5b5b6004356108c0526044356108e052602435610900526102605161092052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd9714060806108c0a2600062ffffff55005b63a6417ed66000511415613eac5762ffffff541561354b57600080fd5b600162ffffff55341561355d57600080fd5b6060516004358060405190131561357357600080fd5b809190121561358157600080fd5b506060516024358060405190131561359857600080fd5b80919012156135a657600080fd5b506101406101405161016051610180516101a05160065801610408565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101406004356004811061364257600080fd5b60200201516102606004356004811061365a57600080fd5b6020020151808061366a57600080fd5b8204905090506102e0526101406024356004811061368757600080fd5b60200201516102606024356004811061369f57600080fd5b602002015180806136af57600080fd5b82049050905061030052604435670de0b6b3a764000080820282158284830414176136d957600080fd5b809050905090506102e05180806136ef57600080fd5b82049050905061032052610140610360525b6103605151602061036051016103605261036061036051101561372357613701565b632ce785a3610380526004356103a0526024356103c052610320516103e052610400610140805182528060200151826020015280604001518260400152806060015182606001525050610460516104405161042051610400516103e0516103c0516103a05160065801612af5565b6104c052610340610360525b61036051526020610360510361036052610140610360511015156137c05761379d565b6104c05161034052610340516103005180820282158284830414176137e457600080fd5b80905090509050670de0b6b3a764000080806137ff57600080fd5b8204905090506104e0526308c379a061050052602061052052602e610540527f45786368616e676520726573756c74656420696e20666577657220636f696e73610560527f207468616e20657870656374656400000000000000000000000000000000000061058052610540506064356104e05110156138805760a461051cfd5b6105c06000815260008160200152600081604001526000816060015250610640600081526000816020015260018160400152600081606001525060006106c052610640600435600481106138d357600080fd5b60200201511561397b57600435600481106138ed57600080fd5b600160c052602060c02001543b61390357600080fd5b6004356004811061391357600080fd5b600160c052602060c0200154301861392a57600080fd5b6000600060646323b872dd6107c052336107e0523061080052604435610820526107dc60006004356004811061395f57600080fd5b600160c052602060c02001545af161397657600080fd5b613a26565b6004356004811061398b57600080fd5b600160c052602060c02001543b6139a157600080fd5b600435600481106139b157600080fd5b600160c052602060c020015430186139c857600080fd5b60206107a060646323b872dd6106e05233610700523061072052604435610740526106fc6000600435600481106139fe57600080fd5b600160c052602060c02001545af1613a1557600080fd5b6000506107a051613a2557600080fd5b5b6105c060043560048110613a3957600080fd5b602002015115613bee5760043560048110613a5357600080fd5b600160c052602060c02001543b613a6957600080fd5b60043560048110613a7957600080fd5b600160c052602060c02001543018613a9057600080fd5b6020610920604463095ea7b36108805260043560048110613ab057600080fd5b600060c052602060c02001546108a0526044356108c05261089c600060043560048110613adc57600080fd5b600160c052602060c02001545af1613af357600080fd5b6000506109205060043560048110613b0a57600080fd5b600060c052602060c02001543b613b2057600080fd5b60043560048110613b3057600080fd5b600060c052602060c02001543018613b4757600080fd5b60206109c0602463a0712d68610940526044356109605261095c600060043560048110613b7357600080fd5b600060c052602060c02001545af1613b8a57600080fd5b6000506109c0516106c05260006106c0511115613bed576308c379a06109e0526020610a00526013610a20527f436f756c64206e6f74206d696e7420636f696e00000000000000000000000000610a4052610a20506000613bec5760846109fcfd5b5b5b6105c060243560048110613c0157600080fd5b602002015115613d005760243560048110613c1b57600080fd5b600060c052602060c02001543b613c3157600080fd5b60243560048110613c4157600080fd5b600060c052602060c02001543018613c5857600080fd5b6020610b00602463db006a75610a805261034051610aa052610a9c600060243560048110613c8557600080fd5b600060c052602060c02001545af1613c9c57600080fd5b600050610b00516106c05260006106c0511115613cff576308c379a0610b20526020610b40526015610b60527f436f756c64206e6f742072656465656d20636f696e0000000000000000000000610b8052610b60506000613cfe576084610b3cfd5b5b5b61064060243560048110613d1357600080fd5b602002015115613db75760243560048110613d2d57600080fd5b600160c052602060c02001543b613d4357600080fd5b60243560048110613d5357600080fd5b600160c052602060c02001543018613d6a57600080fd5b60006000604463a9059cbb610c805233610ca0526104e051610cc052610c9c600060243560048110613d9b57600080fd5b600160c052602060c02001545af1613db257600080fd5b613e5e565b60243560048110613dc757600080fd5b600160c052602060c02001543b613ddd57600080fd5b60243560048110613ded57600080fd5b600160c052602060c02001543018613e0457600080fd5b6020610c60604463a9059cbb610bc05233610be0526104e051610c0052610bdc600060243560048110613e3657600080fd5b600160c052602060c02001545af1613e4d57600080fd5b600050610c6051613e5d57600080fd5b5b600435610d2052604435610d4052602435610d60526104e051610d8052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610d20a2600062ffffff55005b637d49d87560005114156143455762ffffff5415613ec957600080fd5b600162ffffff553415613edb57600080fd5b6007543b613ee857600080fd5b6007543018613ef657600080fd5b60206101c060046318160ddd6101605261017c6007545afa613f1757600080fd5b6000506101c051610140526101e0600081526000816020015260008160400152600081606001525061026060008152600081602001526000816040015260008160600152506102e0600081526000816020015260018160400152600081606001525061036060008152600081602001526000816040015260008160600152506103e060006004818352015b6103e05160048110613fb357600080fd5b600260c052602060c02001546004358082028215828483041417613fd657600080fd5b80905090509050610140518080613fec57600080fd5b820490509050610400526308c379a0610420526020610440526030610460527f5769746864726177616c20726573756c74656420696e20666577657220636f69610480527f6e73207468616e206578706563746564000000000000000000000000000000006104a0526104605060246103e0516004811061406c57600080fd5b60200201356104005110156140825760a461043cfd5b6103e0516004811061409357600080fd5b600260c052602060c02001805461040051808210156140b157600080fd5b80820390509050815550610400516101e06103e051600481106140d357600080fd5b60200201526103606103e051600481106140ec57600080fd5b6020020151156102e06103e0516004811061410657600080fd5b602002015116156141ae576103e0516004811061412257600080fd5b600060c052602060c02001543b61413857600080fd5b6103e0516004811061414957600080fd5b600060c052602060c0200154301861416057600080fd5b60006000604463a9059cbb6105a052336105c052610400516105e0526105bc60006103e0516004811061419257600080fd5b600060c052602060c02001545af16141a957600080fd5b614258565b6103e051600481106141bf57600080fd5b600060c052602060c02001543b6141d557600080fd5b6103e051600481106141e657600080fd5b600060c052602060c020015430186141fd57600080fd5b6020610580604463a9059cbb6104e052336105005261040051610520526104fc60006103e0516004811061423057600080fd5b600060c052602060c02001545af161424757600080fd5b6000506105805161425757600080fd5b5b5b8151600101808352811415613fa2575b50506007543b61427857600080fd5b600754301861428657600080fd5b6000600060446379cc67906106405233610660526004356106805261065c60006007545af16142b457600080fd5b6101e0516106e052610200516107005261022051610720526102405161074052610260516107605261028051610780526102a0516107a0526102c0516107c052610140516004358082101561430857600080fd5b808203905090506107e052337f9878ca375e106f2a43c3b599fc624568131c4c9a4ba66a14563715763be9d59d6101206106e0a2600062ffffff55005b6318a7bd766000511415614e315762ffffff541561436257600080fd5b600162ffffff55341561437457600080fd5b600f541561438157600080fd5b61014060008152600081602001526001816040015260008160600152506101c060008152600081602001526000816040015260008160600152506007543b6143c857600080fd5b60075430186143d657600080fd5b60206102c060046318160ddd6102605261027c6007545afa6143f757600080fd5b6000506102c051610240526000610240511161441257600080fd5b6004546004808202821582848304141761442b57600080fd5b80905090509050600c808061443f57600080fd5b8204905090506102e052600554610300526103206101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561447d5761445b565b60065801610408565b6103c0526103e05261040052610420526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156144c15761449e565b6103c080518252806020015182602001528060400151826040015280606001518260600152505061044060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506104c0610440805182528060200151826020015280604001518260400152806060015182606001525050610140610560525b6105605151602061056051016105605261056061056051101561458557614563565b631f30ab74610580526105a061032080518252806020015182602001528060400151826040015280606001518260600152505061062061044080518252806020015182602001528060400151826040015280606001518260600152505061068051610660516106405161062051610600516105e0516105c0516105a05160065801610b0b565b6106e052610540610560525b610560515260206105605103610560526101406105605110151561463a57614617565b6106e0516105405261070060006004818352015b6104c0610700516004811061466257600080fd5b6020020180516004610700516004811061467b57600080fd5b60200201358082101561468d57600080fd5b808203905090508152505b815160010180835281141561464e575b5050610140610740525b610740515160206107405101610740526107406107405110156146d4576146b2565b631f30ab74610760526107806103208051825280602001518260200152806040015182604001528060600151826060015250506108006104c0805182528060200151826020015280604001518260400152806060015182606001525050610860516108405161082051610800516107e0516107c0516107a0516107805160065801610b0b565b6108c052610720610740525b610740515260206107405103610740526101406107405110151561478957614766565b6108c051610720526108e0600081526000816020015260008160400152600081606001525061096060006004818352015b6107205161044061096051600481106147d257600080fd5b602002015180820282158284830414176147eb57600080fd5b8090509050905061054051808061480157600080fd5b8204905090506109805260006109a0526104c0610960516004811061482557600080fd5b602002015161098051111561486e57610980516104c0610960516004811061484c57600080fd5b60200201518082101561485e57600080fd5b808203905090506109a0526148a4565b6104c0610960516004811061488257600080fd5b6020020151610980518082101561489857600080fd5b808203905090506109a0525b6102e0516109a05180820282158284830414176148c057600080fd5b809050905090506402540be40080806148d857600080fd5b8204905090506108e061096051600481106148f257600080fd5b60200201526104c0610960516004811061490b57600080fd5b60200201516108e0610960516004811061492457600080fd5b602002015161030051808202821582848304141761494157600080fd5b809050905090506402540be400808061495957600080fd5b8204905090508082101561496c57600080fd5b80820390509050610960516004811061498457600080fd5b600260c052602060c02001556104c061096051600481106149a457600080fd5b6020020180516108e061096051600481106149be57600080fd5b6020020151808210156149d057600080fd5b808203905090508152505b81516001018083528114156147ba575b50506101406109e0525b6109e0515160206109e051016109e0526109e06109e0511015614a17576149f5565b631f30ab74610a0052610a20610320805182528060200151826020015280604001518260400152806060015182606001525050610aa06104c0805182528060200151826020015280604001518260400152806060015182606001525050610b0051610ae051610ac051610aa051610a8051610a6051610a4051610a205160065801610b0b565b610b60526109c06109e0525b6109e0515260206109e051036109e0526101406109e051101515614acc57614aa9565b610b60516109c052610540516109c05180821015614ae957600080fd5b80820390509050610240518082028215828483041417614b0857600080fd5b80905090509050610540518080614b1e57600080fd5b820490509050610b80526000610b805111614b3857600080fd5b6308c379a0610ba0526020610bc0526014610be0527f536c697070616765207363726577656420796f75000000000000000000000000610c0052610be050608435610b80511115614b8a576084610bbcfd5b610c4060006004818352015b6101c0610c405160048110614baa57600080fd5b602002015115610140610c405160048110614bc457600080fd5b60200201511615614c8057610c405160048110614be057600080fd5b600060c052602060c02001543b614bf657600080fd5b610c405160048110614c0757600080fd5b600060c052602060c02001543018614c1e57600080fd5b60006000604463a9059cbb610d205233610d40526004610c405160048110614c4557600080fd5b6020020135610d6052610d3c6000610c405160048110614c6457600080fd5b600060c052602060c02001545af1614c7b57600080fd5b614d3e565b610c405160048110614c9157600080fd5b600060c052602060c02001543b614ca757600080fd5b610c405160048110614cb857600080fd5b600060c052602060c02001543018614ccf57600080fd5b6020610d00604463a9059cbb610c605233610c80526004610c405160048110614cf757600080fd5b6020020135610ca052610c7c6000610c405160048110614d1657600080fd5b600060c052602060c02001545af1614d2d57600080fd5b600050610d0051614d3d57600080fd5b5b5b8151600101808352811415614b96575b50506007543b614d5e57600080fd5b6007543018614d6c57600080fd5b6000600060446379cc6790610dc05233610de052610b8051610e0052610ddc60006007545af1614d9b57600080fd5b600435610e6052602435610e8052604435610ea052606435610ec0526108e051610ee05261090051610f005261092051610f205261094051610f405261072051610f605261024051610b805180821015614df457600080fd5b80820390509050610f8052337fb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602610140610e60a2600062ffffff55005b63ee11f5b66000511415614f19573415614e4a57600080fd5b6006543314614e5857600080fd5b60085415614e6557600080fd5b64012a05f2006044351115614e7957600080fd5b64012a05f2006024351115614e8d57600080fd5b620f42406004351115614e9f57600080fd5b426203f480818183011015614eb357600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614fc6573415614f3257600080fd5b6006543314614f4057600080fd5b60006008541142600854111516614f5657600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614ff4573415614fdf57600080fd5b6006543314614fed57600080fd5b6000600855005b636b441a40600051141561509557341561500d57600080fd5b600435602051811061501e57600080fd5b50600654331461502d57600080fd5b6009541561503a57600080fd5b426203f48081818301101561504e57600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae60005114156151115734156150ae57600080fd5b60065433146150bc57600080fd5b600060095411600954421015166150d257600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf193600051141561513f57341561512a57600080fd5b600654331461513857600080fd5b6000600955005b6330c54085600051141561537e57341561515857600080fd5b600654331461516657600080fd5b6101406001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101c0600081526000816020015260018160400152600081606001525061024060008152600081602001526000816040015260008160600152506102c060006004818352015b6102c051600481106151e257600080fd5b600060c052602060c02001546102e0526102e0513b61520057600080fd5b6102e051301861520f57600080fd5b60206103a060246370a0823161032052306103405261033c6102e0515afa61523657600080fd5b6000506103a0516102c0516004811061524e57600080fd5b600260c052602060c02001548082101561526757600080fd5b80820390509050610300526000610300511115615369576102406102c0516004811061529257600080fd5b6020020151156101c06102c051600481106152ac57600080fd5b60200201511615615309576102e0513b6152c557600080fd5b6102e05130186152d457600080fd5b60006000604463a9059cbb61048052336104a052610300516104c05261049c60006102e0515af161530457600080fd5b615368565b6102e0513b61531757600080fd5b6102e051301861532657600080fd5b6020610460604463a9059cbb6103c052336103e05261030051610400526103dc60006102e0515af161535757600080fd5b6000506104605161536757600080fd5b5b5b5b81516001018083528114156151d1575b5050005b63e369885360005114156153ba57341561539757600080fd5b60065433146153a557600080fd5b42600e54116153b357600080fd5b6001600f55005b633046f97260005114156153e85734156153d357600080fd5b60065433146153e157600080fd5b6000600f55005b6323746eb8600051141561544d57341561540157600080fd5b6060516004358060405190131561541757600080fd5b809190121561542557600080fd5b506004356004811061543657600080fd5b600060c052602060c020015460005260206000f350005b63b739953e60005114156154b257341561546657600080fd5b6060516004358060405190131561547c57600080fd5b809190121561548a57600080fd5b506004356004811061549b57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156155175734156154cb57600080fd5b606051600435806040519013156154e157600080fd5b80919012156154ef57600080fd5b506004356004811061550057600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d0600051141561553e57341561553057600080fd5b60035460005260206000f350005b63ddca3f43600051141561556557341561555757600080fd5b60045460005260206000f350005b63fee3f7f9600051141561558c57341561557e57600080fd5b60055460005260206000f350005b638da5cb5b60005114156155b35734156155a557600080fd5b60065460005260206000f350005b63405e28f860005114156155da5734156155cc57600080fd5b60085460005260206000f350005b63e0a0b58660005114156156015734156155f357600080fd5b60095460005260206000f350005b63b4b577ad600051141561562857341561561a57600080fd5b600a5460005260206000f350005b6358680d0b600051141561564f57341561564157600080fd5b600b5460005260206000f350005b63e3824462600051141561567657341561566857600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561569d57341561568f57600080fd5b600d5460005260206000f350005b5b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51000000000000000000000000c25a3a3b969415c80451098fa907ec722572917f000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000003d0900
-----Decoded View---------------
Arg [0] : _coins (address[4]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7,0x57Ab1ec28D129707052df4dF418D58a2D46d5f51
Arg [1] : _underlying_coins (address[4]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7,0x57Ab1ec28D129707052df4dF418D58a2D46d5f51
Arg [2] : _pool_token (address): 0xC25a3A3b969415c80451098fa907EC722572917F
Arg [3] : _A (uint256): 70
Arg [4] : _fee (uint256): 4000000
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [3] : 00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51
Arg [4] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [5] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [6] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [7] : 00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51
Arg [8] : 000000000000000000000000c25a3a3b969415c80451098fa907ec722572917f
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [10] : 00000000000000000000000000000000000000000000000000000000003d0900Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingOVERVIEW
Curve.fi's sUSD v2 swap address.
Multichain Portfolio | 25 Chains
Chain Token Portfolio % Price Amount Value ETH 58.19% $0.986976 8,835,846.7405 $8,720,768.67 ETH 14.00% $1 2,096,687.8676 $2,098,784.56 ETH 13.97% $1 2,092,257.34 $2,094,349.6 ETH 13.82% $1 2,071,765.2052 $2,071,765.21 ETH <0.01% $2.11 1 $2.11 ETH <0.01% $0.001229 1,000 $1.23 BSC <0.01% $1 1,390.8173 $1,390.91 BSC <0.01% $0.001228 100 $0.1227 Loading...Loading[ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
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.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.