Source Code
Overview
ETH Balance
0.00420221415734748 ETH
ETH Value
$16.45 (@ $3,914.23/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (>100)0.04252644 aOptOPAave Optimis... (aOptOP)0.018519 aOptUSDTAave Optimis... (aOptUS...)$0.02@1.000 aOptWETHAave Optimis... (aOptWE...)$0.00@3,919.980.0002 ACHIVXACHIVX (ACHIVX)1.01615011 AURAAura (AURA)$0.48@0.47170.245607 axlUSDCAxelar Wrapp... (axlUSD...)$0.25@0.99950.95227218 BALBalancer (BAL)$3.48@3.650.02397918 CELOCelo native ... (CELO)$0.02@0.87330.2125 LINKChainLink To... (LINK)$6.19@29.1325,435 DCNDentacoin (DCN)$0.03@0.000.15075901 DOLADola USD Sta... (DOLA)$0.15@0.992657.26780246 NEXTEverclear (NEXT)$6.62@0.1156156.2278951 EXTRAExtra Financ... (EXTRA)$13.86@0.088719.84855308 GIVGiveth Token (GIV)$0.18@0.00891.68385056 HOPHop (HOP)$0.03@0.01990.22523887 IBIronBank (IB)$0.12@0.52241.9610106 JRTJarvis Rewar... (JRT)$0.01@0.00571.79694565 KNCKyber Networ... (KNC)$1.28@0.7111122.86591618 LYRALyra Token (LYRA)$0.23@0.00190.02831852 mooBIFIMoo BIFI (mooBIF...)$11.29@398.820.00000098 tBTCOptimism tBT... (tBTC)$0.10@99,704.000.17758666 PENDLEPendle (PENDLE)$1.08@6.065.9469276 POOLPoolTogether (POOL)$6.72@1.130.00020701 ezETHRenzo Restak... (ezETH)$0.83@4,029.530.008925 GRGRigo Token (GRG)$0.00@0.49020.00061457 RPLRocket Pool ... (RPL)$0.01@15.580.00000391 sfrxETHStaked Frax ... (sfrxET...)$0.02@4,336.3640.75666772 sUSDSynth sUSD (sUSD)$40.31@0.98916.07798845 SNXSynthetix Ne... (SNX)$19.08@3.145.76858163 TAROTTarot (TAROT)$1.67@0.289819.239699 USDTTether USD (USDT)$19.24@1.008.7031696 THALESThales DAO T... (THALES)$2.41@0.27640.00000042 uniBTCuniBTC (uniBTC)21.943246 USDC.eUSD Coin (Br... (USDC.e)$21.94@0.99990.013886 USD+USD+ (USD+)$0.01@1.004.92637173 USDeUSDe (USDe)$4.94@1.0025.09280537 VELOVelodrome (VELO)$0.75@0.14771.69815433 WLDWorldcoin (WLD)$5.24@3.08740.2176425 WWormhole Tok... (W)$0.07@0.33390.00012812 WBTCWrapped BTC (WBTC)$12.78@99,778.000.00014031 WETHWrapped Ethe... (WETH)$0.55@3,919.400.00995597 wstETHWrapped liqu... (wstETH)$46.36@4,656.273.10967645 1INCH1INCH Token (1INCH)$1.57@0.50459.93732581 OPOptimism (OP)$25.94@2.610410.763369 USDCUSD Coin (USDC)$10.76@0.999915,000 WLD [ WWW.GET-WLD.ORG ] Visit to claim rewardERC-20: ! (WLD [ ...)50,000 $ERC-20: (E T H - ... ($)50,000 $ERC-20: (E T H - ... ($)50,000 $ERC-20: + $50 000... ($)2.21625931 0xBTC0xBitcoin Token$0.21@0.09680.06675288 AAVEAave Token$25.05@375.301 claim rewards on debridgether.comERC-20: Acces deb... (claim ...)7.17630517 ACXAcross Protocol Token$5.64@0.786650,000 0ERC-20: B O N U S... (0)0.00721057 BONDBarnBridge Governance Token (Optimism)$0.01@1.110.00785855 BIFIbeefy.finance2.6363389 BEETSERC-20: Beethoven... (BEETS)0.00000155 BTC.bERC-20: Bitcoin (BTC.b)537.74564485 BLUERC-20: BLUE (BLU)0.02008444 CHIChi USD0.00046249 COMPERC-20: Compound (COMP)0.35275506 XCHFERC-20: CryptoFra... (XCHF)0.42315323 CRVCurve DAO Token$0.52@1.221.18436649 CYBERCyberConnect42,526.35 DEATHOSdeathOS5.71545881 DHTdHEDGE DAO Token$0.57@0.1050,000 $ERC-20: E T H - B... ($)50,000 $ERC-20: E T H - B... ($)50,000 $ERC-20: E T H - B... ($)10,000 $ERC-20: E T H - B... ($)10,000 $ERC-20: E T H - B... ($)32.73099462 ELKERC-20: Elk (ELK)0.00005845 hETHETH Hop Token0.3572052 OSERC-20: Ethereans (OS)0.00862806 ENSERC-20: Ethereum ... (ENS)0.0021994 EXAexactly$0.00@0.249667,154.97332371 FVSERC-20: Favos (FVS)0.77132451 FOAMFOAM Token$0.00@0.00250.21256656 FUSEFuse Token0.80226427 GTCERC-20: Gitcoin (GTC)23.21397695 USDGLOGlo Dollar$23.21@0.99972.71467527 GRAINGranary Token$0.01@0.004513.37604499 HAIHAI Index Token$14.43@1.079379.6224081 HANHanChain$2.53@0.006728.84250377 HNDHundred Finance$0.63@0.02193.89164 ITPInfinite Trading Protocol0.241558 KUJIERC-20: Kujira na... (KUJI)0.94844943 KWENTAKwenta$34.65@36.5350,799 LAMEERC-20: LameFrog (LAME)18.4482006 L2DAOLayer2DAO$0.01@0.0005109.56280343 TUXMagicalTux$0.07@0.000650.8725 MAIERC-20: Mai Stabl... (MAI)148,470.54982401 MASKSMasks31.96 MTAMeta$1.05@0.03280.4061555 MOLTENERC-20: Molten (MOLTEN)8.5 MTERC-20: MyToken (MT)81.95135588 NBLNBL31.674659 (=ↀωↀ=)ERC-20: Nekocoin ((=ↀωↀ=...)51.49592321 NFTENFTEarth0.06736322 nUSDERC-20: nUSD (nUSD)NFT Tokens (>100)TN1ERC-721TN1ERC-721TN1ERC-721TN1ERC-721..ERC-1155nft-aave.com# nft-aave.comx2ERC-1155Airdrop+$50 000 (BONUS-ETH.NET) 🎁ERC-1155Let's Go!🎁ERC-1155....🎁ERC-1155.🎁ERC-1155hurry Up!🎁 Congratulations!ERC-1155Let's Go!🎁 Congratulations!ERC-1155Let's Go!🎁 Congratulations!ERC-1155Let's Go!🎁 Congratulations!ERC-1155Let's Go!🎁 Congratulations!ERC-1155Let's Go!🎁 Congratulations!ERC-1155Let's Go!🎁 Congratulations!ERC-1155tw1$100,000 PEIPEIERC-1155tw1$100,000 PEIPEIERC-1155tw1$100,000 PEIPEIERC-1155tw1$100,000 PEIPEIERC-1155tw1$100,000 SHIBERC-1155tw1$100,000 SHIBERC-1155Airdrop$50 000 FOR FREEERC-1155Airdrop$50 000 FOR FREEERC-1155Airdrop$5O OOO FOR FREEERC-1155hurry Up!$5O OOO FOR FREEERC-1155hurry Up!$5O OOO FOR FREEERC-1155Airdrop5OOOO USD FOR FREEERC-1155deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721Ethereum EventsERC-1155Ethereum EventsERC-1155EventERC-1155EventEventERC-1155EventERC-1155EventERC-1155EventERC-1155EventERC-1155$FLOKIFLOKI AIRDROP AT floki-crypto.onlineERC-1155...foundationERC-1155Hurry up!ERC-1155Hurry up!ERC-1155Hurry up!ERC-1155Hurry up!ERC-1155ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]
Latest 25 from a total of 143,934 transactions
Transaction Hash MethodBlockFromToFill Quote Eth T... 129233202 2024-12-13 4:46:21 48 mins ago 1734065181 IN 0.0121 ETH$47.36 0.000007571851 0.00010488 Fill Quote Token... 129233142 2024-12-13 4:44:21 50 mins ago 1734065061 IN 0 ETH$0.00 0.000009774389 0.00000048 Fill Quote Token... 129233027 2024-12-13 4:40:31 54 mins ago 1734064831 IN 0 ETH$0.00 0.000013758441 0.00000048 Fill Quote Token... 129232734 2024-12-13 4:30:45 1 hr ago 1734064245 IN 0 ETH$0.00 0.000015902705 0.00000047 Fill Quote Token... 129230395 2024-12-13 3:12:47 2 hrs ago 1734059567 IN 0 ETH$0.00 0.000014479101 0.00010493 Fill Quote Token... 129230322 2024-12-13 3:10:21 2 hrs ago 1734059421 IN 0 ETH$0.00 0.000019652363 0.00010493 Fill Quote Eth T... 129228907 2024-12-13 2:23:11 3 hrs ago 1734056591 IN 0.0001 ETH$0.39 0.000010372331 0.000012 Fill Quote Eth T... 129227491 2024-12-13 1:35:59 3 hrs ago 1734053759 IN 0.00414 ETH$16.20 0.000006597415 0.00010533 Fill Quote Token... 129226856 2024-12-13 1:14:49 4 hrs ago 1734052489 IN 0 ETH$0.00 0.000002992023 0.00000126 Fill Quote Token... 129224342 2024-12-12 23:51:01 5 hrs ago 1734047461 IN 0 ETH$0.00 0.000000353394 0.00001061 Fill Quote Eth T... 129223893 2024-12-12 23:36:03 5 hrs ago 1734046563 IN 0.033 ETH$129.17 0.000000667963 0.00000127 Fill Quote Token... 129222919 2024-12-12 23:03:35 6 hrs ago 1734044615 IN 0 ETH$0.00 0.000001451463 0.00000108 Fill Quote Token... 129222791 2024-12-12 22:59:19 6 hrs ago 1734044359 IN 0 ETH$0.00 0.000001350129 0.00000111 Fill Quote Token... 129222064 2024-12-12 22:35:05 6 hrs ago 1734042905 IN 0 ETH$0.00 0.00000136449 0.00000112 Fill Quote Token... 129222064 2024-12-12 22:35:05 6 hrs ago 1734042905 IN 0 ETH$0.00 0.000000758459 0.00000112 Fill Quote Token... 129222033 2024-12-12 22:34:03 7 hrs ago 1734042843 IN 0 ETH$0.00 0.000001286041 0.00000113 Fill Quote Token... 129222028 2024-12-12 22:33:53 7 hrs ago 1734042833 IN 0 ETH$0.00 0.000000950508 0.00000113 Fill Quote Token... 129221500 2024-12-12 22:16:17 7 hrs ago 1734041777 IN 0 ETH$0.00 0.000001363382 0.00010448 Fill Quote Eth T... 129221376 2024-12-12 22:12:09 7 hrs ago 1734041529 IN 0.00031 ETH$1.21 0.000001545834 0.00000101 Fill Quote Token... 129221367 2024-12-12 22:11:51 7 hrs ago 1734041511 IN 0 ETH$0.00 0.000001475918 0.00000102 Fill Quote Token... 129220480 2024-12-12 21:42:17 7 hrs ago 1734039737 IN 0 ETH$0.00 0.000001095664 0.00010517 Fill Quote Token... 129220476 2024-12-12 21:42:09 7 hrs ago 1734039729 IN 0 ETH$0.00 0.000001851966 0.00000087 Fill Quote Token... 129220302 2024-12-12 21:36:21 7 hrs ago 1734039381 IN 0 ETH$0.00 0.000001898663 0.00009524 Fill Quote Token... 129219287 2024-12-12 21:02:31 8 hrs ago 1734037351 IN 0 ETH$0.00 0.000005225595 0.00000077 Fill Quote Token... 129217488 2024-12-12 20:02:33 9 hrs ago 1734033753 IN 0 ETH$0.00 0.000021349323 0.00010514 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block From To 129233202 2024-12-13 4:46:21 48 mins ago 1734065181 0.01199715 ETH$46.96 129230395 2024-12-13 3:12:47 2 hrs ago 1734059567 0.000706933667602 ETH$2.77 129230395 2024-12-13 3:12:47 2 hrs ago 1734059567 0.000712994117602 ETH$2.79 129230322 2024-12-13 3:10:21 2 hrs ago 1734059421 0.000963696697352 ETH$3.77 129230322 2024-12-13 3:10:21 2 hrs ago 1734059421 0.000971958343269 ETH$3.80 129228907 2024-12-13 2:23:11 3 hrs ago 1734056591 0.00009915 ETH$0.39 129227491 2024-12-13 1:35:59 3 hrs ago 1734053759 0.00410481 ETH$16.07 129226856 2024-12-13 1:14:49 4 hrs ago 1734052489 0.000099372886078 ETH$0.39 129226856 2024-12-13 1:14:49 4 hrs ago 1734052489 0.000100224796851 ETH$0.39 129223893 2024-12-12 23:36:03 5 hrs ago 1734046563 0.0327195 ETH$128.07 129222919 2024-12-12 23:03:35 6 hrs ago 1734044615 0.000847100453107 ETH$3.32 129222919 2024-12-12 23:03:35 6 hrs ago 1734044615 0.000854362534652 ETH$3.34 129222791 2024-12-12 22:59:19 6 hrs ago 1734044359 0.000354641383428 ETH$1.39 129222791 2024-12-12 22:59:19 6 hrs ago 1734044359 0.000357681677689 ETH$1.40 129222064 2024-12-12 22:35:05 6 hrs ago 1734042905 0.002021865296479 ETH$7.91 129222064 2024-12-12 22:35:05 6 hrs ago 1734042905 0.002039198483589 ETH$7.98 129222064 2024-12-12 22:35:05 6 hrs ago 1734042905 0.003657631527697 ETH$14.32 129222064 2024-12-12 22:35:05 6 hrs ago 1734042905 0.00368898792506 ETH$14.44 129222033 2024-12-12 22:34:03 7 hrs ago 1734042843 0.046989058771844 ETH$183.93 129222033 2024-12-12 22:34:03 7 hrs ago 1734042843 0.047391889835445 ETH$185.50 129222028 2024-12-12 22:33:53 7 hrs ago 1734042833 0.005949872323779 ETH$23.29 129222028 2024-12-12 22:33:53 7 hrs ago 1734042833 0.006000879802097 ETH$23.49 129221500 2024-12-12 22:16:17 7 hrs ago 1734041777 0.000321779489011 ETH$1.26 129221500 2024-12-12 22:16:17 7 hrs ago 1734041777 0.000324538062543 ETH$1.27 129221376 2024-12-12 22:12:09 7 hrs ago 1734041529 0.000307365 ETH$1.20 Loading...LoadingContract Name:RainbowRouter
Compiler Versionv0.8.11+commit.d7f03943
Contract Source Code (Solidity)
- - function approve(address spender, uin ...
- - function transfer(address to, uint256 ...
- - function transferFrom(
- - function permit(
- - function DOMAIN_SEPARATOR()
- - function computeDomainSeparator()
- - function _mint(address to, uint256 am ...
- - function _burn(address from, uint256 ...
- library SafeTransferLib
- - function safeTransferETH(address to, ...
- - function safeTransferFrom(
- - function safeTransfer(
- - function safeApprove(
- - function didLastOptionalReturnCallSuc ...
- interface IERC20
- - function totalSupply()
- - function balanceOf(address account)
- - function transfer(address recipient, ...
- - function allowance(address owner, add ...
- - function approve(address spender, uin ...
- - function transferFrom(
- interface IERC20Metadata is IERC20
- - function name()
- - function symbol()
- - function decimals()
- interface IERC20Permit
- - function permit(
- - function nonces(address owner)
- - function DOMAIN_SEPARATOR()
- interface IERC2612 is IERC20Metadata, ...
- - function _nonces(address owner)
- - function version()
- interface IERC20PermitAllowed
- - function permit(
- interface IDAI is IERC20Metadata, IER ...
- - function DOMAIN_SEPARATOR()
- - function PERMIT_TYPEHASH()
- - function nonces(address owner)
- - function version()
- library PermitHelper
- - function permit(
- contract BaseAggregator
- - function fillQuoteEthToToken(
- - function fillQuoteTokenToToken(
- - function fillQuoteTokenToTokenWithPer ...
- - function fillQuoteTokenToEth(
- - function fillQuoteTokenToEthWithPermi ...
- - function _fillQuoteTokenToEth(
- - function _fillQuoteTokenToToken(
- contract RainbowRouter is BaseAggr ... *
- - function updateSwapTargets(address ta ...
- - function withdrawToken(
- - function withdrawEth(address to, uint ...
- - function transferOwnership(address ne ...
/** *Submitted for verification at optimistic.etherscan.io on 2022-03-17 */ // Sources flattened with hardhat v2.6.5 https://hardhat.org // SPDX-License-Identifier: GPL-3.0 // File @rari-capital/solmate/src/tokens/[email protected] pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } // File @rari-capital/solmate/src/utils/[email protected] pragma solidity >=0.8.0; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. library SafeTransferLib { /*/////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool callStatus; assembly { // Transfer the ETH and store if it succeeded or not. callStatus := call(gas(), to, amount, 0, 0, 0, 0) } require(callStatus, "ETH_TRANSFER_FAILED"); } /*/////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 100 because the calldata length is 4 + 32 * 3. callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED"); } /*/////////////////////////////////////////////////////////////// INTERNAL HELPER LOGIC //////////////////////////////////////////////////////////////*/ function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) { assembly { // Get how many bytes the call returned. let returnDataSize := returndatasize() // If the call reverted: if iszero(callStatus) { // Copy the revert message into memory. returndatacopy(0, 0, returnDataSize) // Revert with the same message. revert(0, returnDataSize) } switch returnDataSize case 32 { // Copy the return data into memory. returndatacopy(0, 0, returnDataSize) // Set success to whether it returned true. success := iszero(iszero(mload(0))) } case 0 { // There was no return data. success := 1 } default { // It returned some malformed input. success := 0 } } } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File contracts/interfaces/IERC2612.sol pragma solidity =0.8.11; interface IERC2612 is IERC20Metadata, IERC20Permit { function _nonces(address owner) external view returns (uint256); function version() external view returns (string memory); } // File @uniswap/v3-periphery/contracts/interfaces/external/[email protected] pragma solidity >=0.5.0; /// @title Interface for permit /// @notice Interface used by DAI/CHAI for permit interface IERC20PermitAllowed { /// @notice Approve the spender to spend some tokens via the holder signature /// @dev This is the permit interface used by DAI and CHAI /// @param holder The address of the token holder, the token owner /// @param spender The address of the token spender /// @param nonce The holder's nonce, increases at each call to permit /// @param expiry The timestamp at which the permit is no longer valid /// @param allowed Boolean that sets approval amount, true for type(uint256).max and false for 0 /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` function permit( address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s ) external; } // File contracts/interfaces/IDAI.sol pragma solidity =0.8.11; interface IDAI is IERC20Metadata, IERC20PermitAllowed { function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function version() external view returns (string memory); } // File contracts/libraries/PermitHelper.sol pragma solidity =0.8.11; /// @title PermitHelper /// @dev Helper methods for using ERC20 Permit (ERC2612 or DAI/CHAI like) library PermitHelper { struct Permit { uint256 value; uint256 nonce; uint256 deadline; bool isDaiStylePermit; uint8 v; bytes32 r; bytes32 s; } /// @dev permit method helper that will handle both known implementations // DAI vs ERC2612 tokens /// @param permitData bytes containing the encoded permit signature /// @param tokenAddress address of the token that will be permitted /// @param holder address that holds the tokens to be permitted /// @param spender address that will be permitted to spend the tokens function permit( Permit memory permitData, address tokenAddress, address holder, address spender ) internal { if (permitData.isDaiStylePermit) { IDAI(tokenAddress).permit( holder, spender, permitData.nonce, permitData.deadline, true, permitData.v, permitData.r, permitData.s ); } else { IERC2612(tokenAddress).permit( holder, spender, permitData.value, permitData.deadline, permitData.v, permitData.r, permitData.s ); } } } // File contracts/routers/BaseAggregator.sol pragma solidity =0.8.11; /// @title Rainbow base aggregator contract contract BaseAggregator { /// @dev Used to prevent re-entrancy uint256 internal status; /// @dev Set of allowed swapTargets. mapping(address => bool) public swapTargets; /// @dev modifier that prevents reentrancy attacks on specific methods modifier nonReentrant() { // On the first call to nonReentrant, status will be 1 require(status != 2, "NON_REENTRANT"); // Any calls to nonReentrant after this point will fail status = 2; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) status = 1; } /// @dev modifier that ensures only approved targets can be called modifier onlyApprovedTarget(address target) { require(swapTargets[target], "TARGET_NOT_AUTH"); _; } /** EXTERNAL **/ /// @param buyTokenAddress the address of token that the user should receive /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param feeAmount the amount of ETH that we will take as a fee function fillQuoteEthToToken( address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 feeAmount ) external payable nonReentrant onlyApprovedTarget(target) { // 1 - Get the initial balances uint256 initialTokenBalance = ERC20(buyTokenAddress).balanceOf( address(this) ); uint256 initialEthAmount = address(this).balance - msg.value; uint256 sellAmount = msg.value - feeAmount; // 2 - Call the encoded swap function call on the contract at `target`, // passing along any ETH attached to this function call to cover protocol fees // minus our fees, which are kept in this contract (bool success, bytes memory res) = target.call{value: sellAmount}( swapCallData ); // Get the revert message of the call and revert with it if the call failed if (!success) { assembly { let returndata_size := mload(res) revert(add(32, res), returndata_size) } } // 3 - Make sure we received the tokens { uint256 finalTokenBalance = ERC20(buyTokenAddress).balanceOf( address(this) ); require(initialTokenBalance < finalTokenBalance, "NO_TOKENS"); } // 4 - Send the received tokens back to the user SafeTransferLib.safeTransfer( ERC20(buyTokenAddress), msg.sender, ERC20(buyTokenAddress).balanceOf(address(this)) - initialTokenBalance ); // 5 - Return the remaining ETH to the user (if any) { uint256 finalEthAmount = address(this).balance - feeAmount; if (finalEthAmount > initialEthAmount) { SafeTransferLib.safeTransferETH( msg.sender, finalEthAmount - initialEthAmount ); } } } /// @param sellTokenAddress the address of token that the user is selling /// @param buyTokenAddress the address of token that the user should receive /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feeAmount the amount of the tokens to sell that we will take as a fee function fillQuoteTokenToToken( address sellTokenAddress, address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feeAmount ) external payable nonReentrant onlyApprovedTarget(target) { _fillQuoteTokenToToken( sellTokenAddress, buyTokenAddress, target, swapCallData, sellAmount, feeAmount ); } /// @dev method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction /// @param sellTokenAddress the address of token that the user is selling /// @param buyTokenAddress the address of token that the user should receive /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feeAmount the amount of the tokens to sell that we will take as a fee /// @param permitData struct containing the value, nonce, deadline, v, r and s values of the permit data function fillQuoteTokenToTokenWithPermit( address sellTokenAddress, address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feeAmount, PermitHelper.Permit calldata permitData ) external payable nonReentrant onlyApprovedTarget(target) { // 1 - Apply permit PermitHelper.permit( permitData, sellTokenAddress, msg.sender, address(this) ); //2 - Call fillQuoteTokenToToken _fillQuoteTokenToToken( sellTokenAddress, buyTokenAddress, target, swapCallData, sellAmount, feeAmount ); } /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output /// @param sellTokenAddress the address of token that the user is selling /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision) function fillQuoteTokenToEth( address sellTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feePercentageBasisPoints ) external payable nonReentrant onlyApprovedTarget(target) { _fillQuoteTokenToEth( sellTokenAddress, target, swapCallData, sellAmount, feePercentageBasisPoints ); } /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction /// @param sellTokenAddress the address of token that the user is selling /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision) /// @param permitData struct containing the amount, nonce, deadline, v, r and s values of the permit data function fillQuoteTokenToEthWithPermit( address sellTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feePercentageBasisPoints, PermitHelper.Permit calldata permitData ) external payable nonReentrant onlyApprovedTarget(target) { // 1 - Apply permit PermitHelper.permit( permitData, sellTokenAddress, msg.sender, address(this) ); // 2 - call fillQuoteTokenToEth _fillQuoteTokenToEth( sellTokenAddress, target, swapCallData, sellAmount, feePercentageBasisPoints ); } /** INTERNAL **/ /// @dev internal method that executes ERC20 to ETH token swaps with the ability to take a fee from the output function _fillQuoteTokenToEth( address sellTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feePercentageBasisPoints ) internal { // 1 - Get the initial ETH amount uint256 initialEthAmount = address(this).balance - msg.value; // 2 - Move the tokens to this contract // NOTE: This implicitly assumes that the the necessary approvals have been granted // from msg.sender to the BaseAggregator SafeTransferLib.safeTransferFrom( ERC20(sellTokenAddress), msg.sender, address(this), sellAmount ); // 3 - Approve the aggregator's contract to swap the tokens SafeTransferLib.safeApprove( ERC20(sellTokenAddress), target, sellAmount ); // 4 - Call the encoded swap function call on the contract at `target`, // passing along any ETH attached to this function call to cover protocol fees. (bool success, bytes memory res) = target.call{value: msg.value}( swapCallData ); // Get the revert message of the call and revert with it if the call failed if (!success) { assembly { let returndata_size := mload(res) revert(add(32, res), returndata_size) } } // 5 - Check that the tokens were fully spent during the swap uint256 allowance = ERC20(sellTokenAddress).allowance( address(this), target ); require(allowance == 0, "ALLOWANCE_NOT_ZERO"); // 6 - Subtract the fees and send the rest to the user // Fees will be held in this contract uint256 finalEthAmount = address(this).balance; uint256 ethDiff = finalEthAmount - initialEthAmount; require(ethDiff > 0, "NO_ETH_BACK"); if (feePercentageBasisPoints > 0) { uint256 fees = (ethDiff * feePercentageBasisPoints) / 1e18; uint256 amountMinusFees = ethDiff - fees; SafeTransferLib.safeTransferETH(msg.sender, amountMinusFees); // when there's no fee, 1inch sends the funds directly to the user // we check to prevent sending 0 ETH in that case } else if (ethDiff > 0) { SafeTransferLib.safeTransferETH(msg.sender, ethDiff); } } /// @dev internal method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input function _fillQuoteTokenToToken( address sellTokenAddress, address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feeAmount ) internal { // 1 - Get the initial output token balance uint256 initialOutputTokenAmount = ERC20(buyTokenAddress).balanceOf( address(this) ); // 2 - Move the tokens to this contract (which includes our fees) // NOTE: This implicitly assumes that the the necessary approvals have been granted // from msg.sender to the BaseAggregator SafeTransferLib.safeTransferFrom( ERC20(sellTokenAddress), msg.sender, address(this), sellAmount ); // 3 - Approve the aggregator's contract to swap the tokens if needed SafeTransferLib.safeApprove( ERC20(sellTokenAddress), target, sellAmount - feeAmount ); // 4 - Call the encoded swap function call on the contract at `target`, // passing along any ETH attached to this function call to cover protocol fees. (bool success, bytes memory res) = target.call{value: msg.value}( swapCallData ); // Get the revert message of the call and revert with it if the call failed if (!success) { assembly { let returndata_size := mload(res) revert(add(32, res), returndata_size) } } // 5 - Check that the tokens were fully spent during the swap uint256 allowance = ERC20(sellTokenAddress).allowance( address(this), target ); require(allowance == 0, "ALLOWANCE_NOT_ZERO"); // 6 - Make sure we received the tokens uint256 finalOutputTokenAmount = ERC20(buyTokenAddress).balanceOf( address(this) ); require(initialOutputTokenAmount < finalOutputTokenAmount, "NO_TOKENS"); // 7 - Send tokens to the user SafeTransferLib.safeTransfer( ERC20(buyTokenAddress), msg.sender, finalOutputTokenAmount - initialOutputTokenAmount ); } } // File contracts/RainbowRouter.sol /* ▐██▒ ███ ,╓, ▄▄ ,▄▄▄, .▄▄. ,╓, ▄▄▄ ██▌ ▄▄▄ ,▄▄▄, ,╓╓ ╓╓ ,╓ ██████ ███▀▀██⌐ ▐██⌐ ███▀▀███⌐ ████▀▀███ ╓██▀▀▀██▄`██▌ ▐██▌ ▐██ ███ ▄▄█████▌ ▐██⌐ ██▌ ▐██▌ ██▌ ║██⌐███ ▓██ ╙██▄█▌██▄██⌐ ██▌ ▐██▄▄███▌,▐██⌐ ██▌ ▐██▌ ███▓▄▄███ ╙██▄▄▄██▀ ║███¬╙███▌ ╙╙└ ╙╙▀╙─╙▀▀└"╙╙` ╙╙└ ╙╙" ╙╙`╙╙▀▀└ ╙╙▀▀╙` ╙╙└ ╙╙╙ _," _ _"""ⁿ=-, _ ⌠ _ __"=.__ ▐░...... _ _ "=._ ▐░░░░░░░░░░░░░░░░. "= _ ╚╩╩╩╩╩╩δφφφφ░░░░░░░░░░░ >__ ▐░░░░░░░░__ _ ╙╙╚╩φφ░░░░░░░ ^=_ ▐░░░░░░░░░░░░░░░,░ `╙╠φ░░░░░░░ ⁿ ▐░░░░░░░░░░░░░░░░░░░░._ `╚Åφ░░░░░ " _ ╚╠╠╠╠╠╠╠╬╬╬▒▒φ░░░░░░░░░░░░ ╙╠░░░░░ " ╚╝╝╝╝╝╝╝╬╬╬╠╢╬╠╬╠╬▒░░░░░░░░░░ "╚φ░░░░ ½_ ▐░░░░░░░░░░;░╙╙╝╬╠╬╠╠▒▒░░░░░░░░_ ╚φ░░░░ "_ ╚▒φφφ░░░░░░░░░░░░-╙╚╬╠╠╠╬▒░░░░░░░ `╠▒░░░░ , ╞╬╬╬╠╠╠╬╬╬╬▒φ▒░░░░░░░╙╚╬╬╠╬▒▒░░░░░ .╙╠░░░░ ≥ _▒░░░ΓΓ╙╙╙╚╩╬╠╬╠▒▒░░░░░░╙╬╬╠╬▒▒░░░░░' ╠▒░░░░ ≥ `╙ⁿⁿ≈≈σ╓░ '╙╙╚╬╠╬▒░░░░░░╙╬╬╠╬▒░░░░░ ╠▒░░░░ [ _╙Θ░ ░╙╠╠╬╬▒░░░░░╬╠╠╠▒▒░░░░ ╠▒░░░░ '_ _╙φ░'╙╠╠╬▒░░░░░╟╠╠╠▒░░░░░ _╠▒░░░ ░_ _`φ ░╚╬╠╠▒░░░░║╠╠╠▒░░░░░.`╠░░░░ [ _╚░⌡╚╠╬╬▒░░░░╠╠╠╬▒░░░░░ ╠▒░░░░ ░ _╙░⌡╚╠╠╬▒░░░"▒╠╠╬▒░░░░ ⌠╠░░░░ ⌡_ ╠ ░╠╠╠╬▒░░░║╠╬╠╬▒░░░ _╠▒░░░ Γ ▐░░░╠╠╠▒░░░╟╠╠╠╬▒░░░░ ╠▒░░░░ [ _░.░╠╠╠▒░░░▐╬╠╠╬▒░░░░[╠╬░░░░ │ _╙φ░╠╠╠╬▒░░▐╬╬╠╬╬▒░░░[╠╬░░░░ ░≥_ ____ ____ __ _______ ____ /$$$$$$ /$$$$$$ /$$ /$$__ $$ /$$__ $$ | $$ | $$ \__/ /$$ /$$ /$$ /$$$$$$ /$$$$$$ | $$ \ $$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$ | $$ | $$ | $$ |____ $$ /$$__ $$ | $$$$$$$$ /$$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ |____ $$|_ $$_/ /$$__ $$ /$$__ $$ \____ $$| $$ | $$ | $$ /$$$$$$$| $$ \ $$ | $$__ $$| $$ \ $$| $$ \ $$| $$ \__/| $$$$$$$$| $$ \ $$ /$$$$$$$ | $$ | $$ \ $$| $$ \__/ /$$ \ $$| $$ | $$ | $$ /$$__ $$| $$ | $$ | $$ | $$| $$ | $$| $$ | $$| $$ | $$_____/| $$ | $$ /$$__ $$ | $$ /$$| $$ | $$| $$ | $$$$$$/| $$$$$/$$$$/| $$$$$$$| $$$$$$$/ | $$ | $$| $$$$$$$| $$$$$$$| $$ | $$$$$$$| $$$$$$$| $$$$$$$ | $$$$/| $$$$$$/| $$ \______/ \_____/\___/ \_______/| $$____/ |__/ |__/ \____ $$ \____ $$|__/ \_______/ \____ $$ \_______/ \___/ \______/ |__/ | $$ /$$ \ $$ /$$ \ $$ /$$ \ $$ | $$ | $$$$$$/| $$$$$$/ | $$$$$$/ |__/ \______/ \______/ \______/ */ pragma solidity =0.8.11; /// @title Rainbow swap aggregator contract contract RainbowRouter is BaseAggregator { /// @dev The address that is the current owner of this contract address public owner; /// @dev Event emitted when the owner changes event OwnerChanged(address indexed newOwner, address indexed oldOwner); /// @dev Event emitted when a swap target gets added event SwapTargetAdded(address indexed target); /// @dev Event emitted when a swap target gets removed event SwapTargetRemoved(address indexed target); /// @dev Event emitted when token fees are withdrawn event TokenWithdrawn( address indexed token, address indexed target, uint256 amount ); /// @dev Event emitted when ETH fees are withdrawn event EthWithdrawn(address indexed target, uint256 amount); /// @dev modifier that ensures only the owner is allowed to call a specific method modifier onlyOwner() { require(msg.sender == owner, "ONLY_OWNER"); _; } constructor() { owner = msg.sender; status = 1; } /// @dev We don't want to accept any ETH, except refunds from aggregators /// or the owner (for testing purposes), which can also withdraw /// This is done by evaluating the value of status, which is set to 2 /// only during swaps due to the "nonReentrant" modifier receive() external payable { require(status == 2 || msg.sender == owner, "NO_RECEIVE"); } /// @dev method to add or remove swap targets from swapTargets /// This is required so we only approve "trusted" swap targets /// to transfer tokens out of this contract /// @param target address of the swap target to add /// @param add flag to add or remove the swap target function updateSwapTargets(address target, bool add) external onlyOwner { swapTargets[target] = add; if (add) { emit SwapTargetAdded(target); } else { emit SwapTargetRemoved(target); } } /// @dev method to withdraw ERC20 tokens (from the fees) /// @param token address of the token to withdraw /// @param to address that's receiving the tokens /// @param amount amount of tokens to withdraw function withdrawToken( address token, address to, uint256 amount ) external onlyOwner { require(to != address(0), "ZERO_ADDRESS"); SafeTransferLib.safeTransfer(ERC20(token), to, amount); emit TokenWithdrawn(token, to, amount); } /// @dev method to withdraw ETH (from the fees) /// @param to address that's receiving the ETH /// @param amount amount of ETH to withdraw function withdrawEth(address to, uint256 amount) external onlyOwner { require(to != address(0), "ZERO_ADDRESS"); SafeTransferLib.safeTransferETH(to, amount); emit EthWithdrawn(to, amount); } /// @dev Transfers ownership of the contract to a new account (`newOwner`). /// @param newOwner address of the new owner /// Can only be called by the current owner. function transferOwnership(address newOwner) external virtual onlyOwner { require(newOwner != address(0), "ZERO_ADDRESS"); require(newOwner != owner, "SAME_OWNER"); address previousOwner = owner; owner = newOwner; emit OwnerChanged(newOwner, previousOwner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenWithdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteEthToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"}],"name":"fillQuoteTokenToEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToEthWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteTokenToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToTokenWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"add","type":"bool"}],"name":"updateSwapTargets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50600280546001600160a01b031916331790556001600055611afd806100376000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033Deployed Bytecode
0x6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033
Deployed Bytecode Sourcemap
42640:3441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44053:6;;44063:1;44053:11;:34;;;-1:-1:-1;44082:5:0;;-1:-1:-1;;;;;44082:5:0;44068:10;:19;44053:34;44045:57;;;;-1:-1:-1;;;44045:57:0;;216:2:1;44045:57:0;;;198:21:1;255:2;235:18;;;228:30;294:12;274:18;;;267:40;324:18;;44045:57:0;;;;;;;;;42640:3441;;;;;44903:293;;;;;;;;;;-1:-1:-1;44903:293:0;;;;;:::i;:::-;;:::i;45358:222::-;;;;;;;;;;-1:-1:-1;45358:222:0;;;;;:::i;:::-;;:::i;23698:2054::-;;;;;;:::i;:::-;;:::i;26255:502::-;;;;;;:::i;:::-;;:::i;22605:43::-;;;;;;;;;;-1:-1:-1;22605:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3807:14:1;;3800:22;3782:41;;3770:2;3755:18;22605:43:0;;;;;;;;42757:20;;;;;;;;;;-1:-1:-1;42757:20:0;;;;-1:-1:-1;;;;;42757:20:0;;;;;;-1:-1:-1;;;;;3998:55:1;;;3980:74;;3968:2;3953:18;42757:20:0;3834:226:1;44418:253:0;;;;;;;;;;-1:-1:-1;44418:253:0;;;;;:::i;:::-;;:::i;28992:464::-;;;;;;:::i;:::-;;:::i;27591:785::-;;;;;;:::i;:::-;;:::i;30296:746::-;;;;;;:::i;:::-;;:::i;45769:309::-;;;;;;;;;;-1:-1:-1;45769:309:0;;;;;:::i;:::-;;:::i;44903:293::-;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;45041:16:0;::::1;45033:41;;;::::0;-1:-1:-1;;;45033:41:0;;8149:2:1;45033:41:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:42;8259:18;;45033:41:0::1;7947:336:1::0;45033:41:0::1;45085:54;45120:5;45128:2;45132:6;45085:28;:54::i;:::-;45177:2;-1:-1:-1::0;;;;;45155:33:0::1;45170:5;-1:-1:-1::0;;;;;45155:33:0::1;;45181:6;45155:33;;;;8434:25:1::0;;8422:2;8407:18;;8288:177;45155:33:0::1;;;;;;;;44903:293:::0;;;:::o;45358:222::-;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;45445:16:0;::::1;45437:41;;;::::0;-1:-1:-1;;;45437:41:0;;8149:2:1;45437:41:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:42;8259:18;;45437:41:0::1;7947:336:1::0;45437:41:0::1;45489:43;45521:2;45525:6;45489:31;:43::i;:::-;45561:2;-1:-1:-1::0;;;;;45548:24:0::1;;45565:6;45548:24;;;;8434:25:1::0;;8422:2;8407:18;;8288:177;45548:24:0::1;;;;;;;;45358:222:::0;;:::o;23698:2054::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;23916:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;24006:71:::2;::::0;-1:-1:-1;;;24006:71:0;;24061:4:::2;24006:71;::::0;::::2;3980:74:1::0;23976:27:0::2;::::0;-1:-1:-1;;;;;24006:32:0;::::2;::::0;::::2;::::0;3953:18:1;;24006:71:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23976:101:::0;-1:-1:-1;24088:24:0::2;24115:33;24139:9;24115:21;:33;:::i;:::-;24088:60:::0;-1:-1:-1;24159:18:0::2;24180:21;24192:9:::0;24180::::2;:21;:::i;:::-;24159:42;;24444:12;24458:16:::0;24478:6:::2;-1:-1:-1::0;;;;;24478:11:0::2;24497:10;24523:12;;24478:68;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24443:103;;;;24649:7;24644:171;;24730:3;24724:10;24773:15;24767:3;24763:2;24759:12;24752:37;24644:171;24919:79;::::0;-1:-1:-1;;;24919:79:0;;24978:4:::2;24919:79;::::0;::::2;3980:74:1::0;24891:25:0::2;::::0;-1:-1:-1;;;;;24919:32:0;::::2;::::0;::::2;::::0;3953:18:1;;24919:79:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24891:107;;25043:17;25021:19;:39;25013:61;;;::::0;-1:-1:-1;;;25013:61:0;;10142:2:1;25013:61:0::2;::::0;::::2;10124:21:1::0;10181:1;10161:18;;;10154:29;-1:-1:-1;;;10199:18:1;;;10192:39;10248:18;;25013:61:0::2;9940:332:1::0;25013:61:0::2;-1:-1:-1::0;25261:47:0::2;::::0;-1:-1:-1;;;25261:47:0;;25302:4:::2;25261:47;::::0;::::2;3980:74:1::0;25156:202:0::2;::::0;25205:15;;25236:10:::2;::::0;25328:19;;-1:-1:-1;;;;;25261:32:0;::::2;::::0;::::2;::::0;3953:18:1;;25261:47:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:86;;;;:::i;:::-;25156:28;:202::i;:::-;25448:22;25473:33;25497:9:::0;25473:21:::2;:33;:::i;:::-;25448:58;;25542:16;25525:14;:33;25521:213;;;25579:139;25633:10;25666:33;25683:16:::0;25666:14;:33:::2;:::i;:::-;25579:31;:139::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;;;;;;23698:2054:0:o;26255:502::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;26539:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;26558:191:::2;26595:16;26626:15;26656:6;26677:12;;26704:10;26729:9;26558:22;:191::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;;26255:502:0:o;44418:253::-;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;44501:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;:25;;-1:-1:-1;;44501:25:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;44537:127:::1;;44566:23;::::0;-1:-1:-1;;;;;44566:23:0;::::1;::::0;::::1;::::0;;;::::1;44418:253:::0;;:::o;44537:127::-:1;44627:25;::::0;-1:-1:-1;;;;;44627:25:0;::::1;::::0;::::1;::::0;;;::::1;44418:253:::0;;:::o;28992:464::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;29255:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;29274:174:::2;29309:16;29340:6;29361:12;;29388:10;29413:24;29274:20;:174::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;28992:464:0:o;27591:785::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;27935:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;27983:139:::2;;;::::0;;::::2;::::0;::::2;28017:10:::0;27983:139:::2;:::i;:::-;28042:16;28073:10;28106:4;27983:19;:139::i;:::-;28177:191;28214:16;28245:15;28275:6;28296:12;;28323:10;28348:9;28177:22;:191::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;;;27591:785:0:o;30296:746::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;30619:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;30667:139:::2;;;::::0;;::::2;::::0;::::2;30701:10:::0;30667:139:::2;:::i;:::-;30726:16;30757:10;30790:4;30667:19;:139::i;:::-;30860:174;30895:16;30926:6;30947:12;;30974:10;30999:24;30860:20;:174::i;45769:309::-:0;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;45860:22:0;::::1;45852:47;;;::::0;-1:-1:-1;;;45852:47:0;;8149:2:1;45852:47:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:42;8259:18;;45852:47:0::1;7947:336:1::0;45852:47:0::1;45930:5;::::0;-1:-1:-1;;;;;45918:17:0;;::::1;45930:5:::0;::::1;45918:17;;45910:40;;;::::0;-1:-1:-1;;;45910:40:0;;11646:2:1;45910:40:0::1;::::0;::::1;11628:21:1::0;11685:2;11665:18;;;11658:30;11724:12;11704:18;;;11697:40;11754:18;;45910:40:0::1;11444:334:1::0;45910:40:0::1;45985:5;::::0;;-1:-1:-1;;;;;46001:16:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;46033:37:::1;::::0;45985:5;::::1;::::0;;;46033:37:::1;::::0;45961:21:::1;::::0;46033:37:::1;45841:237;45769:309:::0;:::o;9338:1065::-;9455:15;9589:4;9583:11;9709:66;9690:17;9683:93;-1:-1:-1;;;;;9865:2:0;9861:51;9857:1;9838:17;9834:25;9827:86;10000:6;9995:2;9976:17;9972:26;9965:42;10298:1;10295;10291:2;10272:17;10269:1;10262:5;10255;10250:50;10236:64;;;10331:44;10364:10;10331:32;:44::i;:::-;10323:72;;;;-1:-1:-1;;;10323:72:0;;11985:2:1;10323:72:0;;;11967:21:1;12024:2;12004:18;;;11997:30;12063:17;12043:18;;;12036:45;12098:18;;10323:72:0;11783:339:1;10323:72:0;9444:959;9338:1065;;;:::o;7578:314::-;7651:15;7817:1;7814;7811;7808;7800:6;7796:2;7789:5;7784:35;7770:49;;7850:10;7842:42;;;;-1:-1:-1;;;7842:42:0;;12329:2:1;7842:42:0;;;12311:21:1;12368:2;12348:18;;;12341:30;12407:21;12387:18;;;12380:49;12446:18;;7842:42:0;12127:343:1;7842:42:0;7640:252;7578:314;;:::o;33821:2311::-;34165:71;;-1:-1:-1;;;34165:71:0;;34220:4;34165:71;;;3980:74:1;34130:32:0;;-1:-1:-1;;;;;34165:32:0;;;;;3953:18:1;;34165:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34130:106;;34467:159;34520:16;34552:10;34585:4;34605:10;34467:32;:159::i;:::-;34718:134;34766:16;34798:6;34819:22;34832:9;34819:10;:22;:::i;:::-;34718:27;:134::i;:::-;35036:12;35050:16;35070:6;-1:-1:-1;;;;;35070:11:0;35089:9;35114:12;;35070:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35035:102;;;;35240:7;35235:171;;35321:3;35315:10;35364:15;35358:3;35354:2;35350:12;35343:37;35235:171;35509:93;;-1:-1:-1;;;35509:93:0;;35565:4;35509:93;;;12718:34:1;-1:-1:-1;;;;;12788:15:1;;;12768:18;;;12761:43;35489:17:0;;35509:33;;;;;;12630:18:1;;35509:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35489:113;-1:-1:-1;35621:14:0;;35613:45;;;;-1:-1:-1;;;35613:45:0;;13017:2:1;35613:45:0;;;12999:21:1;13056:2;13036:18;;;13029:30;13095:20;13075:18;;;13068:48;13133:18;;35613:45:0;12815:342:1;35613:45:0;35753:71;;-1:-1:-1;;;35753:71:0;;35808:4;35753:71;;;3980:74:1;35720:30:0;;-1:-1:-1;;;;;35753:32:0;;;;;3953:18:1;;35753:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35720:104;;35870:22;35843:24;:49;35835:71;;;;-1:-1:-1;;;35835:71:0;;10142:2:1;35835:71:0;;;10124:21:1;10181:1;10161:18;;;10154:29;-1:-1:-1;;;10199:18:1;;;10192:39;10248:18;;35835:71:0;9940:332:1;35835:71:0;35959:165;36008:15;36039:10;36064:49;36089:24;36064:22;:49;:::i;35959:165::-;34066:2066;;;;;33821:2311;;;;;;;:::o;31190:2506::-;31468:24;31495:33;31519:9;31495:21;:33;:::i;:::-;31468:60;;31733:159;31786:16;31818:10;31851:4;31871:10;31733:32;:159::i;:::-;31974:122;32022:16;32054:6;32075:10;31974:27;:122::i;:::-;32280:12;32294:16;32314:6;-1:-1:-1;;;;;32314:11:0;32333:9;32358:12;;32314:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32279:102;;;;32484:7;32479:171;;32565:3;32559:10;32608:15;32602:3;32598:2;32594:12;32587:37;32479:171;32753:93;;-1:-1:-1;;;32753:93:0;;32809:4;32753:93;;;12718:34:1;-1:-1:-1;;;;;12788:15:1;;;12768:18;;;12761:43;32733:17:0;;32753:33;;;;;;12630:18:1;;32753:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32733:113;-1:-1:-1;32865:14:0;;32857:45;;;;-1:-1:-1;;;32857:45:0;;13017:2:1;32857:45:0;;;12999:21:1;13056:2;13036:18;;;13029:30;13095:20;13075:18;;;13068:48;13133:18;;32857:45:0;12815:342:1;32857:45:0;33051:21;33026:22;33101:33;33118:16;33051:21;33101:33;:::i;:::-;33083:51;;33165:1;33155:7;:11;33147:35;;;;-1:-1:-1;;;33147:35:0;;13364:2:1;33147:35:0;;;13346:21:1;13403:2;13383:18;;;13376:30;13442:13;13422:18;;;13415:41;13473:18;;33147:35:0;13162:335:1;33147:35:0;33199:28;;33195:494;;33244:12;33298:4;33260:34;33270:24;33260:7;:34;:::i;:::-;33259:43;;;;:::i;:::-;33244:58;-1:-1:-1;33317:23:0;33343:14;33244:58;33343:7;:14;:::i;:::-;33317:40;;33372:60;33404:10;33416:15;33372:31;:60::i;:::-;33229:358;;33195:494;;;33597:11;;33593:96;;33625:52;33657:10;33669:7;33625:31;:52::i;21523:801::-;21687:10;:27;;;21683:634;;;21826:16;;;;21861:19;;;;;21922:12;;;;21953;;;;21984;;;;21731:280;;;;;-1:-1:-1;;;;;14366:15:1;;;21731:280:0;;;14348:34:1;14418:15;;;14398:18;;;14391:43;14450:18;;;14443:34;;;;14493:18;;;14486:34;;;;21899:4:0;14536:19:1;;;14529:51;14629:4;14617:17;;;14596:19;;;14589:46;14651:19;;;14644:35;14695:19;;;14688:35;;;;21731:25:0;;;;;;14259:19:1;;21731:280:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21683:634;;;22143:16;;22178:19;;;;;22216:12;;;;22247;;;;22278;;;;22044:261;;;;;-1:-1:-1;;;;;15124:15:1;;;22044:261:0;;;15106:34:1;15176:15;;;15156:18;;;15149:43;15208:18;;;15201:34;;;;15251:18;;;15244:34;;;;15327:4;15315:17;;;15294:19;;;15287:46;15349:19;;;15342:35;15393:19;;;15386:35;;;;22044:29:0;;;;;;15017:19:1;;22044:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21523:801;;;;:::o;11673:1072::-;11754:12;11879:16;11959:10;11949:244;;12068:14;12065:1;12062;12047:36;12163:14;12160:1;12153:25;11949:244;12216:14;12249:2;12244:248;;;;12506:99;;;;12711:1;12700:12;;12209:518;;12244:248;12346:14;12343:1;12340;12325:36;12473:1;12467:8;12460:16;12453:24;12442:35;;12244:248;;12506:99;12589:1;12578:12;;12209:518;;;11673:1072;;;:::o;8088:1242::-;8232:15;8366:4;8360:11;8486:66;8467:17;8460:93;-1:-1:-1;;;;;8642:4:0;8638:53;8634:1;8615:17;8611:25;8604:88;-1:-1:-1;;;;;8785:2:0;8781:51;8776:2;8757:17;8753:26;8746:87;8920:6;8915:2;8896:17;8892:26;8885:42;9220:1;9217;9212:3;9193:17;9190:1;9183:5;9176;9171:51;9157:65;;;9253:44;9286:10;9253:32;:44::i;:::-;9245:77;;;;-1:-1:-1;;;9245:77:0;;15634:2:1;9245:77:0;;;15616:21:1;15673:2;15653:18;;;15646:30;15712:22;15692:18;;;15685:50;15752:18;;9245:77:0;15432:344:1;9245:77:0;8221:1109;8088:1242;;;;:::o;10411:1063::-;10527:15;10661:4;10655:11;10781:66;10762:17;10755:93;-1:-1:-1;;;;;10937:2:0;10933:51;10929:1;10910:17;10906:25;10899:86;11072:6;11067:2;11048:17;11044:26;11037:42;11370:1;11367;11363:2;11344:17;11341:1;11334:5;11327;11322:50;11308:64;;;11403:44;11436:10;11403:32;:44::i;:::-;11395:71;;;;-1:-1:-1;;;11395:71:0;;15983:2:1;11395:71:0;;;15965:21:1;16022:2;16002:18;;;15995:30;16061:16;16041:18;;;16034:44;16095:18;;11395:71:0;15781:338:1;353:154;-1:-1:-1;;;;;432:5:1;428:54;421:5;418:65;408:93;;497:1;494;487:12;408:93;353:154;:::o;512:456::-;589:6;597;605;658:2;646:9;637:7;633:23;629:32;626:52;;;674:1;671;664:12;626:52;713:9;700:23;732:31;757:5;732:31;:::i;:::-;782:5;-1:-1:-1;839:2:1;824:18;;811:32;852:33;811:32;852:33;:::i;:::-;512:456;;904:7;;-1:-1:-1;;;958:2:1;943:18;;;;930:32;;512:456::o;973:315::-;1041:6;1049;1102:2;1090:9;1081:7;1077:23;1073:32;1070:52;;;1118:1;1115;1108:12;1070:52;1157:9;1144:23;1176:31;1201:5;1176:31;:::i;:::-;1226:5;1278:2;1263:18;;;;1250:32;;-1:-1:-1;;;973:315:1:o;1293:347::-;1344:8;1354:6;1408:3;1401:4;1393:6;1389:17;1385:27;1375:55;;1426:1;1423;1416:12;1375:55;-1:-1:-1;1449:20:1;;1492:18;1481:30;;1478:50;;;1524:1;1521;1514:12;1478:50;1561:4;1553:6;1549:17;1537:29;;1613:3;1606:4;1597:6;1589;1585:19;1581:30;1578:39;1575:59;;;1630:1;1627;1620:12;1575:59;1293:347;;;;;:::o;1645:762::-;1750:6;1758;1766;1774;1782;1835:3;1823:9;1814:7;1810:23;1806:33;1803:53;;;1852:1;1849;1842:12;1803:53;1891:9;1878:23;1910:31;1935:5;1910:31;:::i;:::-;1960:5;-1:-1:-1;2017:2:1;2002:18;;1989:32;2030:33;1989:32;2030:33;:::i;:::-;2082:7;-1:-1:-1;2140:2:1;2125:18;;2112:32;2167:18;2156:30;;2153:50;;;2199:1;2196;2189:12;2153:50;2238:58;2288:7;2279:6;2268:9;2264:22;2238:58;:::i;:::-;1645:762;;;;-1:-1:-1;2315:8:1;2397:2;2382:18;2369:32;;1645:762;-1:-1:-1;;;;1645:762:1:o;2412:973::-;2535:6;2543;2551;2559;2567;2575;2583;2636:3;2624:9;2615:7;2611:23;2607:33;2604:53;;;2653:1;2650;2643:12;2604:53;2692:9;2679:23;2711:31;2736:5;2711:31;:::i;:::-;2761:5;-1:-1:-1;2818:2:1;2803:18;;2790:32;2831:33;2790:32;2831:33;:::i;:::-;2883:7;-1:-1:-1;2942:2:1;2927:18;;2914:32;2955:33;2914:32;2955:33;:::i;:::-;3007:7;-1:-1:-1;3065:2:1;3050:18;;3037:32;3092:18;3081:30;;3078:50;;;3124:1;3121;3114:12;3078:50;3163:58;3213:7;3204:6;3193:9;3189:22;3163:58;:::i;:::-;2412:973;;;;-1:-1:-1;2412:973:1;;3240:8;;3137:84;3322:3;3307:19;;3294:33;;3374:3;3359:19;3346:33;;-1:-1:-1;2412:973:1;-1:-1:-1;;;;2412:973:1:o;3390:247::-;3449:6;3502:2;3490:9;3481:7;3477:23;3473:32;3470:52;;;3518:1;3515;3508:12;3470:52;3557:9;3544:23;3576:31;3601:5;3576:31;:::i;:::-;3626:5;3390:247;-1:-1:-1;;;3390:247:1:o;4065:160::-;4130:20;;4186:13;;4179:21;4169:32;;4159:60;;4215:1;4212;4205:12;4159:60;4065:160;;;:::o;4230:315::-;4295:6;4303;4356:2;4344:9;4335:7;4331:23;4327:32;4324:52;;;4372:1;4369;4362:12;4324:52;4411:9;4398:23;4430:31;4455:5;4430:31;:::i;:::-;4480:5;-1:-1:-1;4504:35:1;4535:2;4520:18;;4504:35;:::i;:::-;4494:45;;4230:315;;;;;:::o;4550:831::-;4664:6;4672;4680;4688;4696;4704;4757:3;4745:9;4736:7;4732:23;4728:33;4725:53;;;4774:1;4771;4764:12;4725:53;4813:9;4800:23;4832:31;4857:5;4832:31;:::i;:::-;4882:5;-1:-1:-1;4939:2:1;4924:18;;4911:32;4952:33;4911:32;4952:33;:::i;:::-;5004:7;-1:-1:-1;5062:2:1;5047:18;;5034:32;5089:18;5078:30;;5075:50;;;5121:1;5118;5111:12;5075:50;5160:58;5210:7;5201:6;5190:9;5186:22;5160:58;:::i;:::-;4550:831;;;;-1:-1:-1;5237:8:1;5319:2;5304:18;;5291:32;;5370:3;5355:19;;;5342:33;;-1:-1:-1;4550:831:1;-1:-1:-1;;;;4550:831:1:o;5386:155::-;5445:5;5490:3;5481:6;5476:3;5472:16;5468:26;5465:46;;;5507:1;5504;5497:12;5465:46;-1:-1:-1;5529:6:1;5386:155;-1:-1:-1;5386:155:1:o;5546:1097::-;5703:6;5711;5719;5727;5735;5743;5751;5759;5812:3;5800:9;5791:7;5787:23;5783:33;5780:53;;;5829:1;5826;5819:12;5780:53;5868:9;5855:23;5887:31;5912:5;5887:31;:::i;:::-;5937:5;-1:-1:-1;5994:2:1;5979:18;;5966:32;6007:33;5966:32;6007:33;:::i;:::-;6059:7;-1:-1:-1;6118:2:1;6103:18;;6090:32;6131:33;6090:32;6131:33;:::i;:::-;6183:7;-1:-1:-1;6241:2:1;6226:18;;6213:32;6268:18;6257:30;;6254:50;;;6300:1;6297;6290:12;6254:50;6339:58;6389:7;6380:6;6369:9;6365:22;6339:58;:::i;:::-;6416:8;;-1:-1:-1;6313:84:1;-1:-1:-1;;6498:3:1;6483:19;;6470:33;;-1:-1:-1;6550:3:1;6535:19;;6522:33;;-1:-1:-1;6574:63:1;6629:7;6623:3;6608:19;;6574:63;:::i;:::-;6564:73;;5546:1097;;;;;;;;;;;:::o;6648:955::-;6796:6;6804;6812;6820;6828;6836;6844;6897:3;6885:9;6876:7;6872:23;6868:33;6865:53;;;6914:1;6911;6904:12;6865:53;6953:9;6940:23;6972:31;6997:5;6972:31;:::i;:::-;7022:5;-1:-1:-1;7079:2:1;7064:18;;7051:32;7092:33;7051:32;7092:33;:::i;:::-;7144:7;-1:-1:-1;7202:2:1;7187:18;;7174:32;7229:18;7218:30;;7215:50;;;7261:1;7258;7251:12;7215:50;7300:58;7350:7;7341:6;7330:9;7326:22;7300:58;:::i;:::-;7377:8;;-1:-1:-1;7274:84:1;-1:-1:-1;;7459:2:1;7444:18;;7431:32;;-1:-1:-1;7510:3:1;7495:19;;7482:33;;-1:-1:-1;7534:63:1;7589:7;7583:3;7568:19;;7534:63;:::i;:::-;7524:73;;6648:955;;;;;;;;;;:::o;9156:184::-;9226:6;9279:2;9267:9;9258:7;9254:23;9250:32;9247:52;;;9295:1;9292;9285:12;9247:52;-1:-1:-1;9318:16:1;;9156:184;-1:-1:-1;9156:184:1:o;9345:::-;-1:-1:-1;;;9394:1:1;9387:88;9494:4;9491:1;9484:15;9518:4;9515:1;9508:15;9534:125;9574:4;9602:1;9599;9596:8;9593:34;;;9607:18;;:::i;:::-;-1:-1:-1;9644:9:1;;9534:125::o;9664:271::-;9847:6;9839;9834:3;9821:33;9803:3;9873:16;;9898:13;;;9873:16;9664:271;-1:-1:-1;9664:271:1:o;10277:156::-;10343:20;;10403:4;10392:16;;10382:27;;10372:55;;10423:1;10420;10413:12;10438:1001;10520:6;10573:3;10561:9;10552:7;10548:23;10544:33;10541:53;;;10590:1;10587;10580:12;10541:53;10623:2;10617:9;10665:3;10657:6;10653:16;10735:6;10723:10;10720:22;10699:18;10687:10;10684:34;10681:62;10678:242;;;-1:-1:-1;;;10773:1:1;10766:88;10877:4;10874:1;10867:15;10905:4;10902:1;10895:15;10678:242;10940:10;10936:2;10929:22;;10988:9;10975:23;10967:6;10960:39;11060:2;11049:9;11045:18;11032:32;11027:2;11019:6;11015:15;11008:57;11126:2;11115:9;11111:18;11098:32;11093:2;11085:6;11081:15;11074:57;11164:35;11195:2;11184:9;11180:18;11164:35;:::i;:::-;11159:2;11151:6;11147:15;11140:60;11234:37;11266:3;11255:9;11251:19;11234:37;:::i;:::-;11228:3;11220:6;11216:16;11209:63;11334:3;11323:9;11319:19;11306:33;11300:3;11292:6;11288:16;11281:59;11402:3;11391:9;11387:19;11374:33;11368:3;11360:6;11356:16;11349:59;11427:6;11417:16;;;10438:1001;;;;:::o;13502:168::-;13542:7;13608:1;13604;13600:6;13596:14;13593:1;13590:21;13585:1;13578:9;13571:17;13567:45;13564:71;;;13615:18;;:::i;:::-;-1:-1:-1;13655:9:1;;13502:168::o;13675:274::-;13715:1;13741;13731:189;;-1:-1:-1;;;13773:1:1;13766:88;13877:4;13874:1;13867:15;13905:4;13902:1;13895:15;13731:189;-1:-1:-1;13934:9:1;;13675:274::o
Swarm Source
ipfs://9870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf877
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value ETH 1.21% $43.93 23.2877 $1,023.03 ETH 1.11% $3,920.4 0.239 $936.98 ETH 1.04% <$0.000001 5,729,687,798.023 $878.17 ETH 0.99% $0.137542 6,089.7835 $837.6 ETH 0.88% $5.11 145.4264 $743.13 ETH 0.85% $1 719.9324 $719.93 ETH 0.84% $14.96 47.5591 $711.48 ETH 0.74% $1.85 339.4775 $628.03 ETH 0.71% $4,139.98 0.1448 $599.44 ETH 0.69% $0.484744 1,199.4561 $581.43 ETH 0.68% $29.3 19.6728 $576.41 ETH 0.63% $0.057211 9,408.2337 $538.25 ETH 0.63% $1.22 440.672 $538.04 ETH 0.63% $6.66 80.1464 $533.78 ETH 0.62% $0.000024 22,208,875.1636 $525.02 ETH 0.62% $0.258077 2,032.55 $524.55 ETH 0.59% $0.787208 640.3371 $504.08 ETH 0.59% $3,914.05 0.1277 $499.85 ETH 0.58% $0.057633 8,514.4422 $490.72 ETH 0.58% $0.682175 719.1367 $490.58 ETH 0.57% $3.44 140 $481.6 ETH 0.53% $0.67012 664.5435 $445.32 ETH 0.49% $1.05 396.1238 $414.74 ETH 0.46% $1.61 244.7126 $393.99 ETH 0.43% $4.48 80.7746 $361.87 ETH 0.42% $2,093.83 0.17 $355.9 ETH 0.42% $0.112432 3,151.1469 $354.29 ETH 0.41% $0.061778 5,612.7588 $346.74 ETH 0.40% $0.000566 597,549.5903 $338.23 ETH 0.39% $0.329644 1,013.513 $334.1 ETH 0.39% $84.84 3.8546 $327.03 ETH 0.39% $0.004211 77,624.1366 $326.89 ETH 0.39% $41.38 7.8905 $326.51 ETH 0.36% $6.09 49.9705 $304.32 ETH 0.35% $9.37 31.8486 $298.42 ETH 0.35% $165.05 1.7875 $295.02 ETH 0.34% $0.054727 5,310.8821 $290.65 ETH 0.33% $0.014671 18,924.4901 $277.64 ETH 0.33% $0.000023 12,278,225.1334 $277.02 ETH 0.32% $0.000119 2,295,550.4757 $272.34 ETH 0.32% $0.027728 9,759.8421 $270.62 ETH 0.31% $4.24 61.4028 $260.35 ETH 0.30% $0.148502 1,724.4714 $256.09 ETH 0.30% $0.100393 2,539.2362 $254.92 ETH 0.29% $0.036138 6,863.6413 $248.04 ETH 0.29% $0.001376 178,378.58 $245.43 ETH 0.28% $0.060028 4,003.915 $240.35 ETH 0.27% $8.43 27.381 $230.82 ETH 0.27% $0.683811 336.8788 $230.36 ETH 0.27% $0.451393 507.4897 $229.08 ETH 0.26% $0.99507 224.8479 $223.74 ETH 0.26% $6.98 31.1497 $217.42 ETH 0.26% $0.00021 1,030,957.3616 $216.99 ETH 0.25% $0.005484 38,094.8182 $208.93 ETH 0.25% $1.84 113.3919 $208.64 ETH 0.25% $0.021943 9,490.3884 $208.25 ETH 0.24% $0.102705 1,990.6114 $204.45 ETH 0.24% $0.337956 599.1552 $202.49 ETH 0.24% $0.009875 20,266.329 $200.12 ETH 0.21% $2.8 64.2041 $179.77 ETH 0.21% $0.001669 106,967.0176 $178.56 ETH 0.21% $0.007209 24,717.5802 $178.2 ETH 0.21% $40.48 4.39 $177.71 ETH 0.21% $0.31719 557.8189 $176.93 ETH 0.20% $100,057 0.00173289 $173.39 ETH 0.20% $6.63 24.9539 $165.44 ETH 0.19% $0.153297 1,072.4531 $164.4 ETH 0.18% $0.001833 82,127.7637 $150.58 ETH 0.18% $0.298078 497.6559 $148.34 ETH 0.17% $0.002674 54,964.6146 $146.95 ETH 0.17% $3,914.05 0.0374 $146.29 ETH 0.17% $11.16 13.0509 $145.63 ETH 0.17% $0.17758 814.3841 $144.62 ETH 0.17% $0.155805 927.2491 $144.47 ETH 0.17% $0.000374 385,603.7733 $144.08 ETH 0.17% $46.67 3.0527 $142.48 ETH 0.17% $54.41 2.5837 $140.58 ETH 0.17% $2.27 61.8364 $140.37 ETH 0.16% $3.97 35.1874 $139.69 ETH 0.16% $32.9 4.2401 $139.5 ETH 0.16% $0.157959 880.3323 $139.06 ETH 0.16% $0.38034 360.4177 $137.08 ETH 0.16% $2.08 65.7434 $136.64 ETH 0.16% $0.000113 1,203,486.4991 $136.5 ETH 0.16% $4,403.23 0.0307 $135.36 ETH 0.16% $2.32 58.2272 $135.09 ETH 0.16% $0.051485 2,616.895 $134.73 ETH 0.15% $4.11 31.6873 $130.15 ETH 0.15% $1.07 119.6977 $127.96 ETH 0.15% $0.000834 151,626.7272 $126.41 ETH 0.14% $1 119.6898 $119.81 ETH 0.14% $0.501834 238.2716 $119.57 ETH 0.14% $0.038296 3,085.6486 $118.17 ETH 0.14% $0.774333 148.7541 $115.19 ETH 0.14% $3.24 35.5316 $115.12 ETH 0.13% $0.059398 1,926.1267 $114.41 ETH 0.13% $0.000007 16,204,046.4402 $114.24 ETH 0.13% <$0.000001 9,392,523,220.4146 $114.08 ETH 0.13% $0.001644 69,208.4875 $113.79 ETH 0.13% $77.98 1.439 $112.22 ETH 0.13% $6.38 16.981 $108.34 ETH 0.13% $12.8 8.4466 $108.12 ETH 0.13% $0.000175 611,474.0651 $107.19 ETH 0.12% $1 105.63 $105.63 ETH 0.12% $5,575.45 0.0187 $104.51 ETH 0.12% $0.415807 246.5833 $102.53 ETH 0.12% <$0.000001 54,661,125,756.009 $102.22 ETH 0.12% $0.02421 4,190.3572 $101.45 ETH 0.12% $0.014329 7,076.9271 $101.41 ETH 0.12% $666.52 0.1507 $100.44 ETH 0.12% $3.08 32.606 $100.43 ETH 0.12% $0.051152 1,944.9824 $99.49 ETH 0.12% $0.031234 3,175.4235 $99.18 ETH 0.12% $0.646571 153.1909 $99.05 ETH 0.12% $3,999.05 0.0246 $98.49 ETH 0.12% $1.98 49.3731 $97.76 ETH 0.12% $2.2 44.3582 $97.59 ETH 0.11% $4,256.58 0.0225 $95.59 ETH 0.11% $1.04 91.8844 $95.47 ETH 0.11% $0.944539 99.1015 $93.61 ETH 0.11% $3.89 23.5536 $91.62 ETH 0.11% $2.23 40.6171 $90.58 ETH 0.10% $1.99 44.294 $88.14 ETH 0.10% $0.702204 123.2419 $86.54 ETH 0.10% $0.386714 223.2782 $86.34 ETH 0.10% $709.71 0.1215 $86.21 ETH 0.10% $0.100592 835.7669 $84.07 ETH 0.10% $0.140725 595.6903 $83.83 ETH 0.10% <$0.000001 5,776,584,157.1907 $81.09 ETH 0.10% $57.71 1.4008 $80.84 ETH 0.09% $0.045227 1,779.1894 $80.47 ETH 0.09% $0.626344 127.8833 $80.1 ETH 0.09% $4,219.34 0.019 $80.03 ETH 0.09% $0.000028 2,843,599.5691 $79.65 ETH 0.09% $0.869239 91.5206 $79.55 ETH 0.09% $0.000196 405,933.9541 $79.38 ETH 0.09% $0.436754 179.919 $78.58 ETH 0.09% $0.770485 100.5474 $77.47 ETH 0.09% $0.359278 215.2976 $77.35 ETH 0.09% $0.506563 151.5644 $76.78 ETH 0.09% $1.61 46.92 $75.54 ETH 0.09% $1.64 45.8246 $75.27 ETH 0.09% $21.16 3.4745 $73.52 ETH 0.09% $0.163752 440.4965 $72.13 ETH 0.08% $2.41 29.8754 $72 ETH 0.08% $0.000987 72,674.8363 $71.75 ETH 0.08% $0.6391 111.4068 $71.2 ETH 0.08% $0.006589 10,805.6588 $71.2 ETH 0.08% $0.068796 1,024.8002 $70.5 ETH 0.08% $0.000241 292,906.1057 $70.46 ETH 0.08% $2.4 29.1707 $70.01 ETH 0.08% $0.027873 2,452.6451 $68.36 ETH 0.08% $1.79 38.0418 $68.09 ETH 0.08% <$0.000001 265,078,561.703 $68.06 ETH 0.08% $0.000049 1,383,129.8813 $67.91 ETH 0.08% <$0.000001 3,263,345,570.3515 $67.74 ETH 0.08% <$0.000001 4,467,158,276.8727 $66.21 ETH 0.08% <$0.000001 285,190,437.4095 $65.57 ETH 0.08% $0.014864 4,358.5888 $64.78 ETH 0.08% $0.000001 101,683,104.2921 $64.24 ETH 0.08% $0.037492 1,707.9668 $64.04 ETH 0.07% $23.46 2.7018 $63.38 ETH 0.07% $0.052603 1,203.8452 $63.33 ETH 0.07% $0.000003 19,654,041.8014 $62.61 ETH 0.07% $0.000651 95,400.719 $62.09 ETH 0.07% $1.22 50.2758 $61.34 ETH 0.07% $0.067171 911.4718 $61.22 ETH 0.07% $0.23849 256.4515 $61.16 ETH 0.07% $0.445994 136.5323 $60.89 ETH 0.07% $0.562261 107.5811 $60.49 ETH 0.07% $0.008552 7,072.691 $60.48 ETH 0.07% $290.67 0.2061 $59.91 ETH 0.07% <$0.000001 3,145,000,000 $59.28 ETH 0.07% $2.35 24.9213 $58.57 ETH 0.07% $0.444256 131.2734 $58.32 ETH 0.07% $0.046582 1,251.1028 $58.28 ETH 0.07% $52.17 1.1062 $57.71 ETH 0.07% $0.201576 286.236 $57.7 ETH 0.07% $0.000008 7,066,924.7656 $57.17 ETH 0.07% <$0.000001 1,544,166,646.6789 $57.07 ETH 0.07% $0.041026 1,387.7124 $56.93 ETH 0.07% <$0.000001 29,392,052,963.7812 $56.21 ETH 0.07% $0.999884 55.5254 $55.52 ETH 0.06% $0.164951 333.2373 $54.97 ETH 0.06% $0.301283 182.2103 $54.9 ETH 0.06% $0.036118 1,515.3836 $54.73 ETH 0.06% $0.091405 596.7992 $54.55 ETH 0.06% $3.97 13.5139 $53.65 ETH 0.06% $2.01 26.6285 $53.52 ETH 0.06% $1.17 45.5494 $53.17 ETH 0.06% $0.020164 2,627.7562 $52.99 ETH 0.06% $0.00001 5,100,000 $52.89 ETH 0.06% $0.171014 307.0993 $52.52 ETH 0.06% $0.00014 371,760.3657 $52.12 ETH 0.06% $0.548386 94.8795 $52.03 ETH 0.06% $4,038.42 0.0127 $51.35 ETH 0.06% $0.20812 245.7323 $51.14 ETH 0.06% $0.289041 173.7432 $50.22 ETH 0.06% $19.84 2.4954 $49.51 ETH 0.06% $1.27 38.8922 $49.39 ETH 0.06% $27.31 1.7748 $48.47 ETH 0.06% $0.000002 30,117,171.4168 $48.19 ETH 0.06% $0.088933 535.1523 $47.59 ETH 0.06% $94,945 0.00049705 $47.19 ETH 0.06% $575.98 0.0815 $46.95 ETH 0.06% $55.1 0.85 $46.84 ETH 0.05% <$0.000001 342,611,860.1877 $45.93 ETH 0.05% $0.281767 162.948 $45.91 ETH 0.05% $1.05 43.514 $45.6 ETH 0.05% <$0.000001 4,165,464,155.7912 $44.96 ETH 0.05% $0.011764 3,818.7745 $44.92 ETH 0.05% $59.71 0.7517 $44.88 ETH 0.05% $0.000003 17,269,888.3361 $44.73 ETH 0.05% $0.37399 119.2146 $44.59 ETH 0.05% $18.55 2.4021 $44.57 ETH 0.05% $0.662714 67.1918 $44.53 ETH 0.05% $0.032971 1,335.7572 $44.04 ETH 0.05% $4,661.19 0.00942674 $43.94 ETH 0.05% $0.489901 88.9039 $43.55 ETH 0.05% $1.5 29.0874 $43.52 ETH 0.05% $0.275893 157.6266 $43.49 ETH 0.05% $0.19123 226.6825 $43.35 ETH 0.05% $1.33 32.4728 $43.22 ETH 0.05% $0.082859 520.3068 $43.11 ETH 0.05% $3.26 13.2061 $43.05 ETH 0.05% $0.632551 68 $43.01 ETH 0.05% $1.29 33.0885 $42.68 ETH 0.05% $0.523821 81.4294 $42.65 ETH 0.05% $0.000092 463,445.8148 $42.47 ETH 0.05% $12 3.5354 $42.41 ETH 0.05% $0.177618 236.9665 $42.09 ETH 0.05% $0.043353 969.8837 $42.05 ETH 0.05% $0.171395 244.6315 $41.93 ETH 0.05% $0.000868 48,181.4751 $41.83 ETH 0.05% <$0.000001 182,569,767.4659 $41.12 ETH 0.05% $0.447929 90.9373 $40.73 ETH 0.05% $0.091565 441.15 $40.39 ETH 0.05% $0.055272 729.6875 $40.33 ETH 0.05% $1.81 21.9645 $39.76 ETH 0.05% $0.000029 1,367,387.0142 $39.64 ETH 0.05% $12.54 3.1393 $39.37 ETH 0.05% $0.514684 76.0568 $39.15 ETH 0.05% $0.00338 11,530.2011 $38.98 ETH 0.05% $0.197491 196.1699 $38.74 ETH 0.05% $0.043164 894.7508 $38.62 ETH 0.05% $0.182018 211.9871 $38.59 ETH 0.05% $0.009928 3,882.2334 $38.54 ETH 0.05% $0.333375 114.5435 $38.19 ETH 0.04% $1 37.515 $37.59 ETH 0.04% $0.321999 116.4511 $37.5 ETH 0.04% $0.03371 1,109.1696 $37.39 ETH 0.04% $0.081084 455.2901 $36.92 ETH 0.04% $0.004166 8,855.2051 $36.89 ETH 0.04% <$0.000001 7,081,470,123.6697 $36.8 ETH 0.04% <$0.000001 149,030,427.6863 $36.59 ETH 0.04% $0.001022 35,772.4454 $36.56 ETH 0.04% $3.67 9.9501 $36.52 ETH 0.04% $421.82 0.0863 $36.42 ETH 0.04% $29.05 1.2538 $36.42 ETH 0.04% $0.068749 523.9912 $36.02 ETH 0.04% $1.13 31.6906 $35.81 ETH 0.04% $7.94 4.4969 $35.71 ETH 0.04% $0.031855 1,114.494 $35.5 ETH 0.04% $0.119911 294.6812 $35.34 ETH 0.04% $0.00003 1,193,772.19 $35.26 ETH 0.04% $1.05 33.6239 $35.2 ETH 0.04% $6.94 5.0534 $35.07 ETH 0.04% $0.000013 2,773,598.0428 $34.89 ETH 0.04% $0.477904 72.7191 $34.75 ETH 0.04% $0.124497 275.7644 $34.33 ETH 0.04% $0.026984 1,264.7357 $34.13 ETH 0.04% $377.09 0.0902 $34.01 ETH 0.04% <$0.000001 207,963,637,365.3179 $33.9 ETH 0.04% <$0.000001 11,101,258,362.6911 $33.28 ETH 0.04% $0.369412 88.8848 $32.84 ETH 0.04% <$0.000001 4,990,740,794.7702 $32.72 ETH 0.04% $876.09 0.0368 $32.27 ETH 0.04% $0.123307 259.0019 $31.94 ETH 0.04% $0.173579 182.1424 $31.62 ETH 0.04% $0.060692 518.9466 $31.5 ETH 0.04% $0.000019 1,615,000 $31.48 ETH 0.04% $1.78 17.623 $31.4 ETH 0.04% $0.026338 1,146.9006 $30.21 ETH 0.04% $1.83 16.4808 $30.16 ETH 0.04% $1.35 22.3142 $30.12 ETH 0.04% $0.143141 209.8126 $30.03 ETH 0.03% $1.14 25.9621 $29.6 ETH 0.03% $57.16 0.5095 $29.13 ETH 0.03% $0.658854 44.0881 $29.05 ETH 0.03% $0.008338 3,482.9731 $29.04 ETH 0.03% $0.074834 386.4744 $28.92 ETH 0.03% $1.89 15.2304 $28.84 ETH 0.03% $0.001628 17,622.9241 $28.69 ETH 0.03% $0.011566 2,454.7358 $28.39 ETH 0.03% $0.191769 147.0737 $28.2 ETH 0.03% $0.031849 878.6853 $27.99 ETH 0.03% $3.79 7.375 $27.95 ETH 0.03% $0.000038 738,965.8859 $27.92 ETH 0.03% $0.136043 204.9261 $27.88 ETH 0.03% $0.146433 188.6062 $27.62 ETH 0.03% $4,006.87 0.00687596 $27.55 ETH 0.03% $9.13 3.0056 $27.44 ETH 0.03% $0.193889 141.3262 $27.4 ETH 0.03% $0.039235 694.9693 $27.27 ETH 0.03% $0.026435 1,030.5698 $27.24 ETH 0.03% $0.195582 137.5795 $26.91 ETH 0.03% $1.26 21.3544 $26.91 ETH 0.03% $0.000026 1,024,412.4254 $26.5 ETH 0.03% $0.000008 3,183,063.0542 $26.1 ETH 0.03% $0.080937 318.7796 $25.8 ETH 0.03% $0.087789 292.9458 $25.72 ETH 0.03% <$0.000001 8,919,063,978.8323 $25.64 ETH 0.03% $1 25.5 $25.52 ETH 0.03% $0.172872 147.6036 $25.52 ETH 0.03% $0.196088 129.6682 $25.43 ETH 0.03% $0.003304 7,682.2161 $25.38 ETH 0.03% $0.008999 2,796.5 $25.17 ETH 0.03% $0.711639 35.2358 $25.08 ETH 0.03% $0.008734 2,855.0335 $24.94 ETH 0.03% <$0.000001 356,069,519.797 $24.91 ETH 0.03% $0.014165 1,757.0218 $24.89 ETH 0.03% $0.394147 62.3784 $24.59 ETH 0.03% $0.005145 4,742 $24.4 ETH 0.03% $110.12 0.2202 $24.24 ETH 0.03% $2.07 11.5217 $23.85 ETH 0.03% $0.000017 1,399,830.5512 $23.63 ETH 0.03% $0.682763 34.3336 $23.44 ETH 0.03% $0.007154 3,258.8715 $23.31 ETH 0.03% $0.134896 172.1809 $23.23 ETH 0.03% $0.917036 25.2179 $23.13 ETH 0.03% <$0.000001 4,581,787,243.6019 $23.08 ETH 0.03% $4.01 5.7286 $22.97 ETH 0.03% $1.35 16.9215 $22.84 ETH 0.03% $0.056024 403.75 $22.62 ETH 0.03% $0.784716 28.7077 $22.53 ETH 0.03% $0.059014 378.7128 $22.35 ETH 0.03% $0.274192 81.3534 $22.31 ETH 0.03% $0.000005 4,231,649.1669 $22.3 ETH 0.03% $1.23 17.9248 $22.05 ETH 0.03% $2 10.9791 $22 ETH 0.03% $0.145852 149.3154 $21.78 ETH 0.03% $0.000001 16,228,224.2427 $21.71 ETH 0.03% $0.001839 11,741.1425 $21.59 ETH 0.03% $0.136597 157.6224 $21.53 ETH 0.02% $0.000429 48,922.9096 $20.99 ETH 0.02% $0.242454 85.9125 $20.83 ETH 0.02% $0.000032 649,267.3695 $20.77 ETH 0.02% $6 3.4592 $20.75 ETH 0.02% $0.206052 99.4944 $20.5 ETH 0.02% $0.998749 20.4 $20.37 ETH 0.02% $0.024216 840.1892 $20.35 ETH 0.02% $0.000007 2,849,219.0696 $20.31 ETH 0.02% $11.9 1.6928 $20.14 ETH 0.02% $139.27 0.1441 $20.07 ETH 0.02% $0.631149 31.518 $19.89 ETH 0.02% $0.018942 1,040.108 $19.7 ETH 0.02% <$0.000001 339,530,579.0159 $19.67 ETH 0.02% $0.001036 18,897.0545 $19.58 ETH 0.02% $0.250228 77.0389 $19.28 ETH 0.02% $0.116279 165.2376 $19.21 ETH 0.02% $0.024968 764.0285 $19.08 ETH 0.02% $0.125145 151.7083 $18.99 ETH 0.02% $27.79 0.6802 $18.9 ETH 0.02% $2.6 7.2655 $18.89 ETH 0.02% $0.965071 19.4603 $18.78 ETH 0.02% $0.000011 1,708,911.1146 $18.76 ETH 0.02% $0.000821 22,723.3983 $18.65 ETH 0.02% <$0.000001 64,314,650,040.1513 $18.61 ETH 0.02% $0.220719 83.4828 $18.43 ETH 0.02% $2,166.97 0.0085 $18.42 ETH 0.02% $0.00234 7,843.2438 $18.36 ETH 0.02% $0.000044 410,842.4947 $18.04 ETH 0.02% $60.54 0.2951 $17.87 ETH 0.02% $0.000006 2,821,772.7631 $17.84 ETH 0.02% $0.000309 57,419.0543 $17.76 ETH 0.02% $1.37 12.8561 $17.66 ETH 0.02% $0.013639 1,294.9165 $17.66 ETH 0.02% $0.829211 21.222 $17.6 ETH 0.02% $0.066375 264.8101 $17.58 ETH 0.02% $1.14 15.4118 $17.57 ETH 0.02% $1.32 13.3023 $17.5 ETH 0.02% $296.83 0.0588 $17.45 ETH 0.02% $0.99685 17.4445 $17.39 ETH 0.02% $0.127921 135.6043 $17.35 ETH 0.02% $0.994006 17.4419 $17.34 ETH 0.02% $1.34 12.8178 $17.18 ETH 0.02% $0.001554 11,011.0086 $17.11 ETH 0.02% $4,146.11 0.0041021 $17.01 ETH 0.02% $0.009521 1,785.7464 $17 ETH 0.02% $0.00001 1,681,806.9129 $16.87 ETH 0.02% $1.15 14.6193 $16.81 ETH 0.02% $0.74688 22.4546 $16.77 ETH 0.02% $391.16 0.0427 $16.72 ETH 0.02% $0.068388 243.4551 $16.65 ETH 0.02% <$0.000001 1,478,453,390.7652 $16.58 ETH 0.02% $0.002063 7,954.6727 $16.41 ETH 0.02% $24.32 0.6718 $16.34 ETH 0.02% $18.57 0.8754 $16.26 ETH 0.02% $0.024547 654.791 $16.07 ETH 0.02% $6.96 2.3029 $16.03 ETH 0.02% $0.161973 97.9659 $15.87 ETH 0.02% $0.123029 128.4472 $15.8 ETH 0.02% $8.39 1.8662 $15.66 ETH 0.02% <$0.000001 34,528,094.327 $15.42 ETH 0.02% $0.001309 11,767.4767 $15.4 ETH 0.02% $0.109987 139.381 $15.33 ETH 0.02% $0.077301 197.7433 $15.29 ETH 0.02% $0.000043 350,954.5206 $15.22 ETH 0.02% $0.000852 17,757.435 $15.13 ETH 0.02% $0.105349 141.4624 $14.9 ETH 0.02% $0.062995 226.0908 $14.24 ETH 0.02% $0.026612 531.0794 $14.13 ETH 0.02% $0.080198 175.2049 $14.05 ETH 0.02% <$0.000001 391,718,019.443 $13.87 ETH 0.02% $0.018389 752.3071 $13.83 ETH 0.02% $0.794595 17.3834 $13.81 ETH 0.02% $0.512523 26.5815 $13.62 ETH 0.02% $0.014863 916.3084 $13.62 ETH 0.02% $0.050973 265.1651 $13.52 ETH 0.02% $0.000002 5,927,265.0688 $13.51 ETH 0.02% $99,257 0.000136 $13.5 ETH 0.02% $2.23 6.0313 $13.45 ETH 0.02% $0.012936 1,037.0734 $13.42 ETH 0.02% <$0.000001 2,961,021,515.9471 $13.36 ETH 0.02% $0.067654 197.2707 $13.35 ETH 0.02% $0.015581 856.0834 $13.34 ETH 0.02% <$0.000001 2,107,716,428.8369 $13.23 ETH 0.02% $0.000006 2,069,299.4659 $13.21 ETH 0.02% $0.000004 3,469,908.2107 $13.15 ETH 0.02% $27.15 0.4833 $13.12 ETH 0.02% $0.054255 241.6061 $13.11 ETH 0.02% $0.008864 1,472.9484 $13.06 ETH 0.02% $0.340035 38.25 $13.01 ETH 0.02% $0.750661 17.3016 $12.99 ETH 0.02% $0.000006 2,012,873.2416 $12.98 ETH 0.02% $0.191317 67.6776 $12.95 ETH 0.02% $1.85 6.9557 $12.89 ETH 0.02% $0.186996 68.3036 $12.77 ETH 0.02% $0.000001 20,919,539.5734 $12.77 ETH 0.01% $3.17 3.9502 $12.52 ETH 0.01% $0.002593 4,806.9331 $12.46 ETH 0.01% $0.816606 15.0835 $12.32 ETH 0.01% $0.000001 10,866,821.9193 $12.31 ETH 0.01% $0.000084 144,202 $12.1 ETH 0.01% $1.41 8.5262 $12.02 ETH 0.01% $0.10842 110.5595 $11.99 ETH 0.01% $0.006676 1,790.8883 $11.96 ETH 0.01% $1.37 8.721 $11.95 ETH 0.01% $32.34 0.3668 $11.86 ETH 0.01% $0.591506 20.0488 $11.86 ETH 0.01% $0.130012 90.3645 $11.75 ETH 0.01% $0.000001 13,228,765.685 $11.72 ETH 0.01% $3.18 3.6826 $11.71 ETH 0.01% $17.42 0.6708 $11.68 ETH 0.01% $0.000872 13,349.7064 $11.64 ETH 0.01% $0.218688 53.1575 $11.62 ETH 0.01% $0.945623 12.1527 $11.49 ETH 0.01% $0.010952 1,044.6496 $11.44 ETH 0.01% $1.61 7.0961 $11.42 ETH 0.01% $0.000521 21,886.5786 $11.39 ETH 0.01% $0.26626 42.3938 $11.29 ETH 0.01% $0.966495 11.6746 $11.28 ETH 0.01% $1.81 6.2352 $11.27 ETH 0.01% $20.62 0.5464 $11.27 ETH 0.01% $0.000251 44,440.4202 $11.14 ETH 0.01% $0.255644 43.4557 $11.11 ETH 0.01% $0.000266 41,660.9815 $11.1 ETH 0.01% $0.248096 44.4613 $11.03 ETH 0.01% <$0.000001 698,158,398.8623 $10.96 ETH 0.01% $0.986413 11.05 $10.9 ETH 0.01% $0.387013 27.9004 $10.8 ETH 0.01% $0.02311 455.6313 $10.53 ETH 0.01% <$0.000001 24,463,879.9844 $10.51 ETH 0.01% $3.53 2.9724 $10.49 ETH 0.01% $0.777468 13.4686 $10.47 ETH 0.01% $0.115423 90.1801 $10.41 ETH 0.01% $2.05 5.0745 $10.4 ETH 0.01% $0.028127 366.3789 $10.31 ETH 0.01% $0.013444 765 $10.28 ETH 0.01% $0.090982 112.764 $10.26 ETH 0.01% $0.059148 172.5298 $10.2 ETH 0.01% $0.083962 120.1535 $10.09 ETH 0.01% $0.018292 549.5251 $10.05 ETH 0.01% $0.592417 16.8272 $9.97 ETH 0.01% $0.228684 43.4467 $9.94 ETH 0.01% $0.586493 16.9167 $9.92 ETH 0.01% $0.093266 105.9919 $9.89 ETH 0.01% $0.001041 9,469.7797 $9.86 ETH 0.01% $1.82 5.409 $9.84 ETH 0.01% $0.016136 605.0379 $9.76 ETH 0.01% $0.534004 18.0484 $9.64 ETH 0.01% $0.002356 3,982.8467 $9.38 ETH 0.01% $0.000422 22,117.3202 $9.33 ETH 0.01% $0.001909 4,847.4202 $9.25 ETH 0.01% $0.015959 573.359 $9.15 ETH 0.01% $0.005422 1,679.0344 $9.1 ETH 0.01% $0.000014 653,076.867 $9.07 ETH 0.01% $0.002003 4,462.5 $8.94 ETH 0.01% $1.72 5.18 $8.91 ETH 0.01% $0.001378 6,445.7955 $8.88 ETH 0.01% $0.017761 498.3646 $8.85 ETH 0.01% $0.012533 703.8663 $8.82 ETH 0.01% $0.010273 850.6958 $8.74 ETH 0.01% $0.000588 14,737.2924 $8.66 ETH 0.01% $0.085018 101.62 $8.64 ETH 0.01% $0.13119 65.6242 $8.61 ETH 0.01% <$0.000001 68,308,654.7935 $8.6 ETH 0.01% $0.992905 8.6445 $8.58 ETH 0.01% $0.013937 613.5748 $8.55 ETH 0.01% $0.039823 213.3868 $8.5 ETH 0.01% $99,933 0.000085 $8.49 ETH 0.01% $0.049787 170.5927 $8.49 ETH 0.01% $0.000032 261,959.5047 $8.48 ETH <0.01% $0.162906 51.8083 $8.44 ETH <0.01% $2,694.9 0.0031 $8.35 ETH <0.01% $0.002123 3,913.5125 $8.31 ETH <0.01% $3.62 2.2744 $8.24 ETH <0.01% $0.486272 16.8839 $8.21 ETH <0.01% $0.054215 150.2847 $8.15 ETH <0.01% $0.00372 2,181.1569 $8.11 ETH <0.01% $2.52 3.1983 $8.05 ETH <0.01% <$0.000001 387,906,250.7352 $8.04 ETH <0.01% $0.268517 29.892 $8.03 ETH <0.01% $0.002122 3,776.8312 $8.02 ETH <0.01% $0.13119 60.6372 $7.95 ETH <0.01% <$0.000001 18,766,116.756 $7.81 ETH <0.01% $0.001646 4,658.102 $7.67 ETH <0.01% $0.328024 23.3237 $7.65 ETH <0.01% <$0.000001 812,807,335.3001 $7.63 ETH <0.01% $12.62 0.6034 $7.62 ETH <0.01% $0.115909 65.5194 $7.59 ETH <0.01% $0.010688 710.4542 $7.59 ETH <0.01% $0.472219 16.0073 $7.56 ETH <0.01% $0.000002 4,141,027.3347 $7.45 ETH <0.01% $0.000436 17,000 $7.41 ETH <0.01% $0.432643 17 $7.35 ETH <0.01% $1 7.225 $7.23 ETH <0.01% $0.000001 7,576,862.9719 $7.22 ETH <0.01% $0.113059 63.7025 $7.2 ETH <0.01% $0.006225 1,156.3202 $7.2 ETH <0.01% $0.161011 44.622 $7.18 ETH <0.01% $15.61 0.459 $7.16 ETH <0.01% $0.293227 24.3644 $7.14 ETH <0.01% $0.265856 26.7391 $7.11 ETH <0.01% $0.012346 559.3 $6.9 ETH <0.01% $0.105455 65.3668 $6.89 ETH <0.01% $0.196653 35.005 $6.88 ETH <0.01% $3,925.66 0.0017502 $6.87 ETH <0.01% $0.000006 1,107,700.41 $6.78 ETH <0.01% $0.003592 1,882.7364 $6.76 ETH <0.01% $0.389104 17.3575 $6.75 ETH <0.01% $0.339077 19.7277 $6.69 ETH <0.01% $0.000575 11,625.6176 $6.69 ETH <0.01% $0.298862 22.2203 $6.64 ETH <0.01% $0.000045 148,556.2803 $6.62 ETH <0.01% $0.000392 16,807.8605 $6.59 ETH <0.01% $2.75 2.3903 $6.56 ETH <0.01% <$0.000001 2,899,880,472.6245 $6.55 ETH <0.01% <$0.000001 65,995,421.5601 $6.49 ETH <0.01% $0.612098 10.6038 $6.49 ETH <0.01% $0.005794 1,116.9176 $6.47 ETH <0.01% $0.067975 94.8314 $6.45 ETH <0.01% $0.002424 2,658.4389 $6.44 ETH <0.01% $0.031519 204.4054 $6.44 ETH <0.01% $0.504116 12.7434 $6.42 ETH <0.01% $0.013878 462.5766 $6.42 ETH <0.01% $0.120429 53.2755 $6.42 ETH <0.01% $0.517283 12.4025 $6.42 ETH <0.01% $283.91 0.0226 $6.4 ETH <0.01% $1 6.3998 $6.4 ETH <0.01% $2.21 2.8555 $6.31 ETH <0.01% $0.497636 12.5729 $6.26 ETH <0.01% $4,050.62 0.00152387 $6.17 ETH <0.01% $0.044865 137.4568 $6.17 ETH <0.01% $0.000001 5,510,495.5947 $6.12 ETH <0.01% $48.37 0.1241 $6 ETH <0.01% $1.39 4.3091 $5.99 ETH <0.01% $0.000686 8,666.3326 $5.95 ETH <0.01% $0.023827 246.7015 $5.88 ETH