
Everyday giveaways up to 8.88BTC, Lucky Spins. Deposit BONUS 300% and Cashbacks!

5000+ Slots & Live Casino Games, 50+cryptos. Register with BscScan and get 760% deposit bonus. Win Big$, withdraw it fast.

Join Pasino and get the daily chance to win US$100k and 0.5 BTC

5000+ Slots, Live casino games, 50+ cryptos, 100% bet insurance. Register with Bscscan and get 240% first deposit bonus.

Get a Welcome Bonus of 7 BTC + 250 Free Spins this season!

3000+ Slots, 20+ Cryptos, 75K Raffle, Sports Promos - World's largest Crypto Casino & Sportsbook - Provably Fair!
Overview
BNB Balance
BNB Value
$38,711.72 (@ $696.36/BNB)Token Holdings
Could not find any matches!
- BEP-20 Tokens (>100)192.92851964 AVACAvaCoach (AVAC)$0.47@0.00241,864.09705555 BIDRBIDR BEP20 (BIDR)$0.13@0.000158,079,132.9210111 BOSSBoss Token (BOSS)$0.17@0.00415.7154867 CashHandCashHand (CashHa...)16,358.85681872 CatElonCatElonMars (CatElo...)$0.13@0.000.4002331 CFXCosmic Force... (CFX)367.329 CBIXCubiex (CBIX)$0.24@0.00060.00003 DANDANNY (DAN)2.250003 DANDastra (DAN)$0.02@0.007869.99461395 EQEQ (EQ)5,758.10671645 EXAEXALINK (EXA)1,899.78413701 FOMOFomoFi (FOMO)$2.46@0.001368,519,776.065696 FREEFREE coin BS... (FREE)$11.50@0.00523,402.42453731 $KATGHOST KAT ($KAT)4,780.03138492 GSFGolden Sparr... (GSF)0.99957308 GRTGrimaret (GRT)172.65467137 GROKGROK ALLBEST... (GROK)68,303,445,659,059.2 GrokBankGrok Bank (GrokBa...)$9.71@0.00917.50853613 KAMALAHARRIS (KAMALA)$0.02@0.000.00000011 HERITAGEHERITAGETOKE... (HERITA...)189.41186578 EARNHOLD (EARN)$0.40@0.00215.15924086 HonorHonor Token (Honor)10,011,357.958787 INNBCInnovativeBi... (INNBC)0.5959793 INUKOInuko Coin (INUKO)$0.01@0.0162,180.66307377 JulDJulSwap (JulD)54.43061375 KASKaspa (KAS)235,044.98150795 KEKIKeki Finance (KEKI)66,412,723,281,048.4 KingMyroKing Myro (KingMy...)3,108,155,977.88625 LOVELYLovely Inu F... (LOVELY)$28,136,581.99@0.009169.2829244 MIMBOMIMBO (MIMBO)$0.01@0.00013,806,412.70190972 PEWpepe in a bn... (PEW)$0.48@0.001.84081911 bROOBEEROOBEE (bROOBE...)$0.00@0.000514,422.67651128 SPEAISAFE PLANET ... (SPEAI)$0.18@0.001,566,848,399.95234 SILLYBONKSilly Bonk (SILLYB...)$1.91@0.002,023,178,911.90206 SNOWSnowFloki (SNOW)85,122.71224141 SPSSPARKLIFE (SPS)$59.46@0.000711,489,030.5335422 GECKTechGecko (GECK)0.0288 TLIFETLIFE COIN (TLIFE)$0.04@1.39104.59050096 $Tools-FiTools-Fi ($Tools...)2.615544 USDVUSDV (USDV)2.03476731 VFOXVFOX (VFOX)$0.03@0.01454,921,165,730.6852 xAIxAI (xAI)$13.65@0.005.34587374 POOLZ$Poolz Finan... (POOLZ)$0.09@0.01750.06280802(Wormhole) ()0.71907914 10SET10Set Token (10SET)$0.16@0.2188319.73401219 8PAY8PAY Network (8PAY)67.81827543 STZ99Starz (STZ)$0.65@0.009610.52171055 $ADEAADex Financ... ($ADE)$0.29@0.02791,972.80808199 ACTAcet Token (ACT)$25.62@0.0131.51094561 ACEACEToken (ACE)$3.16@2.090.01387962 ACSACryptoS (ACS)$0.00@0.31011.23893628 ADXAdEx Network (ADX)$0.27@0.2191307.21075246 AFENAfen (AFEN)$0.02@0.0001501.25068493 AFNTYAffinity (AFNTY)$0.00@0.0039,804.1352533 AGIIAGII (AGII)$3.06@0.000113,122,533.7087358 AIFLOKIAI Floki (AIFLOK...)$0.20@0.0056.11547068 AIOZAIOZ Network (AIOZ)$44.60@0.794713,484,826,494.3811 AIRAIR (AIR)$562.14@0.00196.41919939 AIRTAirNFT Token (AIRT)$0.04@0.00020.19163117 AIOAITECH (AIO)698.11747038 ACHAlchemy (ACH)$18.02@0.025810.94579 ALICEALICE (ALICE)$12.59@1.1577,515.4974435 A4MAlien Form (A4M)$1.86@0.00962.5189 TLMAlien Worlds... (TLM)$12.92@0.013443.06289153 ALPACAAlpacaToken (ALPACA)$7.39@0.171666.61671222 ROARAlphaDEX (ROAR)$0.08@0.00115.68737266 ALPHAAlphaToken (ALPHA)$0.47@0.083529.7558398 ALTAltLayer Tok... (ALT)$3.39@0.1141728.95047567 ALUAltura (ALU)$76.20@0.10459.89424279 AMPLAMPL secured... (AMPL)$12.37@1.2513,062.56218097 AMPLEAmpleSwap To... (AMPLE)$0.02@0.0062.29606654 AMKANEMOI (AMK)180.022099 ANIAnime (ANI)$0.32@0.0018139.36860645 ANKRAnkr (ANKR)$4.89@0.0351868.0731579 ANNAnnex (ANN)$1.08@0.00120.05254535 ANYAnyswap-BEP2... (ANY)$0.25@4.7297391.76288402 ABONDApeBond (ABOND)$1.62@0.00413,838,223.159234 NFTAPENFT (NFT)$2.05@0.005,840.02583354 BANANAApeSwapFinan... (BANANA)$3.41@0.00060.19991048 ACEApollo Caps ... (ACE)$0.00@0.000921,652.09181241 SOULAPOyield SOU... (SOUL)$0.09@0.0040.2405 APRILApril Token (APRIL)$0.02@0.00052,306.60153703 APXAPX Token (APX)$260.41@0.1129151.6477475 ARCONAARCONA (ARCONA)$1.22@0.00864.45029161 APCArenaPlay (APC)$0.21@0.003216,701.62660592 AREAAREON (AREA)$907.60@0.054366,389.322485 ARVARIVA (ARV)$1.16@0.000.67329149 DIEArt Can Die (DIE)$0.04@0.061.69391121 NAUTAstronaut (NAUT)$0.05@0.02821.023898 AURAAura (AURA)$0.01@0.01360.1949002 URUSAurox Token (URUS)$0.55@2.8340.77972101 ATAAutomata (ATA)$6.58@0.16141.39246961 AUTOAUTOv2 (AUTO)$16.65@11.95420.279434 AXLAxelar (AXL)$14.19@0.699815.076525 axlUSDCAxelar Wrapp... (axlUSD...)168.08874635 BBTCBaby Bitcoin (BBTC)568,198,570,520.116 BabyDogeBaby Doge Co... (BabyDo...)$1,783.58@0.00383,741,853.230007 BabyFBBaby Floki B... (BabyFB)$0.04@0.00562,038,614,232,708 BabyHippoBABY HIPPO (BabyHi...)$87.40@0.0032,596,209,208,040.6 BabyNeiroBaby Neiro (BabyNe...)$277.59@0.00NFT Tokens (19)REWARD# rewardUSDT.orgBEP-1155Visit getSHIBA.fans claim your rewards!#getSHIBA.fansBEP-1155VENAdventurousBEP-1155Airdropbeam-rewards.comBEP-1155Visit headpunks.app to mint FREE!Block Head Punks NFTBEP-1155AirdropDogeVault.orgBEP-1155AirdropgetWoo.orgBEP-1155AirdropPolkaNetwork.netBEP-1155
BEP-1155 TOKEN*
[Suspicious]BEP-1155 TOKEN*
[Suspicious]BEP-1155 TOKEN*
[Spam]More Info
Private Name Tags
ContractCreator
Multichain Info
- Transactions
- Internal Transactions
- Token Transfers (BEP-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Info
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- BEP-20
- NFTs
Latest 25 from a total of 2,937,777 transactions
Transaction Hash MethodBlockFromToExact Input V2Sw... 45325078 2024-12-30 10:59:37 11 secs ago 1735556377 IN 0 BNB$0.00 0.00067079 2.02 Exact Input V2Sw... 45325077 2024-12-30 10:59:34 14 secs ago 1735556374 IN 0 BNB$0.00 0.00039666 2.02 Exact Input V2Sw... 45325076 2024-12-30 10:59:31 17 secs ago 1735556371 IN 0 BNB$0.00 0.000603 2.02 Exact Input V2Sw... 45325075 2024-12-30 10:59:28 20 secs ago 1735556368 IN 0 BNB$0.00 0.00095586 2.02 Cross 45325069 2024-12-30 10:59:10 38 secs ago 1735556350 IN 0 BNB$0.00 0.0014179 2.02 Aggregate 45325066 2024-12-30 10:59:01 47 secs ago 1735556341 IN 0.069 BNB$48.05 0.00043617 2 Exact Input V2Sw... 45325066 2024-12-30 10:59:01 47 secs ago 1735556341 IN 0 BNB$0.00 0.00028881 2.02 Exact Input V2Sw... 45325066 2024-12-30 10:59:01 47 secs ago 1735556341 IN 0 BNB$0.00 0.00068992 2.02 Exact Input V2Sw... 45325064 2024-12-30 10:58:55 53 secs ago 1735556335 IN 0.101 BNB$70.33 0.0003541 2.02 Exact Input V2Sw... 45325064 2024-12-30 10:58:55 53 secs ago 1735556335 IN 0 BNB$0.00 0.00056922 1 Exact Input V2Sw... 45325063 2024-12-30 10:58:52 56 secs ago 1735556332 IN 0 BNB$0.00 0.0005651 2.02 Aggregate 45325062 2024-12-30 10:58:49 1 mins ago 1735556329 IN 0 BNB$0.00 0.00070032 2.02 Exact Input V2Sw... 45325061 2024-12-30 10:58:46 1 min ago 1735556326 IN 0.0455933 BNB$31.75 0.00046917 2 Exact Input V2Sw... 45325057 2024-12-30 10:58:34 1 min ago 1735556314 IN 0 BNB$0.00 0.00041634 2.02 Exact Input V2Sw... 45325057 2024-12-30 10:58:34 1 min ago 1735556314 IN 0 BNB$0.00 0.00051486 2 Cross 45325057 2024-12-30 10:58:34 1 min ago 1735556314 IN 0 BNB$0.00 0.00117836 2 Exact Input V2Sw... 45325055 2024-12-30 10:58:28 1 min ago 1735556308 IN 0 BNB$0.00 0.00035723 2.02 Exact Input V2Sw... 45325049 2024-12-30 10:58:10 1 min ago 1735556290 IN 0 BNB$0.00 0.0004452 2.02 Exact Input V2Sw... 45325048 2024-12-30 10:58:07 1 min ago 1735556287 IN 0 BNB$0.00 0.00041243 2 Aggregate 45325047 2024-12-30 10:58:04 1 min ago 1735556284 IN 0 BNB$0.00 0.00072378 2.02 Exact Input V2Sw... 45325047 2024-12-30 10:58:04 1 min ago 1735556284 IN 0 BNB$0.00 0.00035723 2.02 Exact Input V2Sw... 45325047 2024-12-30 10:58:04 1 min ago 1735556284 IN 0 BNB$0.00 0.00038188 2.02 Aggregate 45325045 2024-12-30 10:57:58 1 min ago 1735556278 IN 0 BNB$0.00 0.00021888 1 Exact Input V2Sw... 45325042 2024-12-30 10:57:49 1 min ago 1735556269 IN 0 BNB$0.00 0.00174139 2.02 Exact Input V2Sw... 45325041 2024-12-30 10:57:46 2 mins ago 1735556266 IN 0 BNB$0.00 0.00049373 2.02 Latest 25 internal transactions (View All)
Parent Transaction Hash Block From To 45325066 2024-12-30 10:59:01 47 secs ago 1735556341 0.068793 BNB$47.90 45325064 2024-12-30 10:58:55 53 secs ago 1735556335 0.100697 BNB$70.12 45325061 2024-12-30 10:58:46 1 min ago 1735556326 0.04545652 BNB$31.65 45325057 2024-12-30 10:58:34 1 min ago 1735556314 0.05805948 BNB$40.43 45325057 2024-12-30 10:58:34 1 min ago 1735556314 0.05805948 BNB$40.43 45325057 2024-12-30 10:58:34 1 min ago 1735556314 0.04232296 BNB$29.47 45325057 2024-12-30 10:58:34 1 min ago 1735556314 0.04232296 BNB$29.47 45325048 2024-12-30 10:58:07 1 min ago 1735556287 0.00158495 BNB$1.10 45325048 2024-12-30 10:58:07 1 min ago 1735556287 0.00158495 BNB$1.10 45325047 2024-12-30 10:58:04 1 min ago 1735556284 0.01769001 BNB$12.32 45325047 2024-12-30 10:58:04 1 min ago 1735556284 0.01769001 BNB$12.32 45325028 2024-12-30 10:57:07 2 mins ago 1735556227 0.00301923 BNB$2.10 45325028 2024-12-30 10:57:07 2 mins ago 1735556227 0.00301923 BNB$2.10 45325025 2024-12-30 10:56:58 2 mins ago 1735556218 0.000997 BNB$0.69 45325023 2024-12-30 10:56:52 2 mins ago 1735556212 0.00286119 BNB$1.99 45325023 2024-12-30 10:56:52 2 mins ago 1735556212 0.00286119 BNB$1.99 45325018 2024-12-30 10:56:37 3 mins ago 1735556197 0.00272066 BNB$1.89 45325018 2024-12-30 10:56:37 3 mins ago 1735556197 0.00272066 BNB$1.89 45325008 2024-12-30 10:56:07 3 mins ago 1735556167 0.08293289 BNB$57.75 45325008 2024-12-30 10:56:07 3 mins ago 1735556167 0.08293289 BNB$57.75 45325002 2024-12-30 10:55:49 3 mins ago 1735556149 0.18943 BNB$131.91 45324972 2024-12-30 10:54:19 5 mins ago 1735556059 0.02991 BNB$20.83 45324965 2024-12-30 10:53:58 5 mins ago 1735556038 0.01336684 BNB$9.31 45324965 2024-12-30 10:53:58 5 mins ago 1735556038 0.01336684 BNB$9.31 45324960 2024-12-30 10:53:43 6 mins ago 1735556023 0.16107708 BNB$112.17 Loading...LoadingContract Name:TransitSwapRouterV5
Compiler Versionv0.8.18+commit.87f61d96
Optimization Enabled:Yes with 200 runs
Other Settings:default evmVersionContract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./UniswapV2Router.sol"; import "./UniswapV3Router.sol"; import "./AggregateRouter.sol"; import "./CrossRouter.sol"; contract TransitSwapRouterV5 is UniswapV2Router, UniswapV3Router, AggregateRouter, CrossRouter { function withdrawTokens(address[] memory tokens, address recipient) external onlyExecutor { for (uint index; index < tokens.length; index++) { uint amount; if (TransferHelper.isETH(tokens[index])) { amount = address(this).balance; TransferHelper.safeTransferETH(recipient, amount); } else { amount = IERC20(tokens[index]).balanceOf(address(this)); TransferHelper.safeTransferWithoutRequire(tokens[index], recipient, amount); } emit Withdraw(tokens[index], msg.sender, recipient, amount); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract CrossRouter is BaseCore { using SafeMath for uint256; constructor() {} function cross(CrossDescription calldata desc) external payable nonReentrant whenNotPaused { require(desc.calls.length > 0, "data should be not zero"); require(desc.amount > 0, "amount should be greater than 0"); require(_cross_caller_allowed[desc.caller], "invalid caller"); uint256 swapAmount; uint256 actualAmountIn = calculateTradeFee(false, desc.amount, desc.fee, desc.signature); if (TransferHelper.isETH(desc.srcToken)) { require(msg.value == desc.amount, "invalid msg.value"); swapAmount = actualAmountIn; if (desc.wrappedToken != address(0)) { require(_wrapped_allowed[desc.wrappedToken], "Invalid wrapped address"); TransferHelper.safeDeposit(desc.wrappedToken, swapAmount); TransferHelper.safeApprove(desc.wrappedToken, desc.caller, swapAmount); swapAmount = 0; } } else { TransferHelper.safeTransferFrom(desc.srcToken, msg.sender, address(this), desc.amount); TransferHelper.safeApprove(desc.srcToken, desc.caller, actualAmountIn); } { (bool success, bytes memory result) = desc.caller.call{value:swapAmount}(desc.calls); if (!success) { revert(RevertReasonParser.parse(result, "TransitCrossV5:")); } } _emitTransit(desc.srcToken, desc.dstToken, desc.dstReceiver, desc.amount, 0, desc.toChain, desc.channel); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract AggregateRouter is BaseCore { using SafeMath for uint256; constructor() { } function aggregateAndGasUsed(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) external payable returns (uint256 returnAmount, uint256 gasUsed) { uint256 gasLeftBefore = gasleft(); returnAmount = _executeAggregate(desc, callbytesDesc); gasUsed = gasLeftBefore - gasleft(); } function aggregate(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) external payable returns (uint256 returnAmount) { returnAmount = _executeAggregate(desc, callbytesDesc); } function _executeAggregate(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) internal nonReentrant whenNotPaused returns (uint256 returnAmount) { require(callbytesDesc.calldatas.length > 0, "data should be not zero"); require(desc.amount > 0, "amount should be greater than 0"); require(desc.dstReceiver != address(0), "receiver should be not address(0)"); require(desc.minReturnAmount > 0, "minReturnAmount should be greater than 0"); require(_wrapped_allowed[desc.wrappedToken], "invalid wrapped address"); uint256 actualAmountIn = calculateTradeFee(true, desc.amount, desc.fee, desc.signature); uint256 swapAmount; uint256 toBeforeBalance; address bridgeAddress = _aggregate_bridge; if (TransferHelper.isETH(desc.srcToken)) { require(msg.value == desc.amount, "invalid msg.value"); swapAmount = actualAmountIn; } else { TransferHelper.safeTransferFrom(desc.srcToken, msg.sender, address(this), desc.amount); TransferHelper.safeTransfer(desc.srcToken, bridgeAddress, actualAmountIn); } if (TransferHelper.isETH(desc.dstToken)) { toBeforeBalance = desc.dstReceiver.balance; } else { toBeforeBalance = IERC20(desc.dstToken).balanceOf(desc.dstReceiver); } { //bytes4(keccak256(bytes('callbytes(CallbytesDescription)'))); (bool success, bytes memory result) = bridgeAddress.call{value : swapAmount}(abi.encodeWithSelector(0x3f3204d2, callbytesDesc)); if (!success) { revert(RevertReasonParser.parse(result, "TransitSwap:")); } } if (TransferHelper.isETH(desc.dstToken)) { returnAmount = desc.dstReceiver.balance.sub(toBeforeBalance); } else { returnAmount = IERC20(desc.dstToken).balanceOf(desc.dstReceiver).sub(toBeforeBalance); } require(returnAmount >= desc.minReturnAmount, "Too little received"); _emitTransit(desc.srcToken, desc.dstToken, desc.dstReceiver, desc.amount, returnAmount, 0, desc.channel); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract UniswapV3Router is BaseCore { using SafeMath for uint256; uint256 private constant _ZERO_FOR_ONE_MASK = 1 << 255; uint160 private constant MIN_SQRT_RATIO = 4295128739; uint160 private constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; constructor() {} fallback() external { (int256 amount0Delta, int256 amount1Delta, bytes memory _data) = abi.decode(msg.data[4:], (int256,int256,bytes)); _executeCallback(amount0Delta, amount1Delta, _data); } function pancakeV3SwapCallback( int256 amount0Delta, int256 amount1Delta, bytes calldata _data ) external { _executeCallback(amount0Delta, amount1Delta, _data); } function uniswapV3SwapCallback( int256 amount0Delta, int256 amount1Delta, bytes calldata _data ) external { _executeCallback(amount0Delta, amount1Delta, _data); } function _executeCallback( int256 amount0Delta, int256 amount1Delta, bytes memory _data ) internal { require(amount0Delta > 0 || amount1Delta > 0, "M0 or M1"); // swaps entirely within 0-liquidity regions are not supported (uint256 pool, bytes memory tokenInAndPoolSalt) = abi.decode(_data, (uint256, bytes)); (address tokenIn, bytes32 poolSalt) = abi.decode(tokenInAndPoolSalt, (address, bytes32)); _verifyCallback(pool, poolSalt, msg.sender); uint256 amountToPay = uint256(amount1Delta); if (amount0Delta > 0) { amountToPay = uint256(amount0Delta); } TransferHelper.safeTransfer(tokenIn, msg.sender, amountToPay); } function exactInputV3SwapAndGasUsed(ExactInputV3SwapParams calldata params) external payable returns (uint256 returnAmount, uint256 gasUsed) { uint256 gasLeftBefore = gasleft(); returnAmount = _executeV3Swap(params); gasUsed = gasLeftBefore - gasleft(); } function exactInputV3Swap(ExactInputV3SwapParams calldata params) external payable returns (uint256 returnAmount) { returnAmount = _executeV3Swap(params); } function _executeV3Swap(ExactInputV3SwapParams calldata params) internal nonReentrant whenNotPaused returns (uint256 returnAmount) { require(params.pools.length > 0, "Empty pools"); require(params.deadline >= block.timestamp, "Expired"); require(_wrapped_allowed[params.wrappedToken], "Invalid wrapped address"); address tokenIn = params.srcToken; address tokenOut = params.dstToken; uint256 actualAmountIn = calculateTradeFee(true, params.amount, params.fee, params.signature); uint256 toBeforeBalance; bool isToETH; if (TransferHelper.isETH(params.srcToken)) { tokenIn = params.wrappedToken; require(msg.value == params.amount, "Invalid msg.value"); TransferHelper.safeDeposit(params.wrappedToken, actualAmountIn); } else { TransferHelper.safeTransferFrom(params.srcToken, msg.sender, address(this), params.amount); } if (TransferHelper.isETH(params.dstToken)) { tokenOut = params.wrappedToken; toBeforeBalance = IERC20(params.wrappedToken).balanceOf(address(this)); isToETH = true; } else { toBeforeBalance = IERC20(params.dstToken).balanceOf(params.dstReceiver); } { uint256 len = params.pools.length; address recipient = address(this); bytes memory tokenInAndPoolSalt; if (len > 1) { address thisTokenIn = tokenIn; address thisTokenOut = address(0); for (uint256 i; i < len; i++) { uint256 thisPool = params.pools[i]; (thisTokenIn, tokenInAndPoolSalt) = _verifyPool(thisTokenIn, thisTokenOut, thisPool); if (i == len - 1 && !isToETH) { recipient = params.dstReceiver; thisTokenOut = tokenOut; } actualAmountIn = _swap(recipient, thisPool, tokenInAndPoolSalt, actualAmountIn); } returnAmount = actualAmountIn; } else { (, tokenInAndPoolSalt) = _verifyPool(tokenIn, tokenOut, params.pools[0]); if (!isToETH) { recipient = params.dstReceiver; } returnAmount = _swap(recipient, params.pools[0], tokenInAndPoolSalt, actualAmountIn); } } if (isToETH) { returnAmount = IERC20(params.wrappedToken).balanceOf(address(this)).sub(toBeforeBalance); require(returnAmount >= params.minReturnAmount, "Too little received"); TransferHelper.safeWithdraw(params.wrappedToken, returnAmount); TransferHelper.safeTransferETH(params.dstReceiver, returnAmount); } else { returnAmount = IERC20(params.dstToken).balanceOf(params.dstReceiver).sub(toBeforeBalance); require(returnAmount >= params.minReturnAmount, "Too little received"); } _emitTransit(params.srcToken, params.dstToken, params.dstReceiver, params.amount, returnAmount, 0, params.channel); } function _swap(address recipient, uint256 pool, bytes memory tokenInAndPoolSalt, uint256 amount) internal returns (uint256 amountOut) { bool zeroForOne = pool & _ZERO_FOR_ONE_MASK == 0; if (zeroForOne) { (, int256 amount1) = IUniswapV3Pool(address(uint160(pool))).swap( recipient, zeroForOne, amount.toInt256(), MIN_SQRT_RATIO + 1, abi.encode(pool, tokenInAndPoolSalt) ); amountOut = SafeMath.toUint256(-amount1); } else { (int256 amount0,) = IUniswapV3Pool(address(uint160(pool))).swap( recipient, zeroForOne, amount.toInt256(), MAX_SQRT_RATIO - 1, abi.encode(pool, tokenInAndPoolSalt) ); amountOut = SafeMath.toUint256(-amount0); } } function _verifyPool(address tokenIn, address tokenOut, uint256 pool) internal view returns (address nextTokenIn, bytes memory tokenInAndPoolSalt) { IUniswapV3Pool iPool = IUniswapV3Pool(address(uint160(pool))); address token0 = iPool.token0(); address token1 = iPool.token1(); uint24 fee = iPool.fee(); bytes32 poolSalt = keccak256(abi.encode(token0, token1, fee)); bool zeroForOne = pool & _ZERO_FOR_ONE_MASK == 0; if (zeroForOne) { require(tokenIn == token0, "Bad pool"); if (tokenOut != address(0)) { require(tokenOut == token1, "Bad pool"); } nextTokenIn = token1; tokenInAndPoolSalt = abi.encode(token0, poolSalt); } else { require(tokenIn == token1, "Bad pool"); if (tokenOut != address(0)) { require(tokenOut == token0, "Bad pool"); } nextTokenIn = token0; tokenInAndPoolSalt = abi.encode(token1, poolSalt); } } function _verifyCallback(uint256 pool, bytes32 poolSalt, address caller) internal view { uint poolDigit = pool >> 248 & 0xf; UniswapV3Pool memory v3Pool = _uniswapV3_factory_allowed[poolDigit]; require(v3Pool.factory != address(0), "Callback bad pool indexed"); address calcPool = address( uint160( uint256( keccak256( abi.encodePacked( hex'ff', v3Pool.factory, poolSalt, v3Pool.initCodeHash ) ) ) ) ); require(calcPool == caller, "Callback bad pool"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract UniswapV2Router is BaseCore { using SafeMath for uint256; constructor() { } function _beforeSwap(ExactInputV2SwapParams calldata exactInput, bool supportingFeeOn) internal returns (bool isToETH, uint256 actualAmountIn, address[] memory paths, uint256 thisAddressBeforeBalance, uint256 toBeforeBalance) { require(exactInput.path.length == exactInput.pool.length + 1, "Invalid path"); require(_wrapped_allowed[exactInput.wrappedToken], "Invalid wrapped address"); actualAmountIn = calculateTradeFee(true, exactInput.amount, exactInput.fee, exactInput.signature); //检查第一个或最后一个是否为ETH address[] memory path = exactInput.path; address dstToken = path[exactInput.path.length - 1]; if (TransferHelper.isETH(exactInput.path[0])) { require(msg.value == exactInput.amount, "Invalid msg.value"); path[0] = exactInput.wrappedToken; TransferHelper.safeDeposit(exactInput.wrappedToken, actualAmountIn); } else { if (supportingFeeOn) { actualAmountIn = IERC20(path[0]).balanceOf(address(this)); TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), exactInput.amount); actualAmountIn = IERC20(path[0]).balanceOf(address(this)).sub(actualAmountIn).sub(exactInput.fee); } else { TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), exactInput.amount); } } if (TransferHelper.isETH(dstToken)) { path[path.length - 1] = exactInput.wrappedToken; isToETH = true; thisAddressBeforeBalance = IERC20(exactInput.wrappedToken).balanceOf(address(this)); } else { if (supportingFeeOn) { toBeforeBalance = IERC20(dstToken).balanceOf(exactInput.dstReceiver); } } paths = path; } function exactInputV2SwapAndGasUsed(ExactInputV2SwapParams calldata exactInput, uint256 deadline) external payable returns (uint256 returnAmount, uint256 gasUsed) { uint256 gasLeftBefore = gasleft(); returnAmount = _executeV2Swap(exactInput, deadline); gasUsed = gasLeftBefore - gasleft(); } function exactInputV2Swap(ExactInputV2SwapParams calldata exactInput, uint256 deadline) external payable returns (uint256 returnAmount) { returnAmount = _executeV2Swap(exactInput, deadline); } function _executeV2Swap(ExactInputV2SwapParams calldata exactInput, uint256 deadline) internal nonReentrant whenNotPaused returns (uint256 returnAmount) { require(deadline >= block.timestamp, "Expired"); bool supportingFeeOn = exactInput.router >> 248 & 0xf == 1; { (bool isToETH, uint256 actualAmountIn, address[] memory paths, uint256 thisAddressBeforeBalance, uint256 toBeforeBalance) = _beforeSwap(exactInput, supportingFeeOn); TransferHelper.safeTransfer(paths[0], exactInput.pool[0], actualAmountIn); if (supportingFeeOn) { if(isToETH) { _swapSupportingFeeOnTransferTokens(address(uint160(exactInput.router)), paths, exactInput.pool, address(this)); returnAmount = IERC20(exactInput.wrappedToken).balanceOf(address(this)).sub(thisAddressBeforeBalance); } else { _swapSupportingFeeOnTransferTokens(address(uint160(exactInput.router)), paths, exactInput.pool, exactInput.dstReceiver); returnAmount = IERC20(paths[paths.length - 1]).balanceOf(exactInput.dstReceiver).sub(toBeforeBalance); } } else { uint[] memory amounts = IUniswapV2(address(uint160(exactInput.router))).getAmountsOut(actualAmountIn, paths); if(isToETH) { _swap(amounts, paths, exactInput.pool, address(this)); returnAmount = IERC20(exactInput.wrappedToken).balanceOf(address(this)).sub(thisAddressBeforeBalance); } else { _swap(amounts, paths, exactInput.pool, exactInput.dstReceiver); returnAmount = amounts[amounts.length - 1]; } } require(returnAmount >= exactInput.minReturnAmount, "Too little received"); if (isToETH) { TransferHelper.safeWithdraw(exactInput.wrappedToken, returnAmount); TransferHelper.safeTransferETH(exactInput.dstReceiver, returnAmount); } } string memory channel = exactInput.channel; _emitTransit(exactInput.path[0], exactInput.path[exactInput.path.length - 1], exactInput.dstReceiver, exactInput.amount, returnAmount, 0, channel); } function _swap(uint[] memory amounts, address[] memory path, address[] memory pool, address _to) internal { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = input < output ? (input, output) : (output, input); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? pool[i + 1] : _to; IUniswapV2(pool[i]).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function _swapSupportingFeeOnTransferTokens(address router, address[] memory path, address[] memory pool, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = input < output ? (input, output) : (output, input); IUniswapV2 pair = IUniswapV2(pool[i]); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = IUniswapV2(router).getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? pool[i + 1] : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./libs/Pausable.sol"; import "./libs/ReentrancyGuard.sol"; import "./libs/TransferHelper.sol"; import "./libs/RevertReasonParser.sol"; import "./libs/SafeMath.sol"; import "./libs/Ownable.sol"; import "./interfaces/IERC20.sol"; import "./interfaces/IUniswapV2.sol"; import "./interfaces/IUniswapV3Pool.sol"; contract BaseCore is Ownable, Pausable, ReentrancyGuard { using SafeMath for uint256; struct ExactInputV2SwapParams { address dstReceiver; address wrappedToken; uint256 router; uint256 amount; uint256 minReturnAmount; uint256 fee; address[] path; address[] pool; bytes signature; string channel; } struct ExactInputV3SwapParams { address srcToken; address dstToken; address dstReceiver; address wrappedToken; uint256 amount; uint256 minReturnAmount; uint256 fee; uint256 deadline; uint256[] pools; bytes signature; string channel; } struct TransitSwapDescription { address srcToken; address dstToken; address dstReceiver; address wrappedToken; uint256 amount; uint256 minReturnAmount; uint256 fee; string channel; bytes signature; } struct CrossDescription { address srcToken; address dstToken; address caller; address dstReceiver; address wrappedToken; uint256 amount; uint256 fee; uint256 toChain; string channel; bytes calls; bytes signature; } struct CallbytesDescription { address srcToken; bytes calldatas; } struct UniswapV3Pool { address factory; bytes initCodeHash; } uint256 internal _aggregate_fee; uint256 internal _cross_fee; address internal _aggregate_bridge; address internal _fee_signer; bytes32 public DOMAIN_SEPARATOR; //whitelist cross's caller mapping(address => bool) internal _cross_caller_allowed; //whitelist wrapped mapping(address => bool) internal _wrapped_allowed; //whitelist uniswap v3 factory mapping(uint => UniswapV3Pool) internal _uniswapV3_factory_allowed; bytes32 public constant CHECKFEE_TYPEHASH = keccak256("CheckFee(address payer,uint256 amount,uint256 fee)"); event Receipt(address from, uint256 amount); event Withdraw(address indexed token, address indexed executor, address indexed recipient, uint amount); event ChangeWrappedAllowed(address[] wrappedTokens, bool[] newAllowed); event ChangeV3FactoryAllowed(uint256[] poolIndex, address[] factories, bytes[] initCodeHash); event ChangeCrossCallerAllowed(address[] callers); event ChangeFeeRate(bool isAggregate, uint256 newRate); event ChangeSigner(address preSigner, address newSigner); event ChangeAggregateBridge(address newBridge); event TransitSwapped(address indexed srcToken, address indexed dstToken, address indexed dstReceiver, uint256 amount, uint256 returnAmount, uint256 toChainID, string channel); constructor() Ownable(msg.sender) { DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes("TransitSwapV5")), keccak256(bytes("5")), block.chainid, address(this) ) ); } receive() external payable { emit Receipt(msg.sender, msg.value); } function calculateTradeFee(bool isAggregate, uint256 tradeAmount, uint256 fee, bytes calldata signature) internal view returns (uint256) { uint256 thisFee; if (isAggregate) { thisFee = tradeAmount.mul(_aggregate_fee).div(10000); } else { thisFee = tradeAmount.mul(_cross_fee).div(10000); } if (fee < thisFee) { require(verifySignature(tradeAmount, fee, signature), "Invalid signature fee"); } return tradeAmount.sub(fee); } function _emitTransit(address srcToken, address dstToken, address dstReceiver, uint256 amount, uint256 returnAmount, uint256 toChainID, string memory channel) internal { emit TransitSwapped ( srcToken, dstToken, dstReceiver, amount, returnAmount, toChainID, channel ); } function changeFee(bool[] memory isAggregate, uint256[] memory newRate) external onlyExecutor { for (uint i; i < isAggregate.length; i++) { require(newRate[i] >= 0 && newRate[i] <= 1000, "fee rate is:0-1000"); if (isAggregate[i]) { _aggregate_fee = newRate[i]; } else { _cross_fee = newRate[i]; } emit ChangeFeeRate(isAggregate[i], newRate[i]); } } function changeTransitProxy(address aggregator, address signer) external onlyExecutor { if (aggregator != address(0)) { _aggregate_bridge = aggregator; emit ChangeAggregateBridge(aggregator); } if (signer != address(0)) { address preSigner = _fee_signer; _fee_signer = signer; emit ChangeSigner(preSigner, signer); } } function changeAllowed(address[] calldata crossCallers, address[] calldata wrappedTokens) public onlyExecutor { if(crossCallers.length != 0){ for (uint i; i < crossCallers.length; i++) { _cross_caller_allowed[crossCallers[i]] = !_cross_caller_allowed[crossCallers[i]]; } emit ChangeCrossCallerAllowed(crossCallers); } if(wrappedTokens.length != 0) { bool[] memory newAllowed = new bool[](wrappedTokens.length); for (uint index; index < wrappedTokens.length; index++) { _wrapped_allowed[wrappedTokens[index]] = !_wrapped_allowed[wrappedTokens[index]]; newAllowed[index] = _wrapped_allowed[wrappedTokens[index]]; } emit ChangeWrappedAllowed(wrappedTokens, newAllowed); } } function changeUniswapV3FactoryAllowed(uint[] calldata poolIndex, address[] calldata factories, bytes[] calldata initCodeHash) public onlyExecutor { require(poolIndex.length == initCodeHash.length, "invalid data"); require(factories.length == initCodeHash.length, "invalid data"); uint len = factories.length; for (uint i; i < len; i++) { _uniswapV3_factory_allowed[poolIndex[i]] = UniswapV3Pool(factories[i],initCodeHash[i]); } emit ChangeV3FactoryAllowed(poolIndex, factories, initCodeHash); } function changePause(bool paused) external onlyExecutor { if (paused) { _pause(); } else { _unpause(); } } function transitProxyAddress() external view returns (address bridgeProxy, address feeSigner) { bridgeProxy = _aggregate_bridge; feeSigner = _fee_signer; } function transitFee() external view returns (uint256, uint256) { return (_aggregate_fee, _cross_fee); } function transitAllowedQuery(address crossCaller, address wrappedToken, uint256 poolIndex) external view returns (bool isCrossCallerAllowed, bool isWrappedAllowed, UniswapV3Pool memory pool) { isCrossCallerAllowed = _cross_caller_allowed[crossCaller]; isWrappedAllowed = _wrapped_allowed[wrappedToken]; pool = _uniswapV3_factory_allowed[poolIndex]; } function verifySignature(uint256 amount, uint256 fee, bytes calldata signature) internal view returns (bool) { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256(abi.encode(CHECKFEE_TYPEHASH, msg.sender, amount, fee)) ) ); (uint8 v, bytes32 r, bytes32 s) = splitSignature(signature); address recovered = ecrecover(digest, v, r, s); return recovered == _fee_signer; } function splitSignature(bytes memory _signature) internal pure returns (uint8 v, bytes32 r, bytes32 s) { require(bytes(_signature).length == 65, "Invalid signature length"); assembly { r := mload(add(_signature, 0x20)) s := mload(add(_signature, 0x40)) v := byte(0, mload(add(_signature, 0x60))) } return (v, r, s); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV3Pool { function token0() external view returns (address); function token1() external view returns (address); function fee() external view returns (uint24); function swap( address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes calldata data ) external returns (int256 amount0, int256 amount1); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.9; interface IUniswapV2 { function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountsOut(uint amountIn, address[] memory path) external view returns (uint[] memory amounts); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.9; interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function name() external view returns (string memory); function symbol() external view returns (string memory); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // Add executor extension pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable { address private _executor; address private _pendingExecutor; bool internal _initialized; event ExecutorshipTransferStarted(address indexed previousExecutor, address indexed newExecutor); event ExecutorshipTransferred(address indexed previousExecutor, address indexed newExecutor); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor(address newExecutor) { require(!_initialized, "Ownable: initialized"); _transferExecutorship(newExecutor); _initialized = true; } /** * @dev Throws if called by any account other than the executor. */ modifier onlyExecutor() { _checkExecutor(); _; } /** * @dev Returns the address of the current executor. */ function executor() public view virtual returns (address) { return _executor; } /** * @dev Returns the address of the pending executor. */ function pendingExecutor() public view virtual returns (address) { return _pendingExecutor; } /** * @dev Throws if the sender is not the executor. */ function _checkExecutor() internal view virtual { require(executor() == msg.sender, "Ownable: caller is not the executor"); } /** * @dev Transfers executorship of the contract to a new account (`newExecutor`). * Can only be called by the current executor. */ function transferExecutorship(address newExecutor) public virtual onlyExecutor { _pendingExecutor = newExecutor; emit ExecutorshipTransferStarted(executor(), newExecutor); } function _transferExecutorship(address newExecutor) internal virtual { delete _pendingExecutor; address oldExecutor = _executor; _executor = newExecutor; emit ExecutorshipTransferred(oldExecutor, newExecutor); } function acceptExecutorship() external { address sender = msg.sender; require(pendingExecutor() == sender, "Ownable: caller is not the new executor"); _transferExecutorship(sender); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } function div(uint x, uint y) internal pure returns (uint z) { require(y != 0 , 'ds-math-div-zero'); z = x / y; } function toInt256(uint256 value) internal pure returns (int256) { require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; library RevertReasonParser { function parse(bytes memory data, string memory prefix) internal pure returns (string memory) { // https://solidity.readthedocs.io/en/latest/control-structures.html#revert // We assume that revert reason is abi-encoded as Error(string) // 68 = 4-byte selector 0x08c379a0 + 32 bytes offset + 32 bytes length if (data.length >= 68 && data[0] == "\x08" && data[1] == "\xc3" && data[2] == "\x79" && data[3] == "\xa0") { string memory reason; // solhint-disable no-inline-assembly assembly { // 68 = 32 bytes data length + 4-byte selector + 32 bytes offset reason := add(data, 68) } /* revert reason is padded up to 32 bytes with ABI encoder: Error(string) also sometimes there is extra 32 bytes of zeros padded in the end: https://github.com/ethereum/solidity/issues/10170 because of that we can't check for equality and instead check that string length + extra 68 bytes is less than overall data length */ require(data.length >= 68 + bytes(reason).length, "Invalid revert reason"); return string(abi.encodePacked(prefix, "Error(", reason, ")")); } // 36 = 4-byte selector 0x4e487b71 + 32 bytes integer else if (data.length == 36 && data[0] == "\x4e" && data[1] == "\x48" && data[2] == "\x7b" && data[3] == "\x71") { uint256 code; // solhint-disable no-inline-assembly assembly { // 36 = 32 bytes data length + 4-byte selector code := mload(add(data, 36)) } return string(abi.encodePacked(prefix, "Panic(", _toHex(code), ")")); } return string(abi.encodePacked(prefix, "Unknown(", _toHex(data), ")")); } function _toHex(uint256 value) private pure returns(string memory) { return _toHex(abi.encodePacked(value)); } function _toHex(bytes memory data) private pure returns(string memory) { bytes16 alphabet = 0x30313233343536373839616263646566; bytes memory str = new bytes(2 + data.length * 2); str[0] = "0"; str[1] = "x"; for (uint256 i = 0; i < data.length; i++) { str[2 * i + 2] = alphabet[uint8(data[i] >> 4)]; str[2 * i + 3] = alphabet[uint8(data[i] & 0x0f)]; } return string(str); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; library TransferHelper { address private constant _ETH_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); address private constant _ZERO_ADDRESS = address(0); function isETH(address token) internal pure returns (bool) { return (token == _ZERO_ADDRESS || token == _ETH_ADDRESS); } function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_TOKEN_FAILED'); } function safeTransferWithoutRequire(address token, address to, uint256 value) internal returns (bool) { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); return (success && (data.length == 0 || abi.decode(data, (bool)))); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { // solium-disable-next-line (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: TRANSFER_FAILED'); } function safeDeposit(address wrapped, uint value) internal { // bytes4(keccak256(bytes('deposit()'))); (bool success, bytes memory data) = wrapped.call{value:value}(abi.encodeWithSelector(0xd0e30db0)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: DEPOSIT_FAILED'); } function safeWithdraw(address wrapped, uint value) internal { // bytes4(keccak256(bytes('withdraw(uint256 wad)'))); (bool success, bytes memory data) = wrapped.call{value:0}(abi.encodeWithSelector(0x2e1a7d4d, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: WITHDRAW_FAILED'); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); assembly { sstore(_status.slot, _ENTERED) } _; assembly { sstore(_status.slot, _NOT_ENTERED) } } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(msg.sender); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(msg.sender); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newBridge","type":"address"}],"name":"ChangeAggregateBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"callers","type":"address[]"}],"name":"ChangeCrossCallerAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isAggregate","type":"bool"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"ChangeFeeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"preSigner","type":"address"},{"indexed":false,"internalType":"address","name":"newSigner","type":"address"}],"name":"ChangeSigner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"poolIndex","type":"uint256[]"},{"indexed":false,"internalType":"address[]","name":"factories","type":"address[]"},{"indexed":false,"internalType":"bytes[]","name":"initCodeHash","type":"bytes[]"}],"name":"ChangeV3FactoryAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"wrappedTokens","type":"address[]"},{"indexed":false,"internalType":"bool[]","name":"newAllowed","type":"bool[]"}],"name":"ChangeWrappedAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousExecutor","type":"address"},{"indexed":true,"internalType":"address","name":"newExecutor","type":"address"}],"name":"ExecutorshipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousExecutor","type":"address"},{"indexed":true,"internalType":"address","name":"newExecutor","type":"address"}],"name":"ExecutorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Receipt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"srcToken","type":"address"},{"indexed":true,"internalType":"address","name":"dstToken","type":"address"},{"indexed":true,"internalType":"address","name":"dstReceiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"string","name":"channel","type":"string"}],"name":"TransitSwapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"CHECKFEE_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptExecutorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.TransitSwapDescription","name":"desc","type":"tuple"},{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"bytes","name":"calldatas","type":"bytes"}],"internalType":"struct BaseCore.CallbytesDescription","name":"callbytesDesc","type":"tuple"}],"name":"aggregate","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.TransitSwapDescription","name":"desc","type":"tuple"},{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"bytes","name":"calldatas","type":"bytes"}],"internalType":"struct BaseCore.CallbytesDescription","name":"callbytesDesc","type":"tuple"}],"name":"aggregateAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"crossCallers","type":"address[]"},{"internalType":"address[]","name":"wrappedTokens","type":"address[]"}],"name":"changeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool[]","name":"isAggregate","type":"bool[]"},{"internalType":"uint256[]","name":"newRate","type":"uint256[]"}],"name":"changeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"changePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"changeTransitProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"poolIndex","type":"uint256[]"},{"internalType":"address[]","name":"factories","type":"address[]"},{"internalType":"bytes[]","name":"initCodeHash","type":"bytes[]"}],"name":"changeUniswapV3FactoryAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"toChain","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"calls","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.CrossDescription","name":"desc","type":"tuple"}],"name":"cross","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"router","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pool","type":"address[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV2SwapParams","name":"exactInput","type":"tuple"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"exactInputV2Swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"router","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pool","type":"address[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV2SwapParams","name":"exactInput","type":"tuple"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"exactInputV2SwapAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"pools","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV3SwapParams","name":"params","type":"tuple"}],"name":"exactInputV3Swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"pools","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV3SwapParams","name":"params","type":"tuple"}],"name":"exactInputV3SwapAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"pancakeV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newExecutor","type":"address"}],"name":"transferExecutorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"crossCaller","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"name":"transitAllowedQuery","outputs":[{"internalType":"bool","name":"isCrossCallerAllowed","type":"bool"},{"internalType":"bool","name":"isWrappedAllowed","type":"bool"},{"components":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"bytes","name":"initCodeHash","type":"bytes"}],"internalType":"struct BaseCore.UniswapV3Pool","name":"pool","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transitProxyAddress","outputs":[{"internalType":"address","name":"bridgeProxy","type":"address"},{"internalType":"address","name":"feeSigner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506001543390600160a01b900460ff1615620000735760405162461bcd60e51b815260206004820152601460248201527f4f776e61626c653a20696e697469616c697a6564000000000000000000000000604482015260640160405180910390fd5b6200007e8162000177565b506001805461ffff60a01b1916600160a01b1781556002819055604080518082018252600d81526c5472616e73697453776170563560981b60209182015281518083018352928352603560f81b9281019290925280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f928101929092527f20b7d1a4a088b240a0e093c572f43e31015ce187a55e6f343e049dcb744e5341908201527fceebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c160608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600755620001d1565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b615a8e80620001e16000396000f3fe60806040526004361061016a5760003560e01c80636fbf72f9116100d1578063b93c0beb1161008a578063d63234e011610064578063d63234e0146104a3578063d808d889146104c1578063fa461e331461028f578063fa9ec7af146104d4576101a9565b8063b93c0beb1461043e578063b9b5149b1461045e578063c34c08e514610471576101a9565b80636fbf72f91461037d5780637e467ecf146103955780637ec753fe146103c957806392bcc8be146103e957806394d3d79314610409578063afed2d0e1461041e576101a9565b80633644e515116101235780633644e515146102d75780634c42342f146102ed578063524d3685146103005780635c975abb146103205780635d4fead31461034a5780636b3ec4161461036a576101a9565b80630ced9fb9146101e75780630dc4bdae1461021f5780630e8cc705146102405780631975b0961461026057806323a69e751461028f5780632adb806f146102af576101a9565b366101a957604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101b557600080fd5b50600080806101c736600481846148b7565b8101906101d4919061494e565b9250925092506101e58383836104e7565b005b3480156101f357600080fd5b50600554600654604080516001600160a01b039384168152929091166020830152015b60405180910390f35b61023261022d3660046149e0565b610595565b604051908152602001610216565b34801561024c57600080fd5b506101e561025b366004614a72565b6105a8565b34801561026c57600080fd5b5061028061027b366004614b1d565b61072c565b60405161021693929190614bae565b34801561029b57600080fd5b506101e56102aa366004614bec565b61082e565b6102c26102bd366004614c6b565b610875565b60408051928352602083019190915201610216565b3480156102e357600080fd5b5061023260075481565b6102c26102fb366004614cf7565b61089e565b34801561030c57600080fd5b506101e561031b366004614d33565b6108c4565b34801561032c57600080fd5b50600154600160a81b900460ff166040519015158152602001610216565b34801561035657600080fd5b506101e5610365366004614d6f565b61099f565b6101e5610378366004614cf7565b6109c0565b34801561038957600080fd5b506003546004546102c2565b3480156103a157600080fd5b506102327f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156103d557600080fd5b506101e56103e4366004614df2565b610ded565b3480156103f557600080fd5b506101e5610404366004614ef4565b610f74565b34801561041557600080fd5b506101e5611160565b34801561042a57600080fd5b506101e5610439366004614f8d565b6111e3565b34801561044a57600080fd5b506101e5610459366004614faa565b611254565b61023261046c366004614cf7565b611513565b34801561047d57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610216565b3480156104af57600080fd5b506001546001600160a01b031661048b565b6102326104cf366004614c6b565b611524565b6102c26104e23660046149e0565b611530565b60008313806104f65750600082135b6105325760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b600080828060200190518101906105499190615015565b91509150600080828060200190518101906105649190615097565b91509150610573848233611542565b8560008813156105805750865b61058b8333836116fb565b5050505050505050565b60006105a18383611824565b9392505050565b6105b0611d98565b60005b82518110156107275760006105e08483815181106105d3576105d36150c5565b6020026020010151611e0f565b156105f65750476105f18382611e48565b6106a4565b838281518110610608576106086150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067c91906150db565b90506106a2848381518110610693576106936150c5565b60200260200101518483611f05565b505b826001600160a01b0316336001600160a01b03168584815181106106ca576106ca6150c5565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161070c91815260200190565b60405180910390a4508061071f8161510a565b9150506105b3565b505050565b604080518082018252600080825260606020808401919091526001600160a01b038781168352600882528483205487821684526009835285842054878552600a84529386902086518088019097528054909216865260018201805460ff9283169792909516959491938401916107a190615123565b80601f01602080910402602001604051908101604052809291908181526020018280546107cd90615123565b801561081a5780601f106107ef5761010080835404028352916020019161081a565b820191906000526020600020905b8154815290600101906020018083116107fd57829003601f168201915b505050505081525050905093509350939050565b61086f848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104e792505050565b50505050565b60008060005a90506108878585611fef565b92505a6108949082615157565b9150509250929050565b60008060005a90506108af84612584565b92505a6108bc9082615157565b915050915091565b6108cc611d98565b6001600160a01b0382161561092d57600580546001600160a01b0319166001600160a01b0384169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0381161561099b57600680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b5050565b6109a7611d98565b80156109b8576109b5612b08565b50565b6109b5612b59565b60028054036109e15760405162461bcd60e51b81526004016105299061516a565b600280556109ed612b9e565b60006109fd6101208301836151a1565b905011610a465760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008160a0013511610a9a5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60086000610aae6060840160408501614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610b085760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b6044820152606401610529565b600080610b2c8160a085013560c0860135610b276101408801886151a1565b612beb565b9050610b43610b3e6020850185614f8d565b611e0f565b15610c4b578260a001353414610b8f5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b9050806000610ba460a0850160808601614f8d565b6001600160a01b031614610c465760096000610bc660a0860160808701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610bff5760405162461bcd60e51b8152600401610529906151e7565b610c18610c1260a0850160808601614f8d565b83612ca7565b610c41610c2b60a0850160808601614f8d565b610c3b6060860160408701614f8d565b84612da5565b600091505b610c8d565b610c67610c5b6020850185614f8d565b33308660a00135612eb9565b610c8d610c776020850185614f8d565b610c876060860160408701614f8d565b83612da5565b600080610ca06060860160408701614f8d565b6001600160a01b031684610cb86101208801886151a1565b604051610cc692919061521e565b60006040518083038185875af1925050503d8060008114610d03576040519150601f19603f3d011682016040523d82523d6000602084013e610d08565b606091505b509150915081610d5c57610d43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612fe1565b60405162461bcd60e51b8152600401610529919061522e565b50610de39050610d6f6020850185614f8d565b610d7f6040860160208701614f8d565b610d8f6080870160608801614f8d565b60a0870135600060e0890135610da96101008b018b6151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325792505050565b5050600160025550565b610df5611d98565b60005b8251811015610727576000828281518110610e1557610e156150c5565b602002602001015110158015610e4657506103e8828281518110610e3b57610e3b6150c5565b602002602001015111155b610e875760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b6044820152606401610529565b828181518110610e9957610e996150c5565b602002602001015115610ecb57818181518110610eb857610eb86150c5565b6020026020010151600381905550610eec565b818181518110610edd57610edd6150c5565b60200260200101516004819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610f1f57610f1f6150c5565b6020026020010151838381518110610f3957610f396150c5565b6020026020010151604051610f5a9291909115158252602082015260400190565b60405180910390a180610f6c8161510a565b915050610df8565b610f7c611d98565b848114610fba5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b828114610ff85760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b8260005b81811015611115576040518060400160405280878784818110611021576110216150c5565b90506020020160208101906110369190614f8d565b6001600160a01b03168152602001858584818110611056576110566150c5565b905060200281019061106891906151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250600a92508b90508a858181106110b5576110b56150c5565b6020908102929092013583525081810192909252604001600020825181546001600160a01b0319166001600160a01b039091161781559082015160018201906110fe9082615287565b50905050808061110d9061510a565b915050610ffc565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161114f969594939291906153fd565b60405180910390a150505050505050565b33806111746001546001600160a01b031690565b6001600160a01b0316146111da5760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b6064820152608401610529565b6109b5816132bb565b6111eb611d98565b600180546001600160a01b0383166001600160a01b0319909116811790915561121c6000546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61125c611d98565b82156113585760005b8381101561131d5760086000868684818110611283576112836150c5565b90506020020160208101906112989190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff1615906008908787858181106112ce576112ce6150c5565b90506020020160208101906112e39190614f8d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113158161510a565b915050611265565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161134f9291906154b0565b60405180910390a15b801561086f576000816001600160401b03811115611378576113786148e1565b6040519080825280602002602001820160405280156113a1578160200160208202803683370190505b50905060005b828110156114d057600960008585848181106113c5576113c56150c5565b90506020020160208101906113da9190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff161590600990868685818110611410576114106150c5565b90506020020160208101906114259190614f8d565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600990858584818110611465576114656150c5565b905060200201602081019061147a9190614f8d565b6001600160a01b03168152602081019190915260400160002054825160ff909116908390839081106114ae576114ae6150c5565b91151560209283029190910190910152806114c88161510a565b9150506113a7565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e63838383604051611504939291906154c4565b60405180910390a15050505050565b600061151e82612584565b92915050565b60006105a18383611fef565b60008060005a90506108878585611824565b600f60f884901c166000818152600a60209081526040808320815180830190925280546001600160a01b03168252600181018054929391929184019161158790615123565b80601f01602080910402602001604051908101604052809291908181526020018280546115b390615123565b80156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b5050509190925250508151919250506001600160a01b03166116645760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e6465786564000000000000006044820152606401610529565b600081600001518583602001516040516020016116839392919061551f565b6040516020818303038152906040528051906020012060001c9050836001600160a01b0316816001600160a01b0316146116f35760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b6044820152606401610529565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916117579190615568565b6000604051808303816000865af19150503d8060008114611794576040519150601f19603f3d011682016040523d82523d6000602084013e611799565b606091505b50915091508180156117c35750805115806117c35750808060200190518101906117c39190615584565b61181d5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b6064820152608401610529565b5050505050565b600060028054036118475760405162461bcd60e51b81526004016105299061516a565b60028055611853612b9e565b4282101561188d5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b6001600f604085013560f81c16146000808080806118ab8987613315565b9450945094509450945061190f836000815181106118cb576118cb6150c5565b60200260200101518a8060e001906118e391906155a1565b60008181106118f4576118f46150c5565b90506020020160208101906119099190614f8d565b866116fb565b8515611ac85784156119f65761196a60408a01358461193160e08d018d6155a1565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506137e6915050565b6119ef8261197e60408c0160208d01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906150db565b90613af2565b9650611c45565b611a5060408a013584611a0c60e08d018d6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611a4b9250505060208e018e614f8d565b6137e6565b6119ef818460018651611a639190615157565b81518110611a7357611a736150c5565b60200260200101516001600160a01b03166370a082318c6000016020810190611a9c9190614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016119a8565b600089604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611afc9291906155ea565b600060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b419190810190615641565b90508515611baf57611b948185611b5b60e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b48915050565b611ba88361197e60408d0160208e01614f8d565b9750611c43565b611c198185611bc160e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d6000016020810190611c149190614f8d565b613b48565b8060018251611c289190615157565b81518110611c3857611c386150c5565b602002602001015197505b505b8860800135871015611c695760405162461bcd60e51b8152600401610529906156c6565b8415611c9e57611c88611c8260408b0160208c01614f8d565b88613d40565b611c9e611c9860208b018b614f8d565b88611e48565b5050505050600084806101200190611cb691906151a1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350611d8b9250611cff91505060c08701876155a1565b6000818110611d1057611d106150c5565b9050602002016020810190611d259190614f8d565b611d3260c08801886155a1565b6001611d4160c08b018b6155a1565b611d4c929150615157565b818110611d5b57611d5b6150c5565b9050602002016020810190611d709190614f8d565b611d7d6020890189614f8d565b886060013587600087613257565b5050600160025592915050565b33611dab6000546001600160a01b031690565b6001600160a01b031614611e0d5760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b6064820152608401610529565b565b60006001600160a01b038216158061151e57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080516000808252602082019092526001600160a01b038416908390604051611e729190615568565b60006040518083038185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b50509050806107275760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610529565b6000806000856001600160a01b031663a9059cbb8686604051602401611f409291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f799190615568565b6000604051808303816000865af19150503d8060008114611fb6576040519150601f19603f3d011682016040523d82523d6000602084013e611fbb565b606091505b5091509150818015611fe5575080511580611fe5575080806020019051810190611fe59190615584565b9695505050505050565b600060028054036120125760405162461bcd60e51b81526004016105299061516a565b6002805561201e612b9e565b600061202d60208401846151a1565b9050116120765760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008360800135116120ca5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60006120dc6060850160408601614f8d565b6001600160a01b03160361213c5760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b6064820152608401610529565b60008360a00135116121a15760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b6064820152608401610529565b600960006121b56080860160608701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661221e5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964207772617070656420616464726573730000000000000000006044820152606401610529565b600061223d6001608086013560c0870135610b276101008901896151a1565b60055490915060009081906001600160a01b0316612261610b3e6020890189614f8d565b156122b557866080013534146122ad5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b8392506122e8565b6122d16122c56020890189614f8d565b33308a60800135612eb9565b6122e86122e16020890189614f8d565b82866116fb565b6122fb610b3e6040890160208a01614f8d565b15612321576123106060880160408901614f8d565b6001600160a01b03163191506123ba565b6123316040880160208901614f8d565b6001600160a01b03166370a0823161234f60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b791906150db565b91505b600080826001600160a01b031685633f3204d28a6040516024016123de91906156f3565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516124179190615568565b60006040518083038185875af1925050503d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b50915091508161249157610d43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612fe1565b506124a79050610b3e6040890160208a01614f8d565b156124d7576124d0826124c060608a0160408b01614f8d565b6001600160a01b03163190613af2565b945061250c565b612509826124eb60408a0160208b01614f8d565b6001600160a01b03166370a08231611a9c60608c0160408d01614f8d565b94505b8660a001358510156125305760405162461bcd60e51b8152600401610529906156c6565b6125756125406020890189614f8d565b61255060408a0160208b01614f8d565b61256060608b0160408c01614f8d565b60808b0135896000610da960e08f018f6151a1565b50505050600160025592915050565b600060028054036125a75760405162461bcd60e51b81526004016105299061516a565b600280556125b3612b9e565b60006125c36101008401846155a1565b9050116126005760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b6044820152606401610529565b428260e00135101561263e5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b600960006126526080850160608601614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661268b5760405162461bcd60e51b8152600401610529906151e7565b600061269a6020840184614f8d565b905060006126ae6040850160208601614f8d565b905060006126cf6001608087013560c0880135610b276101208a018a6151a1565b90506000806126e4610b3e6020890189614f8d565b15612760576126f96080880160608901614f8d565b9450866080013534146127425760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b61275b6127556080890160608a01614f8d565b84612ca7565b612770565b6127706122c56020890189614f8d565b612783610b3e6040890160208a01614f8d565b1561281f576127986080880160608901614f8d565b93506127aa6080880160608901614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156127f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281491906150db565b9150600190506128b8565b61282f6040880160208901614f8d565b6001600160a01b03166370a0823161284d60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b591906150db565b91505b60006128c86101008901896155a1565b91503090506060600183111561297f57876000805b858110156129745760006128f56101008f018f6155a1565b83818110612905576129056150c5565b905060200201359050612919848483613e58565b95509350612928600188615157565b82148015612934575087155b15612952578d604001602081019061294c9190614f8d565b95508a92505b61295e8682878d614144565b995050808061296c9061510a565b9150506128dd565b50879a5050506129ff565b6129af88886129926101008e018e6155a1565b60008181106129a3576129a36150c5565b90506020020135613e58565b91508490506129cb576129c860608b0160408c01614f8d565b91505b6129fc826129dd6101008d018d6155a1565b60008181106129ee576129ee6150c5565b905060200201358389614144565b98505b5050508015612a7957612a1c8261197e60808a0160608b01614f8d565b95508660a00135861015612a425760405162461bcd60e51b8152600401610529906156c6565b612a5b612a556080890160608a01614f8d565b87613d40565b612a74612a6e6060890160408a01614f8d565b87611e48565b612ab3565b612a8d826124eb60408a0160208b01614f8d565b95508660a00135861015612ab35760405162461bcd60e51b8152600401610529906156c6565b612af9612ac36020890189614f8d565b612ad360408a0160208b01614f8d565b612ae360608b0160408c01614f8d565b60808b01358a6000610da96101408f018f6151a1565b50505050506001600255919050565b612b10612b9e565b6001805460ff60a81b1916600160a81b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b612b616142fc565b6001805460ff60a81b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001612b4f565b600154600160a81b900460ff1615611e0d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610529565b6000808615612c1c57612c15612710612c0f6003548961434c90919063ffffffff16565b906143b3565b9050612c3a565b612c37612710612c0f6004548961434c90919063ffffffff16565b90505b80851015612c9257612c4e86868686614402565b612c925760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b6044820152606401610529565b612c9c8686613af2565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b179052905160009182916001600160a01b038616918591612ced9190615568565b60006040518083038185875af1925050503d8060008114612d2a576040519150601f19603f3d011682016040523d82523d6000602084013e612d2f565b606091505b5091509150818015612d59575080511580612d59575080806020019051810190612d599190615584565b61086f5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c454400006044820152606401610529565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691612e019190615568565b6000604051808303816000865af19150503d8060008114612e3e576040519150601f19603f3d011682016040523d82523d6000602084013e612e43565b606091505b5091509150818015612e6d575080511580612e6d575080806020019051810190612e6d9190615584565b61181d5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610529565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612f1d9190615568565b6000604051808303816000865af19150503d8060008114612f5a576040519150601f19603f3d011682016040523d82523d6000602084013e612f5f565b606091505b5091509150818015612f89575080511580612f89575080806020019051810190612f899190615584565b6116f35760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610529565b6060604483511015801561301a575082600081518110613003576130036150c5565b6020910101516001600160f81b031916600160fb1b145b801561304b575082600181518110613034576130346150c5565b6020910101516001600160f81b03191660c360f81b145b801561307c575082600281518110613065576130656150c5565b6020910101516001600160f81b031916607960f81b145b80156130ad575082600381518110613096576130966150c5565b6020910101516001600160f81b031916600560fd1b145b15613137576044838101805190916130c5919061573f565b8451101561310d5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610529565b8281604051602001613120929190615752565b60405160208183030381529060405291505061151e565b8251602414801561316d575082600081518110613156576131566150c5565b6020910101516001600160f81b031916602760f91b145b801561319e575082600181518110613187576131876150c5565b6020910101516001600160f81b031916600960fb1b145b80156131cf5750826002815181106131b8576131b86150c5565b6020910101516001600160f81b031916607b60f81b145b80156132005750826003815181106131e9576131e96150c5565b6020910101516001600160f81b031916607160f81b145b156132255760248301518261321482614576565b6040516020016131209291906157a1565b8161322f8461459e565b6040516020016132409291906157d6565b604051602081830303815290604052905092915050565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516132aa9493929190615827565b60405180910390a450505050505050565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b6000806060818061332960e08801886155a1565b6133359150600161573f565b61334260c08901896155a1565b9050146133805760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610529565b6009600061339460408a0160208b01614f8d565b6001600160a01b0316815260208101919091526040016000205460ff166133cd5760405162461bcd60e51b8152600401610529906151e7565b6133ea6001606089013560a08a0135610b276101008c018c6151a1565b935060006133fb60c08901896155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093945084925060019150613441905060c08c018c6155a1565b61344c929150615157565b8151811061345c5761345c6150c5565b6020026020010151905061349f898060c0019061347991906155a1565b600081811061348a5761348a6150c5565b9050602002016020810190610b3e9190614f8d565b1561354457886060013534146134eb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b6134fb60408a0160208b01614f8d565b8260008151811061350e5761350e6150c5565b6001600160a01b0390921660209283029190910182015261353f906135399060408c01908c01614f8d565b87612ca7565b613671565b871561365b578160008151811061355d5761355d6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d191906150db565b95506135fd826000815181106135e9576135e96150c5565b602002602001015133308c60600135612eb9565b6136548960a001356119e9888560008151811061361c5761361c6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a08231906024016119a8565b9550613671565b613671826000815181106135e9576135e96150c5565b61367a81611e0f565b1561374a5761368f60408a0160208b01614f8d565b826001845161369e9190615157565b815181106136ae576136ae6150c5565b6001600160a01b03909216602092830291909101820152600197506136d99060408b01908b01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561371f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374391906150db565b93506137d7565b87156137d7576001600160a01b0381166370a0823161376c60208c018c614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156137b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d491906150db565b92505b81945050509295509295909350565b60005b600184516137f79190615157565b81101561181d57600080858381518110613813576138136150c5565b602002602001015186846001613829919061573f565b81518110613839576138396150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b03161061386757818361386a565b82825b5090506000868581518110613881576138816150c5565b60200260200101519050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156138cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f39190615863565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b03161461392d578284613930565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925061396b918491908d16906370a08231906024016119a8565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b81526004016139ae939291909283526020830191909152604082015260600190565b602060405180830381865afa1580156139cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ef91906150db565b945050505050600080856001600160a01b0316886001600160a01b031614613a1957826000613a1d565b6000835b91509150600060028d51613a319190615157565b8a10613a3d578a613a62565b8b613a498b600161573f565b81518110613a5957613a596150c5565b60200260200101515b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613aa490869086908690602481016158b3565b600060405180830381600087803b158015613abe57600080fd5b505af1158015613ad2573d6000803e3d6000fd5b505050505050505050505050508080613aea9061510a565b9150506137e9565b600082613aff8382615157565b915081111561151e5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610529565b60005b60018451613b599190615157565b81101561181d57600080858381518110613b7557613b756150c5565b602002602001015186846001613b8b919061573f565b81518110613b9b57613b9b6150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b031610613bc9578183613bcc565b82825b509050600088613bdd86600161573f565b81518110613bed57613bed6150c5565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613c1b57826000613c1f565b6000835b91509150600060028b51613c339190615157565b8810613c3f5788613c64565b89613c4b89600161573f565b81518110613c5b57613c5b6150c5565b60200260200101515b9050898881518110613c7857613c786150c5565b60200260200101516001600160a01b031663022c0d9f84848460006001600160401b03811115613caa57613caa6148e1565b6040519080825280601f01601f191660200182016040528015613cd4576020820181803683370190505b506040518563ffffffff1660e01b8152600401613cf494939291906158b3565b600060405180830381600087803b158015613d0e57600080fd5b505af1158015613d22573d6000803e3d6000fd5b50505050505050505050508080613d389061510a565b915050613b4b565b600080836001600160a01b03166000632e1a7d4d85604051602401613d6791815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613da09190615568565b60006040518083038185875af1925050503d8060008114613ddd576040519150601f19603f3d011682016040523d82523d6000602084013e613de2565b606091505b5091509150818015613e0c575080511580613e0c575080806020019051810190613e0c9190615584565b61086f5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c4544006044820152606401610529565b6000606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec591906158e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2b91906158e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9191906158fd565b604080516001600160a01b03808716602083015285169181019190915262ffffff8216606082015290915060009060800160408051601f1981840301815291905280516020909101209050600160ff1b881615801561409257846001600160a01b03168b6001600160a01b03161461401b5760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561405b57836001600160a01b03168a6001600160a01b03161461405b5760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b038716602082015290810183905293975087936060016040516020818303038152906040529650614136565b836001600160a01b03168b6001600160a01b0316146140c35760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561410357846001600160a01b03168a6001600160a01b0316146141035760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b505050505050935093915050565b6000600160ff1b8416158015614221576000856001600160a01b031663128acb08888461417088614785565b6141806401000276a36001615944565b8b8b60405160200161419392919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016141c2959493929190615984565b60408051808303816000875af11580156141e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420491906159bf565b91505061421981614214906159e3565b6147f3565b9250506142f3565b6000856001600160a01b031663128acb08888461423d88614785565b61425c600173fffd8963efd1fc6a506488495d951d5263988d266159ff565b8b8b60405160200161426f92919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161429e959493929190615984565b60408051808303816000875af11580156142bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e091906159bf565b5090506142ef614214826159e3565b9250505b50949350505050565b600154600160a81b900460ff16611e0d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610529565b6000811580614370575082826143628183615a1f565b925061436e9083615a36565b145b61151e5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610529565b6000816000036143f85760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b6044820152606401610529565b6105a18284615a36565b600754604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f602082015233918101919091526060810186905260808101859052600091829160a0016040516020818303038152906040528051906020012060405160200161448a92919061190160f01b81526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905060008060006144e687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061484592505050565b92509250925060006001858585856040516000815260200160405260405161452a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561454c573d6000803e3d6000fd5b5050604051601f1901516006546001600160a01b039081169116149b9a5050505050505050505050565b606061151e8260405160200161458e91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b906000906145c6906002615a1f565b6145d190600261573f565b6001600160401b038111156145e8576145e86148e1565b6040519080825280601f01601f191660200182016040528015614612576020820181803683370190505b509050600360fc1b8160008151811061462d5761462d6150c5565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061465c5761465c6150c5565b60200101906001600160f81b031916908160001a90535060005b845181101561477d57826004868381518110614694576146946150c5565b01602001516001600160f81b031916901c60f81c601081106146b8576146b86150c5565b1a60f81b826146c8836002615a1f565b6146d390600261573f565b815181106146e3576146e36150c5565b60200101906001600160f81b031916908160001a9053508285828151811061470d5761470d6150c5565b60209101015160f81c600f1660108110614729576147296150c5565b1a60f81b82614739836002615a1f565b61474490600361573f565b81518110614754576147546150c5565b60200101906001600160f81b031916908160001a905350806147758161510a565b915050614676565b509392505050565b60006001600160ff1b038211156147ef5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610529565b5090565b6000808212156147ef5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610529565b6000806000835160411461489b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610529565b5050506020810151604082015160609092015160001a92909190565b600080858511156148c757600080fd5b838611156148d457600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561491f5761491f6148e1565b604052919050565b60006001600160401b03821115614940576149406148e1565b50601f01601f191660200190565b60008060006060848603121561496357600080fd5b833592506020840135915060408401356001600160401b0381111561498757600080fd5b8401601f8101861361499857600080fd5b80356149ab6149a682614927565b6148f7565b8181528760208385010111156149c057600080fd5b816020840160208301376000602083830101528093505050509250925092565b600080604083850312156149f357600080fd5b82356001600160401b03811115614a0957600080fd5b83016101408186031215614a1c57600080fd5b946020939093013593505050565b60006001600160401b03821115614a4357614a436148e1565b5060051b60200190565b6001600160a01b03811681146109b557600080fd5b8035614a6d81614a4d565b919050565b60008060408385031215614a8557600080fd5b82356001600160401b03811115614a9b57600080fd5b8301601f81018513614aac57600080fd5b80356020614abc6149a683614a2a565b82815260059290921b83018101918181019088841115614adb57600080fd5b938201935b83851015614b02578435614af381614a4d565b82529382019390820190614ae0565b9550614b119050868201614a62565b93505050509250929050565b600080600060608486031215614b3257600080fd5b8335614b3d81614a4d565b92506020840135614b4d81614a4d565b929592945050506040919091013590565b60005b83811015614b79578181015183820152602001614b61565b50506000910152565b60008151808452614b9a816020860160208601614b5e565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201526000602083015160406080840152611fe560a0840182614b82565b60008060008060608587031215614c0257600080fd5b843593506020850135925060408501356001600160401b0380821115614c2757600080fd5b818701915087601f830112614c3b57600080fd5b813581811115614c4a57600080fd5b886020828501011115614c5c57600080fd5b95989497505060200194505050565b60008060408385031215614c7e57600080fd5b82356001600160401b0380821115614c9557600080fd5b908401906101208287031215614caa57600080fd5b90925060208401359080821115614cc057600080fd5b50830160408186031215614cd357600080fd5b809150509250929050565b60006101608284031215614cf157600080fd5b50919050565b600060208284031215614d0957600080fd5b81356001600160401b03811115614d1f57600080fd5b614d2b84828501614cde565b949350505050565b60008060408385031215614d4657600080fd5b8235614d5181614a4d565b91506020830135614cd381614a4d565b80151581146109b557600080fd5b600060208284031215614d8157600080fd5b81356105a181614d61565b600082601f830112614d9d57600080fd5b81356020614dad6149a683614a2a565b82815260059290921b84018101918181019086841115614dcc57600080fd5b8286015b84811015614de75780358352918301918301614dd0565b509695505050505050565b60008060408385031215614e0557600080fd5b82356001600160401b0380821115614e1c57600080fd5b818501915085601f830112614e3057600080fd5b81356020614e406149a683614a2a565b82815260059290921b84018101918181019089841115614e5f57600080fd5b948201945b83861015614e86578535614e7781614d61565b82529482019490820190614e64565b96505086013592505080821115614e9c57600080fd5b5061089485828601614d8c565b60008083601f840112614ebb57600080fd5b5081356001600160401b03811115614ed257600080fd5b6020830191508360208260051b8501011115614eed57600080fd5b9250929050565b60008060008060008060608789031215614f0d57600080fd5b86356001600160401b0380821115614f2457600080fd5b614f308a838b01614ea9565b90985096506020890135915080821115614f4957600080fd5b614f558a838b01614ea9565b90965094506040890135915080821115614f6e57600080fd5b50614f7b89828a01614ea9565b979a9699509497509295939492505050565b600060208284031215614f9f57600080fd5b81356105a181614a4d565b60008060008060408587031215614fc057600080fd5b84356001600160401b0380821115614fd757600080fd5b614fe388838901614ea9565b90965094506020870135915080821115614ffc57600080fd5b5061500987828801614ea9565b95989497509550505050565b6000806040838503121561502857600080fd5b8251915060208301516001600160401b0381111561504557600080fd5b8301601f8101851361505657600080fd5b80516150646149a682614927565b81815286602083850101111561507957600080fd5b61508a826020830160208601614b5e565b8093505050509250929050565b600080604083850312156150aa57600080fd5b82516150b581614a4d565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156150ed57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161511c5761511c6150f4565b5060010190565b600181811c9082168061513757607f821691505b602082108103614cf157634e487b7160e01b600052602260045260246000fd5b8181038181111561151e5761151e6150f4565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000808335601e198436030181126151b857600080fd5b8301803591506001600160401b038211156151d257600080fd5b602001915036819003821315614eed57600080fd5b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8183823760009101908152919050565b6020815260006105a16020830184614b82565b601f82111561072757600081815260208120601f850160051c810160208610156152685750805b601f850160051c820191505b818110156116f357828155600101615274565b81516001600160401b038111156152a0576152a06148e1565b6152b4816152ae8454615123565b84615241565b602080601f8311600181146152e957600084156152d15750858301515b600019600386901b1c1916600185901b1785556116f3565b600085815260208120601f198616915b82811015615318578886015182559484019460019091019084016152f9565b50858210156153365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183526000602080850194508260005b8581101561538457813561536981614a4d565b6001600160a01b031687529582019590820190600101615356565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126153cf57600080fd5b83016020810192503590506001600160401b038111156153ee57600080fd5b803603821315614eed57600080fd5b6060808252810186905260006001600160fb1b0387111561541d57600080fd5b8660051b80896080850137808301905060206080848303018185015261544760808301888a615346565b84810360408601528581529150808201600586901b830182018760005b8881101561549e57858303601f1901845261547f828b6153b8565b61548a85828461538f565b958701959450505090840190600101615464565b50909c9b505050505050505050505050565b602081526000614d2b602083018486615346565b6040815260006154d8604083018587615346565b82810360208481019190915284518083528582019282019060005b818110156155115784511515835293830193918301916001016154f3565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b16600182015282601582015260008251615559816035850160208701614b5e565b91909101603501949350505050565b6000825161557a818460208701614b5e565b9190910192915050565b60006020828403121561559657600080fd5b81516105a181614d61565b6000808335601e198436030181126155b857600080fd5b8301803591506001600160401b038211156155d257600080fd5b6020019150600581901b3603821315614eed57600080fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156156345784516001600160a01b03168352938301939183019160010161560f565b5090979650505050505050565b6000602080838503121561565457600080fd5b82516001600160401b0381111561566a57600080fd5b8301601f8101851361567b57600080fd5b80516156896149a682614a2a565b81815260059190911b820183019083810190878311156156a857600080fd5b928401925b82841015612c9c578351825292840192908401906156ad565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081526000823561570481614a4d565b6001600160a01b0316602083810191909152615722908401846153b8565b60408085015261573660608501828461538f565b95945050505050565b8082018082111561151e5761151e6150f4565b60008351615764818460208801614b5e565b6508ae4e4dee4560d31b9083019081528351615787816006840160208801614b5e565b602960f81b60069290910191820152600701949350505050565b600083516157b3818460208801614b5e565b650a0c2dcd2c6560d31b9083019081528351615787816006840160208801614b5e565b600083516157e8818460208801614b5e565b670aadcd6dcdeeedc560c31b908301908152835161580d816008840160208801614b5e565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201526000611fe56080830184614b82565b80516001600160701b0381168114614a6d57600080fd5b60008060006060848603121561587857600080fd5b6158818461584c565b925061588f6020850161584c565b9150604084015163ffffffff811681146158a857600080fd5b809150509250925092565b84815283602082015260018060a01b0383166040820152608060608201526000611fe56080830184614b82565b6000602082840312156158f257600080fd5b81516105a181614a4d565b60006020828403121561590f57600080fd5b815162ffffff811681146105a157600080fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615964576159646150f4565b5092915050565b828152604060208201526000614d2b6040830184614b82565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090612c9c90830184614b82565b600080604083850312156159d257600080fd5b505080516020909101519092909150565b6000600160ff1b82016159f8576159f86150f4565b5060000390565b6001600160a01b03828116828216039080821115615964576159646150f4565b808202811582820484141761151e5761151e6150f4565b600082615a5357634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220397b9a7e7c4527e2b680d32648a65e1c3283e7250c6c15690d931ae20fb8620964736f6c63430008120033Deployed Bytecode
0x60806040526004361061016a5760003560e01c80636fbf72f9116100d1578063b93c0beb1161008a578063d63234e011610064578063d63234e0146104a3578063d808d889146104c1578063fa461e331461028f578063fa9ec7af146104d4576101a9565b8063b93c0beb1461043e578063b9b5149b1461045e578063c34c08e514610471576101a9565b80636fbf72f91461037d5780637e467ecf146103955780637ec753fe146103c957806392bcc8be146103e957806394d3d79314610409578063afed2d0e1461041e576101a9565b80633644e515116101235780633644e515146102d75780634c42342f146102ed578063524d3685146103005780635c975abb146103205780635d4fead31461034a5780636b3ec4161461036a576101a9565b80630ced9fb9146101e75780630dc4bdae1461021f5780630e8cc705146102405780631975b0961461026057806323a69e751461028f5780632adb806f146102af576101a9565b366101a957604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101b557600080fd5b50600080806101c736600481846148b7565b8101906101d4919061494e565b9250925092506101e58383836104e7565b005b3480156101f357600080fd5b50600554600654604080516001600160a01b039384168152929091166020830152015b60405180910390f35b61023261022d3660046149e0565b610595565b604051908152602001610216565b34801561024c57600080fd5b506101e561025b366004614a72565b6105a8565b34801561026c57600080fd5b5061028061027b366004614b1d565b61072c565b60405161021693929190614bae565b34801561029b57600080fd5b506101e56102aa366004614bec565b61082e565b6102c26102bd366004614c6b565b610875565b60408051928352602083019190915201610216565b3480156102e357600080fd5b5061023260075481565b6102c26102fb366004614cf7565b61089e565b34801561030c57600080fd5b506101e561031b366004614d33565b6108c4565b34801561032c57600080fd5b50600154600160a81b900460ff166040519015158152602001610216565b34801561035657600080fd5b506101e5610365366004614d6f565b61099f565b6101e5610378366004614cf7565b6109c0565b34801561038957600080fd5b506003546004546102c2565b3480156103a157600080fd5b506102327f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156103d557600080fd5b506101e56103e4366004614df2565b610ded565b3480156103f557600080fd5b506101e5610404366004614ef4565b610f74565b34801561041557600080fd5b506101e5611160565b34801561042a57600080fd5b506101e5610439366004614f8d565b6111e3565b34801561044a57600080fd5b506101e5610459366004614faa565b611254565b61023261046c366004614cf7565b611513565b34801561047d57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610216565b3480156104af57600080fd5b506001546001600160a01b031661048b565b6102326104cf366004614c6b565b611524565b6102c26104e23660046149e0565b611530565b60008313806104f65750600082135b6105325760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b600080828060200190518101906105499190615015565b91509150600080828060200190518101906105649190615097565b91509150610573848233611542565b8560008813156105805750865b61058b8333836116fb565b5050505050505050565b60006105a18383611824565b9392505050565b6105b0611d98565b60005b82518110156107275760006105e08483815181106105d3576105d36150c5565b6020026020010151611e0f565b156105f65750476105f18382611e48565b6106a4565b838281518110610608576106086150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067c91906150db565b90506106a2848381518110610693576106936150c5565b60200260200101518483611f05565b505b826001600160a01b0316336001600160a01b03168584815181106106ca576106ca6150c5565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161070c91815260200190565b60405180910390a4508061071f8161510a565b9150506105b3565b505050565b604080518082018252600080825260606020808401919091526001600160a01b038781168352600882528483205487821684526009835285842054878552600a84529386902086518088019097528054909216865260018201805460ff9283169792909516959491938401916107a190615123565b80601f01602080910402602001604051908101604052809291908181526020018280546107cd90615123565b801561081a5780601f106107ef5761010080835404028352916020019161081a565b820191906000526020600020905b8154815290600101906020018083116107fd57829003601f168201915b505050505081525050905093509350939050565b61086f848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104e792505050565b50505050565b60008060005a90506108878585611fef565b92505a6108949082615157565b9150509250929050565b60008060005a90506108af84612584565b92505a6108bc9082615157565b915050915091565b6108cc611d98565b6001600160a01b0382161561092d57600580546001600160a01b0319166001600160a01b0384169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0381161561099b57600680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b5050565b6109a7611d98565b80156109b8576109b5612b08565b50565b6109b5612b59565b60028054036109e15760405162461bcd60e51b81526004016105299061516a565b600280556109ed612b9e565b60006109fd6101208301836151a1565b905011610a465760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008160a0013511610a9a5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60086000610aae6060840160408501614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610b085760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b6044820152606401610529565b600080610b2c8160a085013560c0860135610b276101408801886151a1565b612beb565b9050610b43610b3e6020850185614f8d565b611e0f565b15610c4b578260a001353414610b8f5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b9050806000610ba460a0850160808601614f8d565b6001600160a01b031614610c465760096000610bc660a0860160808701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610bff5760405162461bcd60e51b8152600401610529906151e7565b610c18610c1260a0850160808601614f8d565b83612ca7565b610c41610c2b60a0850160808601614f8d565b610c3b6060860160408701614f8d565b84612da5565b600091505b610c8d565b610c67610c5b6020850185614f8d565b33308660a00135612eb9565b610c8d610c776020850185614f8d565b610c876060860160408701614f8d565b83612da5565b600080610ca06060860160408701614f8d565b6001600160a01b031684610cb86101208801886151a1565b604051610cc692919061521e565b60006040518083038185875af1925050503d8060008114610d03576040519150601f19603f3d011682016040523d82523d6000602084013e610d08565b606091505b509150915081610d5c57610d43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612fe1565b60405162461bcd60e51b8152600401610529919061522e565b50610de39050610d6f6020850185614f8d565b610d7f6040860160208701614f8d565b610d8f6080870160608801614f8d565b60a0870135600060e0890135610da96101008b018b6151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325792505050565b5050600160025550565b610df5611d98565b60005b8251811015610727576000828281518110610e1557610e156150c5565b602002602001015110158015610e4657506103e8828281518110610e3b57610e3b6150c5565b602002602001015111155b610e875760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b6044820152606401610529565b828181518110610e9957610e996150c5565b602002602001015115610ecb57818181518110610eb857610eb86150c5565b6020026020010151600381905550610eec565b818181518110610edd57610edd6150c5565b60200260200101516004819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610f1f57610f1f6150c5565b6020026020010151838381518110610f3957610f396150c5565b6020026020010151604051610f5a9291909115158252602082015260400190565b60405180910390a180610f6c8161510a565b915050610df8565b610f7c611d98565b848114610fba5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b828114610ff85760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b8260005b81811015611115576040518060400160405280878784818110611021576110216150c5565b90506020020160208101906110369190614f8d565b6001600160a01b03168152602001858584818110611056576110566150c5565b905060200281019061106891906151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250600a92508b90508a858181106110b5576110b56150c5565b6020908102929092013583525081810192909252604001600020825181546001600160a01b0319166001600160a01b039091161781559082015160018201906110fe9082615287565b50905050808061110d9061510a565b915050610ffc565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161114f969594939291906153fd565b60405180910390a150505050505050565b33806111746001546001600160a01b031690565b6001600160a01b0316146111da5760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b6064820152608401610529565b6109b5816132bb565b6111eb611d98565b600180546001600160a01b0383166001600160a01b0319909116811790915561121c6000546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61125c611d98565b82156113585760005b8381101561131d5760086000868684818110611283576112836150c5565b90506020020160208101906112989190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff1615906008908787858181106112ce576112ce6150c5565b90506020020160208101906112e39190614f8d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113158161510a565b915050611265565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161134f9291906154b0565b60405180910390a15b801561086f576000816001600160401b03811115611378576113786148e1565b6040519080825280602002602001820160405280156113a1578160200160208202803683370190505b50905060005b828110156114d057600960008585848181106113c5576113c56150c5565b90506020020160208101906113da9190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff161590600990868685818110611410576114106150c5565b90506020020160208101906114259190614f8d565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600990858584818110611465576114656150c5565b905060200201602081019061147a9190614f8d565b6001600160a01b03168152602081019190915260400160002054825160ff909116908390839081106114ae576114ae6150c5565b91151560209283029190910190910152806114c88161510a565b9150506113a7565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e63838383604051611504939291906154c4565b60405180910390a15050505050565b600061151e82612584565b92915050565b60006105a18383611fef565b60008060005a90506108878585611824565b600f60f884901c166000818152600a60209081526040808320815180830190925280546001600160a01b03168252600181018054929391929184019161158790615123565b80601f01602080910402602001604051908101604052809291908181526020018280546115b390615123565b80156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b5050509190925250508151919250506001600160a01b03166116645760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e6465786564000000000000006044820152606401610529565b600081600001518583602001516040516020016116839392919061551f565b6040516020818303038152906040528051906020012060001c9050836001600160a01b0316816001600160a01b0316146116f35760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b6044820152606401610529565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916117579190615568565b6000604051808303816000865af19150503d8060008114611794576040519150601f19603f3d011682016040523d82523d6000602084013e611799565b606091505b50915091508180156117c35750805115806117c35750808060200190518101906117c39190615584565b61181d5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b6064820152608401610529565b5050505050565b600060028054036118475760405162461bcd60e51b81526004016105299061516a565b60028055611853612b9e565b4282101561188d5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b6001600f604085013560f81c16146000808080806118ab8987613315565b9450945094509450945061190f836000815181106118cb576118cb6150c5565b60200260200101518a8060e001906118e391906155a1565b60008181106118f4576118f46150c5565b90506020020160208101906119099190614f8d565b866116fb565b8515611ac85784156119f65761196a60408a01358461193160e08d018d6155a1565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506137e6915050565b6119ef8261197e60408c0160208d01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906150db565b90613af2565b9650611c45565b611a5060408a013584611a0c60e08d018d6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611a4b9250505060208e018e614f8d565b6137e6565b6119ef818460018651611a639190615157565b81518110611a7357611a736150c5565b60200260200101516001600160a01b03166370a082318c6000016020810190611a9c9190614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016119a8565b600089604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611afc9291906155ea565b600060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b419190810190615641565b90508515611baf57611b948185611b5b60e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b48915050565b611ba88361197e60408d0160208e01614f8d565b9750611c43565b611c198185611bc160e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d6000016020810190611c149190614f8d565b613b48565b8060018251611c289190615157565b81518110611c3857611c386150c5565b602002602001015197505b505b8860800135871015611c695760405162461bcd60e51b8152600401610529906156c6565b8415611c9e57611c88611c8260408b0160208c01614f8d565b88613d40565b611c9e611c9860208b018b614f8d565b88611e48565b5050505050600084806101200190611cb691906151a1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350611d8b9250611cff91505060c08701876155a1565b6000818110611d1057611d106150c5565b9050602002016020810190611d259190614f8d565b611d3260c08801886155a1565b6001611d4160c08b018b6155a1565b611d4c929150615157565b818110611d5b57611d5b6150c5565b9050602002016020810190611d709190614f8d565b611d7d6020890189614f8d565b886060013587600087613257565b5050600160025592915050565b33611dab6000546001600160a01b031690565b6001600160a01b031614611e0d5760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b6064820152608401610529565b565b60006001600160a01b038216158061151e57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080516000808252602082019092526001600160a01b038416908390604051611e729190615568565b60006040518083038185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b50509050806107275760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610529565b6000806000856001600160a01b031663a9059cbb8686604051602401611f409291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f799190615568565b6000604051808303816000865af19150503d8060008114611fb6576040519150601f19603f3d011682016040523d82523d6000602084013e611fbb565b606091505b5091509150818015611fe5575080511580611fe5575080806020019051810190611fe59190615584565b9695505050505050565b600060028054036120125760405162461bcd60e51b81526004016105299061516a565b6002805561201e612b9e565b600061202d60208401846151a1565b9050116120765760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008360800135116120ca5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60006120dc6060850160408601614f8d565b6001600160a01b03160361213c5760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b6064820152608401610529565b60008360a00135116121a15760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b6064820152608401610529565b600960006121b56080860160608701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661221e5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964207772617070656420616464726573730000000000000000006044820152606401610529565b600061223d6001608086013560c0870135610b276101008901896151a1565b60055490915060009081906001600160a01b0316612261610b3e6020890189614f8d565b156122b557866080013534146122ad5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b8392506122e8565b6122d16122c56020890189614f8d565b33308a60800135612eb9565b6122e86122e16020890189614f8d565b82866116fb565b6122fb610b3e6040890160208a01614f8d565b15612321576123106060880160408901614f8d565b6001600160a01b03163191506123ba565b6123316040880160208901614f8d565b6001600160a01b03166370a0823161234f60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b791906150db565b91505b600080826001600160a01b031685633f3204d28a6040516024016123de91906156f3565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516124179190615568565b60006040518083038185875af1925050503d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b50915091508161249157610d43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612fe1565b506124a79050610b3e6040890160208a01614f8d565b156124d7576124d0826124c060608a0160408b01614f8d565b6001600160a01b03163190613af2565b945061250c565b612509826124eb60408a0160208b01614f8d565b6001600160a01b03166370a08231611a9c60608c0160408d01614f8d565b94505b8660a001358510156125305760405162461bcd60e51b8152600401610529906156c6565b6125756125406020890189614f8d565b61255060408a0160208b01614f8d565b61256060608b0160408c01614f8d565b60808b0135896000610da960e08f018f6151a1565b50505050600160025592915050565b600060028054036125a75760405162461bcd60e51b81526004016105299061516a565b600280556125b3612b9e565b60006125c36101008401846155a1565b9050116126005760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b6044820152606401610529565b428260e00135101561263e5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b600960006126526080850160608601614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661268b5760405162461bcd60e51b8152600401610529906151e7565b600061269a6020840184614f8d565b905060006126ae6040850160208601614f8d565b905060006126cf6001608087013560c0880135610b276101208a018a6151a1565b90506000806126e4610b3e6020890189614f8d565b15612760576126f96080880160608901614f8d565b9450866080013534146127425760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b61275b6127556080890160608a01614f8d565b84612ca7565b612770565b6127706122c56020890189614f8d565b612783610b3e6040890160208a01614f8d565b1561281f576127986080880160608901614f8d565b93506127aa6080880160608901614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156127f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281491906150db565b9150600190506128b8565b61282f6040880160208901614f8d565b6001600160a01b03166370a0823161284d60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b591906150db565b91505b60006128c86101008901896155a1565b91503090506060600183111561297f57876000805b858110156129745760006128f56101008f018f6155a1565b83818110612905576129056150c5565b905060200201359050612919848483613e58565b95509350612928600188615157565b82148015612934575087155b15612952578d604001602081019061294c9190614f8d565b95508a92505b61295e8682878d614144565b995050808061296c9061510a565b9150506128dd565b50879a5050506129ff565b6129af88886129926101008e018e6155a1565b60008181106129a3576129a36150c5565b90506020020135613e58565b91508490506129cb576129c860608b0160408c01614f8d565b91505b6129fc826129dd6101008d018d6155a1565b60008181106129ee576129ee6150c5565b905060200201358389614144565b98505b5050508015612a7957612a1c8261197e60808a0160608b01614f8d565b95508660a00135861015612a425760405162461bcd60e51b8152600401610529906156c6565b612a5b612a556080890160608a01614f8d565b87613d40565b612a74612a6e6060890160408a01614f8d565b87611e48565b612ab3565b612a8d826124eb60408a0160208b01614f8d565b95508660a00135861015612ab35760405162461bcd60e51b8152600401610529906156c6565b612af9612ac36020890189614f8d565b612ad360408a0160208b01614f8d565b612ae360608b0160408c01614f8d565b60808b01358a6000610da96101408f018f6151a1565b50505050506001600255919050565b612b10612b9e565b6001805460ff60a81b1916600160a81b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b612b616142fc565b6001805460ff60a81b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001612b4f565b600154600160a81b900460ff1615611e0d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610529565b6000808615612c1c57612c15612710612c0f6003548961434c90919063ffffffff16565b906143b3565b9050612c3a565b612c37612710612c0f6004548961434c90919063ffffffff16565b90505b80851015612c9257612c4e86868686614402565b612c925760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b6044820152606401610529565b612c9c8686613af2565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b179052905160009182916001600160a01b038616918591612ced9190615568565b60006040518083038185875af1925050503d8060008114612d2a576040519150601f19603f3d011682016040523d82523d6000602084013e612d2f565b606091505b5091509150818015612d59575080511580612d59575080806020019051810190612d599190615584565b61086f5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c454400006044820152606401610529565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691612e019190615568565b6000604051808303816000865af19150503d8060008114612e3e576040519150601f19603f3d011682016040523d82523d6000602084013e612e43565b606091505b5091509150818015612e6d575080511580612e6d575080806020019051810190612e6d9190615584565b61181d5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610529565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612f1d9190615568565b6000604051808303816000865af19150503d8060008114612f5a576040519150601f19603f3d011682016040523d82523d6000602084013e612f5f565b606091505b5091509150818015612f89575080511580612f89575080806020019051810190612f899190615584565b6116f35760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610529565b6060604483511015801561301a575082600081518110613003576130036150c5565b6020910101516001600160f81b031916600160fb1b145b801561304b575082600181518110613034576130346150c5565b6020910101516001600160f81b03191660c360f81b145b801561307c575082600281518110613065576130656150c5565b6020910101516001600160f81b031916607960f81b145b80156130ad575082600381518110613096576130966150c5565b6020910101516001600160f81b031916600560fd1b145b15613137576044838101805190916130c5919061573f565b8451101561310d5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610529565b8281604051602001613120929190615752565b60405160208183030381529060405291505061151e565b8251602414801561316d575082600081518110613156576131566150c5565b6020910101516001600160f81b031916602760f91b145b801561319e575082600181518110613187576131876150c5565b6020910101516001600160f81b031916600960fb1b145b80156131cf5750826002815181106131b8576131b86150c5565b6020910101516001600160f81b031916607b60f81b145b80156132005750826003815181106131e9576131e96150c5565b6020910101516001600160f81b031916607160f81b145b156132255760248301518261321482614576565b6040516020016131209291906157a1565b8161322f8461459e565b6040516020016132409291906157d6565b604051602081830303815290604052905092915050565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516132aa9493929190615827565b60405180910390a450505050505050565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b6000806060818061332960e08801886155a1565b6133359150600161573f565b61334260c08901896155a1565b9050146133805760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610529565b6009600061339460408a0160208b01614f8d565b6001600160a01b0316815260208101919091526040016000205460ff166133cd5760405162461bcd60e51b8152600401610529906151e7565b6133ea6001606089013560a08a0135610b276101008c018c6151a1565b935060006133fb60c08901896155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093945084925060019150613441905060c08c018c6155a1565b61344c929150615157565b8151811061345c5761345c6150c5565b6020026020010151905061349f898060c0019061347991906155a1565b600081811061348a5761348a6150c5565b9050602002016020810190610b3e9190614f8d565b1561354457886060013534146134eb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b6134fb60408a0160208b01614f8d565b8260008151811061350e5761350e6150c5565b6001600160a01b0390921660209283029190910182015261353f906135399060408c01908c01614f8d565b87612ca7565b613671565b871561365b578160008151811061355d5761355d6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d191906150db565b95506135fd826000815181106135e9576135e96150c5565b602002602001015133308c60600135612eb9565b6136548960a001356119e9888560008151811061361c5761361c6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a08231906024016119a8565b9550613671565b613671826000815181106135e9576135e96150c5565b61367a81611e0f565b1561374a5761368f60408a0160208b01614f8d565b826001845161369e9190615157565b815181106136ae576136ae6150c5565b6001600160a01b03909216602092830291909101820152600197506136d99060408b01908b01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561371f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374391906150db565b93506137d7565b87156137d7576001600160a01b0381166370a0823161376c60208c018c614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156137b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d491906150db565b92505b81945050509295509295909350565b60005b600184516137f79190615157565b81101561181d57600080858381518110613813576138136150c5565b602002602001015186846001613829919061573f565b81518110613839576138396150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b03161061386757818361386a565b82825b5090506000868581518110613881576138816150c5565b60200260200101519050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156138cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f39190615863565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b03161461392d578284613930565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925061396b918491908d16906370a08231906024016119a8565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b81526004016139ae939291909283526020830191909152604082015260600190565b602060405180830381865afa1580156139cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ef91906150db565b945050505050600080856001600160a01b0316886001600160a01b031614613a1957826000613a1d565b6000835b91509150600060028d51613a319190615157565b8a10613a3d578a613a62565b8b613a498b600161573f565b81518110613a5957613a596150c5565b60200260200101515b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613aa490869086908690602481016158b3565b600060405180830381600087803b158015613abe57600080fd5b505af1158015613ad2573d6000803e3d6000fd5b505050505050505050505050508080613aea9061510a565b9150506137e9565b600082613aff8382615157565b915081111561151e5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610529565b60005b60018451613b599190615157565b81101561181d57600080858381518110613b7557613b756150c5565b602002602001015186846001613b8b919061573f565b81518110613b9b57613b9b6150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b031610613bc9578183613bcc565b82825b509050600088613bdd86600161573f565b81518110613bed57613bed6150c5565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613c1b57826000613c1f565b6000835b91509150600060028b51613c339190615157565b8810613c3f5788613c64565b89613c4b89600161573f565b81518110613c5b57613c5b6150c5565b60200260200101515b9050898881518110613c7857613c786150c5565b60200260200101516001600160a01b031663022c0d9f84848460006001600160401b03811115613caa57613caa6148e1565b6040519080825280601f01601f191660200182016040528015613cd4576020820181803683370190505b506040518563ffffffff1660e01b8152600401613cf494939291906158b3565b600060405180830381600087803b158015613d0e57600080fd5b505af1158015613d22573d6000803e3d6000fd5b50505050505050505050508080613d389061510a565b915050613b4b565b600080836001600160a01b03166000632e1a7d4d85604051602401613d6791815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613da09190615568565b60006040518083038185875af1925050503d8060008114613ddd576040519150601f19603f3d011682016040523d82523d6000602084013e613de2565b606091505b5091509150818015613e0c575080511580613e0c575080806020019051810190613e0c9190615584565b61086f5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c4544006044820152606401610529565b6000606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec591906158e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2b91906158e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9191906158fd565b604080516001600160a01b03808716602083015285169181019190915262ffffff8216606082015290915060009060800160408051601f1981840301815291905280516020909101209050600160ff1b881615801561409257846001600160a01b03168b6001600160a01b03161461401b5760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561405b57836001600160a01b03168a6001600160a01b03161461405b5760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b038716602082015290810183905293975087936060016040516020818303038152906040529650614136565b836001600160a01b03168b6001600160a01b0316146140c35760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561410357846001600160a01b03168a6001600160a01b0316146141035760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b505050505050935093915050565b6000600160ff1b8416158015614221576000856001600160a01b031663128acb08888461417088614785565b6141806401000276a36001615944565b8b8b60405160200161419392919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016141c2959493929190615984565b60408051808303816000875af11580156141e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420491906159bf565b91505061421981614214906159e3565b6147f3565b9250506142f3565b6000856001600160a01b031663128acb08888461423d88614785565b61425c600173fffd8963efd1fc6a506488495d951d5263988d266159ff565b8b8b60405160200161426f92919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161429e959493929190615984565b60408051808303816000875af11580156142bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e091906159bf565b5090506142ef614214826159e3565b9250505b50949350505050565b600154600160a81b900460ff16611e0d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610529565b6000811580614370575082826143628183615a1f565b925061436e9083615a36565b145b61151e5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610529565b6000816000036143f85760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b6044820152606401610529565b6105a18284615a36565b600754604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f602082015233918101919091526060810186905260808101859052600091829160a0016040516020818303038152906040528051906020012060405160200161448a92919061190160f01b81526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905060008060006144e687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061484592505050565b92509250925060006001858585856040516000815260200160405260405161452a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561454c573d6000803e3d6000fd5b5050604051601f1901516006546001600160a01b039081169116149b9a5050505050505050505050565b606061151e8260405160200161458e91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b906000906145c6906002615a1f565b6145d190600261573f565b6001600160401b038111156145e8576145e86148e1565b6040519080825280601f01601f191660200182016040528015614612576020820181803683370190505b509050600360fc1b8160008151811061462d5761462d6150c5565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061465c5761465c6150c5565b60200101906001600160f81b031916908160001a90535060005b845181101561477d57826004868381518110614694576146946150c5565b01602001516001600160f81b031916901c60f81c601081106146b8576146b86150c5565b1a60f81b826146c8836002615a1f565b6146d390600261573f565b815181106146e3576146e36150c5565b60200101906001600160f81b031916908160001a9053508285828151811061470d5761470d6150c5565b60209101015160f81c600f1660108110614729576147296150c5565b1a60f81b82614739836002615a1f565b61474490600361573f565b81518110614754576147546150c5565b60200101906001600160f81b031916908160001a905350806147758161510a565b915050614676565b509392505050565b60006001600160ff1b038211156147ef5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610529565b5090565b6000808212156147ef5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610529565b6000806000835160411461489b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610529565b5050506020810151604082015160609092015160001a92909190565b600080858511156148c757600080fd5b838611156148d457600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561491f5761491f6148e1565b604052919050565b60006001600160401b03821115614940576149406148e1565b50601f01601f191660200190565b60008060006060848603121561496357600080fd5b833592506020840135915060408401356001600160401b0381111561498757600080fd5b8401601f8101861361499857600080fd5b80356149ab6149a682614927565b6148f7565b8181528760208385010111156149c057600080fd5b816020840160208301376000602083830101528093505050509250925092565b600080604083850312156149f357600080fd5b82356001600160401b03811115614a0957600080fd5b83016101408186031215614a1c57600080fd5b946020939093013593505050565b60006001600160401b03821115614a4357614a436148e1565b5060051b60200190565b6001600160a01b03811681146109b557600080fd5b8035614a6d81614a4d565b919050565b60008060408385031215614a8557600080fd5b82356001600160401b03811115614a9b57600080fd5b8301601f81018513614aac57600080fd5b80356020614abc6149a683614a2a565b82815260059290921b83018101918181019088841115614adb57600080fd5b938201935b83851015614b02578435614af381614a4d565b82529382019390820190614ae0565b9550614b119050868201614a62565b93505050509250929050565b600080600060608486031215614b3257600080fd5b8335614b3d81614a4d565b92506020840135614b4d81614a4d565b929592945050506040919091013590565b60005b83811015614b79578181015183820152602001614b61565b50506000910152565b60008151808452614b9a816020860160208601614b5e565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201526000602083015160406080840152611fe560a0840182614b82565b60008060008060608587031215614c0257600080fd5b843593506020850135925060408501356001600160401b0380821115614c2757600080fd5b818701915087601f830112614c3b57600080fd5b813581811115614c4a57600080fd5b886020828501011115614c5c57600080fd5b95989497505060200194505050565b60008060408385031215614c7e57600080fd5b82356001600160401b0380821115614c9557600080fd5b908401906101208287031215614caa57600080fd5b90925060208401359080821115614cc057600080fd5b50830160408186031215614cd357600080fd5b809150509250929050565b60006101608284031215614cf157600080fd5b50919050565b600060208284031215614d0957600080fd5b81356001600160401b03811115614d1f57600080fd5b614d2b84828501614cde565b949350505050565b60008060408385031215614d4657600080fd5b8235614d5181614a4d565b91506020830135614cd381614a4d565b80151581146109b557600080fd5b600060208284031215614d8157600080fd5b81356105a181614d61565b600082601f830112614d9d57600080fd5b81356020614dad6149a683614a2a565b82815260059290921b84018101918181019086841115614dcc57600080fd5b8286015b84811015614de75780358352918301918301614dd0565b509695505050505050565b60008060408385031215614e0557600080fd5b82356001600160401b0380821115614e1c57600080fd5b818501915085601f830112614e3057600080fd5b81356020614e406149a683614a2a565b82815260059290921b84018101918181019089841115614e5f57600080fd5b948201945b83861015614e86578535614e7781614d61565b82529482019490820190614e64565b96505086013592505080821115614e9c57600080fd5b5061089485828601614d8c565b60008083601f840112614ebb57600080fd5b5081356001600160401b03811115614ed257600080fd5b6020830191508360208260051b8501011115614eed57600080fd5b9250929050565b60008060008060008060608789031215614f0d57600080fd5b86356001600160401b0380821115614f2457600080fd5b614f308a838b01614ea9565b90985096506020890135915080821115614f4957600080fd5b614f558a838b01614ea9565b90965094506040890135915080821115614f6e57600080fd5b50614f7b89828a01614ea9565b979a9699509497509295939492505050565b600060208284031215614f9f57600080fd5b81356105a181614a4d565b60008060008060408587031215614fc057600080fd5b84356001600160401b0380821115614fd757600080fd5b614fe388838901614ea9565b90965094506020870135915080821115614ffc57600080fd5b5061500987828801614ea9565b95989497509550505050565b6000806040838503121561502857600080fd5b8251915060208301516001600160401b0381111561504557600080fd5b8301601f8101851361505657600080fd5b80516150646149a682614927565b81815286602083850101111561507957600080fd5b61508a826020830160208601614b5e565b8093505050509250929050565b600080604083850312156150aa57600080fd5b82516150b581614a4d565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156150ed57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161511c5761511c6150f4565b5060010190565b600181811c9082168061513757607f821691505b602082108103614cf157634e487b7160e01b600052602260045260246000fd5b8181038181111561151e5761151e6150f4565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000808335601e198436030181126151b857600080fd5b8301803591506001600160401b038211156151d257600080fd5b602001915036819003821315614eed57600080fd5b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8183823760009101908152919050565b6020815260006105a16020830184614b82565b601f82111561072757600081815260208120601f850160051c810160208610156152685750805b601f850160051c820191505b818110156116f357828155600101615274565b81516001600160401b038111156152a0576152a06148e1565b6152b4816152ae8454615123565b84615241565b602080601f8311600181146152e957600084156152d15750858301515b600019600386901b1c1916600185901b1785556116f3565b600085815260208120601f198616915b82811015615318578886015182559484019460019091019084016152f9565b50858210156153365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183526000602080850194508260005b8581101561538457813561536981614a4d565b6001600160a01b031687529582019590820190600101615356565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126153cf57600080fd5b83016020810192503590506001600160401b038111156153ee57600080fd5b803603821315614eed57600080fd5b6060808252810186905260006001600160fb1b0387111561541d57600080fd5b8660051b80896080850137808301905060206080848303018185015261544760808301888a615346565b84810360408601528581529150808201600586901b830182018760005b8881101561549e57858303601f1901845261547f828b6153b8565b61548a85828461538f565b958701959450505090840190600101615464565b50909c9b505050505050505050505050565b602081526000614d2b602083018486615346565b6040815260006154d8604083018587615346565b82810360208481019190915284518083528582019282019060005b818110156155115784511515835293830193918301916001016154f3565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b16600182015282601582015260008251615559816035850160208701614b5e565b91909101603501949350505050565b6000825161557a818460208701614b5e565b9190910192915050565b60006020828403121561559657600080fd5b81516105a181614d61565b6000808335601e198436030181126155b857600080fd5b8301803591506001600160401b038211156155d257600080fd5b6020019150600581901b3603821315614eed57600080fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156156345784516001600160a01b03168352938301939183019160010161560f565b5090979650505050505050565b6000602080838503121561565457600080fd5b82516001600160401b0381111561566a57600080fd5b8301601f8101851361567b57600080fd5b80516156896149a682614a2a565b81815260059190911b820183019083810190878311156156a857600080fd5b928401925b82841015612c9c578351825292840192908401906156ad565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081526000823561570481614a4d565b6001600160a01b0316602083810191909152615722908401846153b8565b60408085015261573660608501828461538f565b95945050505050565b8082018082111561151e5761151e6150f4565b60008351615764818460208801614b5e565b6508ae4e4dee4560d31b9083019081528351615787816006840160208801614b5e565b602960f81b60069290910191820152600701949350505050565b600083516157b3818460208801614b5e565b650a0c2dcd2c6560d31b9083019081528351615787816006840160208801614b5e565b600083516157e8818460208801614b5e565b670aadcd6dcdeeedc560c31b908301908152835161580d816008840160208801614b5e565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201526000611fe56080830184614b82565b80516001600160701b0381168114614a6d57600080fd5b60008060006060848603121561587857600080fd5b6158818461584c565b925061588f6020850161584c565b9150604084015163ffffffff811681146158a857600080fd5b809150509250925092565b84815283602082015260018060a01b0383166040820152608060608201526000611fe56080830184614b82565b6000602082840312156158f257600080fd5b81516105a181614a4d565b60006020828403121561590f57600080fd5b815162ffffff811681146105a157600080fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615964576159646150f4565b5092915050565b828152604060208201526000614d2b6040830184614b82565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090612c9c90830184614b82565b600080604083850312156159d257600080fd5b505080516020909101519092909150565b6000600160ff1b82016159f8576159f86150f4565b5060000390565b6001600160a01b03828116828216039080821115615964576159646150f4565b808202811582820484141761151e5761151e6150f4565b600082615a5357634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220397b9a7e7c4527e2b680d32648a65e1c3283e7250c6c15690d931ae20fb8620964736f6c63430008120033
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingOVERVIEW
Transit Swap integrates the most popular DEXs of public chains, selects and combines their advantages intelligently to provide better depth for your transactions and return more target tokens.
Loading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value ETH 97.93% $0.9943 98,185,351,653.6841 $97,625,695,149.26 ETH <0.01% $0.997956 169,046.7754 $168,701.24 ETH <0.01% $3,407.22 14.1588 $48,242.06 ETH <0.01% $0.028113 204,918.8809 $5,760.94 ETH <0.01% $0.014392 225,435.972 $3,244.55 ETH <0.01% $0.005047 539,020.0913 $2,720.35 ETH <0.01% $0.999726 1,825.2536 $1,824.75 ETH <0.01% $1.62 636.6425 $1,031.36 ETH <0.01% $0.000167 5,644,577.134 $940.73 ETH <0.01% <$0.000001 67,746,861,412.9716 $879.02 ETH <0.01% $0.909013 820.6695 $746 ETH <0.01% <$0.000001 32,272,741,428.3639 $711.55 ETH <0.01% $0.121624 5,572.2309 $677.72 ETH <0.01% $0.082738 6,750.9984 $558.56 ETH <0.01% <$0.000001 18,686,804,838.0528 $515.42 ETH <0.01% $0.00658 77,750.6487 $511.61 ETH <0.01% $0.280832 1,472.8291 $413.62 ETH <0.01% $3,510.86 0.1158 $406.71 ETH <0.01% $0.000018 20,578,890.4309 $379.68 ETH <0.01% $92,951 0.00373146 $346.84 ETH <0.01% $0.272365 1,204.8241 $328.15 ETH <0.01% $3,510.12 0.0885 $310.63 ETH <0.01% $0.585599 480.4407 $281.35 ETH <0.01% $13.36 17.7362 $236.96 ETH <0.01% $1.07 219.2317 $235.28 ETH <0.01% $0.000002 105,253,004.3113 $224.73 ETH <0.01% $3,406.85 0.065 $221.58 ETH <0.01% <$0.000001 1,312,295,249.8388 $220.02 ETH <0.01% $0.52277 417.0388 $218.02 ETH <0.01% $0.948424 228.8886 $217.08 ETH <0.01% $9.1 23.3238 $212.25 ETH <0.01% $0.000164 1,232,780.85 $201.57 ETH <0.01% $0.011037 17,985.7109 $198.51 ETH <0.01% $0.000257 765,638.2667 $196.49 ETH <0.01% $0.009403 20,662.6159 $194.29 ETH <0.01% <$0.000001 425,060,678.7577 $192.17 ETH <0.01% $3,766.8 0.0504 $189.89 ETH <0.01% $0.000017 10,822,289.8693 $188.03 ETH <0.01% $6.05 30.935 $187.16 ETH <0.01% $0.80395 231.5468 $186.15 ETH <0.01% <$0.000001 2,015,159,998.7976 $178.11 ETH <0.01% $3,566.9 0.0492 $175.36 ETH <0.01% $0.000047 3,717,660.6106 $174.71 ETH <0.01% $3,407.22 0.0493 $167.83 ETH <0.01% $21.16 7.8059 $165.17 ETH <0.01% <$0.000001 8,602,623,306.8832 $161.8 ETH <0.01% $0.060853 2,519.8499 $153.34 ETH <0.01% $0.090287 1,551.9895 $140.12 ETH <0.01% $0.049137 2,825.1194 $138.82 ETH <0.01% $335.99 0.3904 $131.16 ETH <0.01% $0.000977 133,523.8095 $130.44 ETH <0.01% $33.81 3.812 $128.88 ETH <0.01% $0.000001 184,981,858.1987 $126.61 ETH <0.01% $0.032866 3,835.6838 $126.07 ETH <0.01% $0.022195 5,583.9423 $123.94 ETH <0.01% $0.000023 5,222,236.1523 $120.89 ETH <0.01% $324.49 0.3724 $120.85 ETH <0.01% <$0.000001 899,213,708.7859 $119.66 ETH <0.01% $0.132613 888.3181 $117.8 ETH <0.01% <$0.000001 25,868,164,963.1409 $113.51 ETH <0.01% $0.000033 3,398,611.6379 $113.23 ETH <0.01% $193.04 0.5799 $111.94 ETH <0.01% $0.173259 643.9672 $111.57 ETH <0.01% $2.36 46.9271 $110.59 ETH <0.01% $5.57 19.8108 $110.35 ETH <0.01% $0.002545 43,177.5994 $109.87 ETH <0.01% $0.177225 609.0581 $107.94 ETH <0.01% $1.4 76.919 $107.69 ETH <0.01% <$0.000001 5,307,778,389.3332 $106.36 ETH <0.01% $1.18 90.0972 $106.31 ETH <0.01% $0.026055 4,057.2056 $105.71 ETH <0.01% $0.066677 1,544.3289 $102.97 ETH <0.01% <$0.000001 208,080,265,998.053 $102.52 ETH <0.01% $1.18 85.5596 $100.96 ETH <0.01% $0.004197 23,593.6318 $99.03 ETH <0.01% $0.043438 2,239.0841 $97.26 ETH <0.01% $0.440683 218.1436 $96.13 ETH <0.01% $1.25 76.5739 $95.72 ETH <0.01% $0.000005 17,248,664.4651 $93.14 ETH <0.01% $0.759433 121.7428 $92.46 ETH <0.01% $0.404853 226.7159 $91.79 ETH <0.01% $3,522.69 0.026 $91.7 ETH <0.01% $0.000006 14,094,755.911 $91.33 ETH <0.01% $0.634928 143.096 $90.86 ETH <0.01% <$0.000001 28,707,394,988.0953 $90.11 ETH <0.01% $0.000002 40,998,830.1297 $88.81 ETH <0.01% $0.000643 137,524.0434 $88.48 ETH <0.01% $0.062739 1,400.4923 $87.87 ETH <0.01% $0.000065 1,344,327.3848 $87.84 ETH <0.01% <$0.000001 7,573,023,987.566 $87.38 ETH <0.01% $0.000001 99,959,793.5658 $87.17 ETH <0.01% $0.084561 1,021.6478 $86.39 ETH <0.01% $0.026876 3,210.1282 $86.27 ETH <0.01% $0.000543 158,529.3422 $86.05 ETH <0.01% $0.005728 14,989.643 $85.86 ETH <0.01% $0.033041 2,582.0992 $85.31 ETH <0.01% $0.999103 85.352 $85.28 ETH <0.01% $0.001465 57,500.858 $84.25 ETH <0.01% $0.002235 37,312.5427 $83.38 ETH <0.01% $0.008338 9,943.2758 $82.91 ETH <0.01% $0.000005 18,085,211.8501 $82.83 ETH <0.01% <$0.000001 264,114,427.8556 $82.28 ETH <0.01% $0.01292 6,239.4473 $80.61 ETH <0.01% $0.471176 169.3432 $79.79 ETH <0.01% $2.66 29.7966 $79.26 ETH <0.01% $3,674.96 0.0214 $78.5 ETH <0.01% <$0.000001 201,152,624,797.1755 $78.21 ETH <0.01% <$0.000001 523,458,166.0101 $77.94 ETH <0.01% <$0.000001 13,075,583,672.4578 $77.45 ETH <0.01% $3.57 21.6393 $77.25 ETH <0.01% $3,537.18 0.0217 $76.82 ETH <0.01% $275.56 0.2779 $76.57 ETH <0.01% $1.67 45.8132 $76.51 ETH <0.01% $0.937034 81.3167 $76.2 ETH <0.01% $0.00085 89,286.3554 $75.92 ETH <0.01% $0.00015 500,997.5306 $75.26 ETH <0.01% <$0.000001 109,337,446,453.2593 $75.03 ETH <0.01% <$0.000001 1,219,169,628.439 $72.73 ETH <0.01% <$0.000001 541,972,471.8451 $72.32 ETH <0.01% $0.001519 47,406.2321 $72 ETH <0.01% $5.48 13.0272 $71.37 ETH <0.01% $0.072069 987.7949 $71.19 ETH <0.01% $0.000238 295,095.2322 $70.09 ETH <0.01% $0.000024 2,895,565.0319 $69 ETH <0.01% <$0.000001 19,117,623,280.541 $68.94 ETH <0.01% $1.3 52.4934 $68.24 ETH <0.01% $0.000285 238,416.2091 $68.06 ETH <0.01% $15.61 4.3481 $67.87 ETH <0.01% $0.000008 8,595,383.4504 $67.56 ETH <0.01% $0.000005 12,707,112.4722 $67.47 ETH <0.01% <$0.000001 909,460,487.2267 $67.28 ETH <0.01% <$0.000001 283,738,332.0624 $66.87 ETH <0.01% $0.260686 255.2172 $66.53 ETH <0.01% <$0.000001 3,721,849,424.5829 $65.74 ETH <0.01% $1.11 59.0968 $65.6 ETH <0.01% $6.87 9.4562 $64.96 ETH <0.01% $0.141233 459.2138 $64.86 ETH <0.01% $0.044551 1,446.4895 $64.44 ETH <0.01% <$0.000001 249,341,014,178.214 $64.42 ETH <0.01% <$0.000001 644,820,034.936 $63.57 ETH <0.01% <$0.000001 6,657,829,323.5367 $63.54 ETH <0.01% $3,485.64 0.018 $62.73 ETH <0.01% $0.629745 98.9815 $62.33 ETH <0.01% $0.000013 4,953,905.4098 $62.08 ETH <0.01% $3,522.84 0.0176 $61.89 ETH <0.01% $0.000001 113,261,241.8107 $61.13 ETH <0.01% $0.000448 136,290.5938 $61.01 ETH <0.01% <$0.000001 102,744,206,581.3877 $60.98 ETH <0.01% $1.86 32.7494 $60.95 ETH <0.01% $0.144329 421.8804 $60.89 ETH <0.01% $0.129984 467.8247 $60.81 ETH <0.01% <$0.000001 291,298,261,595.7436 $60.79 ETH <0.01% <$0.000001 637,684,982.481 $60.54 ETH <0.01% $0.000001 43,141,081.6934 $60.42 ETH <0.01% $0.001264 47,454.2867 $60 ETH <0.01% $263,069.39 0.00022794 $59.96 ETH <0.01% <$0.000001 695,017,578,254.036 $59.81 ETH <0.01% $0.550261 107.7287 $59.28 ETH <0.01% $0.004952 11,956.2482 $59.21 ETH <0.01% $6.5 9.0457 $58.81 ETH <0.01% $0.000312 187,906.239 $58.68 ETH <0.01% $0.006923 8,437.5964 $58.42 ETH <0.01% <$0.000001 79,162,292,754.6944 $58.34 ETH <0.01% <$0.000001 14,375,868,163.7819 $56.86 ETH <0.01% $0.000022 2,628,638.7211 $56.62 ETH <0.01% $0.895136 62.8787 $56.29 ETH <0.01% <$0.000001 13,243,759,329.1059 $55.39 ETH <0.01% <$0.000001 173,858,321.7452 $55.15 ETH <0.01% $0.000002 26,580,965.0824 $55.02 ETH <0.01% $0.000002 24,703,070.9938 $54.87 ETH <0.01% $0.118645 462.2934 $54.85 ETH <0.01% $0.000007 7,265,538.039 $54.13 ETH <0.01% $3.19 16.9158 $53.96 ETH <0.01% <$0.000001 15,039,153,382.3535 $53.75 ETH <0.01% $0.261227 205.6581 $53.72 ETH <0.01% $0.000489 109,820.6903 $53.7 ETH <0.01% $0.021835 2,432.0702 $53.1 ETH <0.01% $0.059843 886.5036 $53.05 ETH <0.01% $0.000002 27,434,296.4145 $52.67 ETH <0.01% $0.000003 20,818,533.0045 $52.57 ETH <0.01% <$0.000001 37,534,758,049.5921 $52.44 ETH <0.01% $0.000001 54,205,658.1093 $52.38 ETH <0.01% $5,836.54 0.00894578 $52.21 ETH <0.01% $0.001131 46,046.3823 $52.06 ETH <0.01% <$0.000001 2,328,747,330.8688 $51.81 ETH <0.01% <$0.000001 5,538,576,586.7589 $51.6 ETH <0.01% <$0.000001 12,345,343,876.6353 $51.04 ETH <0.01% $3.55 14.3696 $51.01 ETH <0.01% $0.036293 1,402.515 $50.9 ETH <0.01% $0.000001 71,821,144.7049 $50.62 ETH <0.01% <$0.000001 182,986,542,975.4122 $50.58 ETH <0.01% <$0.000001 15,939,640,323,927.203 $50.37 ETH <0.01% $696.1 0.0724 $50.37 ETH <0.01% $0.000006 8,156,429.6594 $50 ETH <0.01% $0.497845 100.3456 $49.96 ETH <0.01% $1.23 40.5191 $49.84 ETH <0.01% $4.05 12.2686 $49.69 ETH <0.01% $0.756031 65.4655 $49.49 ETH <0.01% $0.006286 7,868.7649 $49.46 ETH <0.01% $0.056026 881.7893 $49.4 ETH <0.01% $1,644.86 0.03 $49.35 ETH <0.01% $0.256453 191.5195 $49.12 ETH <0.01% $2.32 21.1312 $49.02 ETH <0.01% $2,633.69 0.0186 $48.9 ETH <0.01% $0.004502 10,816.5913 $48.7 ETH <0.01% $0.000012 4,140,490.3745 $48.63 ETH <0.01% <$0.000001 279,213,815.1904 $48.58 ETH <0.01% $0.052697 921.3408 $48.55 ETH <0.01% $0.000045 1,066,847.4099 $48.27 ETH <0.01% <$0.000001 22,124,749,354,124.668 $48.07 ETH <0.01% $0.485726 98.5527 $47.87 ETH <0.01% $0.005906 8,065.814 $47.64 ETH <0.01% <$0.000001 16,516,956,681.0838 $47.62 ETH <0.01% $59.53 0.7997 $47.61 ETH <0.01% $0.007053 6,747.1741 $47.59 ETH <0.01% $1.38 34.4482 $47.54 ETH <0.01% $0.024638 1,928.3497 $47.51 ETH <0.01% $0.158467 299.7814 $47.51 ETH <0.01% $0.181599 261.213 $47.44 ETH <0.01% $0.000003 13,774,895.2855 $46.92 ETH <0.01% $1.07 43.8483 $46.87 ETH <0.01% $27.41 1.7 $46.6 ETH <0.01% $0.260619 178.5107 $46.52 ETH <0.01% <$0.000001 3,395,248,375.3556 $46.48 ETH <0.01% $0.006056 7,659.4663 $46.39 ETH <0.01% <$0.000001 4,303,470,321.1038 $46.1 ETH <0.01% <$0.000001 27,027,441,503,640.336 $46.03 ETH <0.01% <$0.000001 1,734,900,317.7585 $46.01 ETH <0.01% <$0.000001 239,554,578.095 $45.93 ETH <0.01% $0.000197 232,197.1625 $45.76 ETH <0.01% $2.05 22.3237 $45.76 ETH <0.01% $0.000433 105,587.7422 $45.76 ETH <0.01% $8.6 5.2988 $45.57 ETH <0.01% $0.033272 1,364.8929 $45.41 ETH <0.01% $0.625547 71.6217 $44.8 ETH <0.01% $0.401599 111.4638 $44.76 ETH <0.01% $0.001208 37,045.2006 $44.75 ETH <0.01% $0.066218 673.5699 $44.6 ETH <0.01% $0.344323 128.4627 $44.23 ETH <0.01% $0.01088 4,058.0204 $44.15 ETH <0.01% $0.583963 75.5529 $44.12 ETH <0.01% $0.00008 553,551.355 $44.12 ETH <0.01% $0.000001 50,803,699.2376 $43.77 ETH <0.01% $0.270204 161.2376 $43.57 ETH <0.01% $0.000966 45,068.4301 $43.53 ETH <0.01% $2.89 14.9675 $43.26 ETH <0.01% $0.49292 87.7208 $43.24 ETH <0.01% <$0.000001 190,723,942.3779 $43.19 ETH <0.01% $0.003036 14,209.8011 $43.15 ETH <0.01% $0.412973 103.5825 $42.78 ETH <0.01% $0.005145 8,306.9222 $42.74 ETH <0.01% $1.09 38.9257 $42.46 ETH <0.01% $1.1 38.2658 $42.05 ETH <0.01% $1.51 27.8382 $42.04 ETH <0.01% $0.025809 1,627.0412 $41.99 ETH <0.01% <$0.000001 204,551,748.069 $41.34 ETH <0.01% $0.044477 929.3176 $41.33 ETH <0.01% $3.58 11.5409 $41.32 ETH <0.01% $16.37 2.5234 $41.31 ETH <0.01% $0.036661 1,126.395 $41.3 ETH <0.01% $1.48 27.8063 $41.23 ETH <0.01% $0.000176 233,530.0307 $41.16 ETH <0.01% $0.003932 10,446.8076 $41.08 ETH <0.01% <$0.000001 13,682,461,095.547 $40.95 ETH <0.01% $1.45 27.9353 $40.6 ETH <0.01% $1.49 27.1927 $40.52 ETH <0.01% <$0.000001 220,973,045.3055 $40.35 ETH <0.01% $1.2 33.5403 $40.25 ETH <0.01% $0.466896 85.5936 $39.96 ETH <0.01% $0.049178 811.5304 $39.91 ETH <0.01% $0.469853 84.6725 $39.78 ETH <0.01% $0.996471 39.723 $39.58 ETH <0.01% $0.000053 743,413.3606 $39.42 ETH <0.01% $0.166124 236.2747 $39.25 ETH <0.01% $0.000138 282,592.1597 $39.11 ETH <0.01% $0.001068 36,626.1478 $39.1 ETH <0.01% $0.051106 764.2412 $39.06 ETH <0.01% $0.000002 21,089,582.0923 $38.94 ETH <0.01% <$0.000001 8,762,051,989.3238 $38.82 ETH <0.01% $0.004868 7,947.4318 $38.69 ETH <0.01% <$0.000001 62,383,121,381,001.859 $38.35 ETH <0.01% <$0.000001 110,517,993.9775 $38.32 ETH <0.01% $0.001711 22,377.3025 $38.29 ETH <0.01% $0.001118 34,210.3641 $38.24 ETH <0.01% $1.64 23.1332 $37.94 ETH <0.01% $0.004586 8,259.0926 $37.87 ETH <0.01% $0.000066 568,641.6039 $37.57 ETH <0.01% $0.00215 17,380.9044 $37.37 ETH <0.01% $0.057643 641.7292 $36.99 ETH <0.01% $44.11 0.8329 $36.74 ETH <0.01% $0.017053 2,154.4121 $36.74 ETH <0.01% $0.000001 48,942,875.5149 $36.71 ETH <0.01% <$0.000001 214,077,878.6545 $36.6 ETH <0.01% $0.518127 70.6028 $36.58 ETH <0.01% $0.002955 12,313.5084 $36.39 ETH <0.01% <$0.000001 354,633,502.6213 $36.12 ETH <0.01% $0.000319 113,033.9607 $36.08 ETH <0.01% $0.007321 4,921.3025 $36.03 ETH <0.01% $0.012577 2,859.7867 $35.97 ETH <0.01% $0.612852 58.6676 $35.95 ETH <0.01% <$0.000001 175,648,114.8141 $35.72 ETH <0.01% $0.126096 283.1788 $35.71 ETH <0.01% $1.38 25.7105 $35.48 ETH <0.01% <$0.000001 3,835,559,303.922 $35.47 ETH <0.01% $0.000879 40,345.3996 $35.47 ETH <0.01% $1.87 18.9308 $35.4 ETH <0.01% <$0.000001 440,507,722.8997 $35.37 ETH <0.01% $110.01 0.3214 $35.35 ETH <0.01% $2.03 17.3528 $35.23 ETH <0.01% $0.000082 425,669.6622 $35.1 ETH <0.01% $0.027807 1,259.7454 $35.03 ETH <0.01% <$0.000001 323,249,267,443.7305 $34.77 ETH <0.01% $1.46 23.6728 $34.56 ETH <0.01% $0.214804 160.6341 $34.5 ETH <0.01% <$0.000001 44,323,034,788.2047 $34.46 ETH <0.01% $0.000259 132,445.8969 $34.27 ETH <0.01% $0.103994 327.3928 $34.05 ETH <0.01% $0.014631 2,325.3822 $34.02 ETH <0.01% $0.005406 6,266.2643 $33.87 ETH <0.01% $0.65458 51.3779 $33.63 ETH <0.01% <$0.000001 286,632,777.6051 $33.58 ETH <0.01% $0.005099 6,544.8582 $33.37 ETH <0.01% $0.000042 796,396.7394 $33.37 ETH <0.01% $0.004845 6,886.3872 $33.37 ETH <0.01% $0.93487 35.5662 $33.25 ETH <0.01% $5.3 6.2685 $33.22 ETH <0.01% $1.21 27.4042 $33.14 ETH <0.01% $0.000001 49,274,128.5923 $33.1 ETH <0.01% $0.000162 203,434.9046 $32.93 ETH <0.01% $0.001053 30,883.4718 $32.52 ETH <0.01% $0.446731 72.663 $32.46 ETH <0.01% $0.073578 439.8933 $32.37 ETH <0.01% <$0.000001 1,514,478,580.0411 $32.21 ETH <0.01% $0.543009 59.0095 $32.04 ETH <0.01% $8.05 3.9752 $32 ETH <0.01% $0.00009 354,213.4436 $31.99 ETH <0.01% $0.001282 24,884.3313 $31.9 ETH <0.01% <$0.000001 306,125,998.8641 $31.9 ETH <0.01% $0.851368 37.4459 $31.88 ETH <0.01% $0.0388 820.0404 $31.82 ETH <0.01% $0.000294 108,153.1508 $31.8 ETH <0.01% <$0.000001 88,651,031.3141 $31.77 ETH <0.01% $0.000004 7,417,935.4377 $31.45 ETH <0.01% $12.13 2.5898 $31.42 ETH <0.01% <$0.000001 61,773,554,927.5645 $31.36 ETH <0.01% <$0.000001 946,643,836,996.6482 $31.36 ETH <0.01% $0.000151 207,675.7944 $31.34 ETH <0.01% $0.000255 122,957.9569 $31.3 ETH <0.01% $0.000001 26,497,593.9525 $31.27 ETH <0.01% $0.04055 766.2297 $31.07 ETH <0.01% $0.297364 104.4504 $31.06 ETH <0.01% <$0.000001 68,112,038.9528 $30.9 ETH <0.01% <$0.000001 185,868,971.4102 $30.81 ETH <0.01% $0.983744 31.2586 $30.75 ETH <0.01% <$0.000001 77,405,652,446.4525 $30.72 ETH <0.01% $0.000928 32,983.7141 $30.6 ETH <0.01% $0.084274 362.157 $30.52 ETH <0.01% $78.06 0.3909 $30.52 ETH <0.01% $0.025232 1,206.6302 $30.45 ETH <0.01% $0.000547 55,595.1471 $30.4 ETH <0.01% $0.000007 4,107,102.6877 $30.35 ETH <0.01% <$0.000001 36,456,600,724.306 $30.3 ETH <0.01% $0.000139 217,533.7347 $30.26 ETH <0.01% $0.001048 28,797.0633 $30.17 ETH <0.01% <$0.000001 1,210,801,390.1357 $30.16 ETH <0.01% <$0.000001 5,286,097,907.5019 $30.16 ETH <0.01% $1.64 18.3844 $30.15 ETH <0.01% <$0.000001 15,658,981,665.7049 $30.14 ETH <0.01% $0.000107 281,041.5397 $30.11 ETH <0.01% $0.000002 17,602,695.0786 $30.1 ETH <0.01% <$0.000001 79,955,217.6179 $29.95 ETH <0.01% $0.044546 671.1068 $29.9 ETH <0.01% $0.25535 116.9387 $29.86 ETH <0.01% $0.000284 104,533.2939 $29.68 ETH <0.01% $0.000188 157,986.903 $29.67 ETH <0.01% $0.00037 79,779.2299 $29.48 ETH <0.01% $0.000001 45,029,583.884 $29.32 ETH <0.01% $3,697.42 0.00779674 $28.83 ETH <0.01% $0.000018 1,571,806.0293 $28.77 ETH <0.01% $0.000075 379,952.1971 $28.63 ETH <0.01% $0.000117 243,736.6775 $28.54 ETH <0.01% $0.139405 204.2548 $28.47 ETH <0.01% $0.062658 454.0216 $28.45 ETH <0.01% <$0.000001 83,968,024.45 $28.3 ETH <0.01% $0.001336 21,088.2437 $28.18 ETH <0.01% $0.000002 18,401,376.3726 $28.15 ETH <0.01% $64.66 0.4344 $28.09 ETH <0.01% $12.75 2.186 $27.87 ETH <0.01% $0.000002 12,282,010.3174 $27.85 ETH <0.01% $0.090654 305.3606 $27.68 ETH <0.01% $1.52 18.125 $27.55 ETH <0.01% $1.43 19.236 $27.51 ETH <0.01% <$0.000001 337,909,843.1296 $27.46 ETH <0.01% $0.001833 14,946.1757 $27.4 ETH <0.01% <$0.000001 2,378,028,048.4159 $27.14 ETH <0.01% $3.07 8.7612 $26.9 ETH <0.01% $0.000002 16,281,405.6439 $26.86 ETH <0.01% <$0.000001 142,654,127,421.0283 $26.83 ETH <0.01% $6.6 4.0533 $26.75 ETH <0.01% $0.794737 33.6006 $26.7 ETH <0.01% $0.000004 7,322,340.6543 $26.67 ETH <0.01% $0.000016 1,690,770.7089 $26.63 ETH <0.01% $0.311526 85.0103 $26.48 ETH <0.01% <$0.000001 24,139,839,990.5655 $26.41 ETH <0.01% $2.81 9.3656 $26.35 ETH <0.01% $0.027203 963.5716 $26.21 ETH <0.01% $0.999567 26.1936 $26.18 ETH <0.01% $0.000466 56,162.0629 $26.18 ETH <0.01% $0.004342 6,018.3574 $26.13 ETH <0.01% $0.000002 12,456,412.9768 $26.08 ETH <0.01% <$0.000001 13,246,555,560.1592 $26.06 ETH <0.01% $0.017041 1,527.6151 $26.03 ETH <0.01% $0.051668 501.5773 $25.92 ETH <0.01% $0.790494 32.7517 $25.89 ETH <0.01% <$0.000001 162,041,704.6651 $25.88 ETH <0.01% $2.87 9.009 $25.86 ETH <0.01% $6.31 4.0869 $25.79 ETH <0.01% $0.357024 72.1516 $25.76 ETH <0.01% $0.578627 44.3325 $25.65 ETH <0.01% $0.002195 11,671.592 $25.62 ETH <0.01% <$0.000001 65,387,519.3688 $25.51 ETH <0.01% $0.464236 54.4912 $25.3 ETH <0.01% $0.006394 3,939.4497 $25.19 ETH <0.01% $0.000011 2,389,920.366 $25.14 ETH <0.01% $0.000001 24,911,185.3398 $25.11 ETH <0.01% $0.735836 34.1135 $25.1 ETH <0.01% $0.000256 96,894.7304 $24.84 ETH <0.01% $0.070808 350.7803 $24.84 ETH <0.01% $0.103446 239.1872 $24.74 ETH <0.01% $0.170177 145.2398 $24.72 ETH <0.01% $0.319164 77.3592 $24.69 ETH <0.01% $8,442.86 0.00292279 $24.68 ETH <0.01% $1.99 12.3156 $24.51 ETH <0.01% $0.000117 208,585.1212 $24.5 ETH <0.01% <$0.000001 14,325,932,671.7796 $24.5 ETH <0.01% $1 24.4585 $24.48 ETH <0.01% $0.000173 141,361.0002 $24.45 ETH <0.01% $6.06 4.0285 $24.42 ETH <0.01% $0.000012 2,118,787.008 $24.42 ETH <0.01% <$0.000001 792,688,864.155 $24.39 ETH <0.01% $0.02915 832.9948 $24.28 ETH <0.01% $0.000001 44,950,582.4135 $24.24 ETH <0.01% $0.001971 12,287.783 $24.22 ETH <0.01% $1.31 18.264 $24 ETH <0.01% <$0.000001 617,372,751.3052 $23.96 ETH <0.01% $0.90693 26.2957 $23.85 ETH <0.01% $0.829696 28.6767 $23.79 ETH <0.01% $0.0001 237,840.9296 $23.68 ETH <0.01% <$0.000001 30,867,721,752.8677 $23.6 ETH <0.01% $4.05 5.8222 $23.56 ETH <0.01% $3,414.13 0.00689982 $23.56 ETH <0.01% $0.983244 23.9326 $23.53 ETH <0.01% $0.011549 2,026.794 $23.41 ETH <0.01% $0.000238 98,125.3933 $23.33 ETH <0.01% $0.002112 10,998.6714 $23.23 ETH <0.01% $0.3131 74.1814 $23.23 ETH <0.01% <$0.000001 141,018,204.401 $23.19 ETH <0.01% $0.012422 1,850.7068 $22.99 ETH <0.01% $0.016302 1,410.0513 $22.99 ETH <0.01% <$0.000001 47,540,983,798.9829 $22.98 ETH <0.01% $11.1 2.0584 $22.86 ETH <0.01% $0.000001 41,599,752.9182 $22.8 ETH <0.01% $0.000014 1,569,815.1632 $22.75 ETH <0.01% $0.013124 1,714.9037 $22.51 ETH <0.01% $0.579161 38.7285 $22.43 ETH <0.01% $0.005762 3,890.0201 $22.42 ETH <0.01% $0.120754 185.2851 $22.37 ETH <0.01% <$0.000001 135,591,041.0364 $22.33 ETH <0.01% <$0.000001 12,526,149,480.0358 $22.3 ETH <0.01% $0.086683 256.3732 $22.22 ETH <0.01% $0.027717 800.8504 $22.2 ETH <0.01% $0.005038 4,394.6379 $22.14 ETH <0.01% $1.03 21.4688 $22.11 ETH <0.01% $0.017415 1,268.5445 $22.09 ETH <0.01% <$0.000001 52,068,850.3743 $21.87 ETH <0.01% $0.000379 57,553.4543 $21.83 ETH <0.01% $20.58 1.06 $21.82 ETH <0.01% $0.060692 358.8082 $21.78 ETH <0.01% <$0.000001 13,840,527,451.6326 $21.77 ETH <0.01% $0.724645 30.0027 $21.74 ETH <0.01% $0.019079 1,137.6114 $21.7 ETH <0.01% $0.186294 116.3473 $21.67 ETH <0.01% $0.000001 28,036,038.6707 $21.66 ETH <0.01% $4,000.43 0.00539787 $21.59 ETH <0.01% <$0.000001 20,222,686,009.5751 $21.54 ETH <0.01% $0.03506 610.3242 $21.4 ETH <0.01% $0.000006 3,574,316.5318 $21.37 ETH <0.01% $0.0013 16,352.0935 $21.25 ETH <0.01% $1.17 18.1179 $21.2 ETH <0.01% $0.025986 814.4562 $21.16 ETH <0.01% $0.044628 473.6751 $21.14 ETH <0.01% $0.00043 49,099.9601 $21.13 ETH <0.01% $0.005312 3,956.4815 $21.02 ETH <0.01% $0.003412 6,159.0346 $21.01 ETH <0.01% $0.000549 38,212.4151 $20.96 ETH <0.01% $0.208694 100.3925 $20.95 ETH <0.01% $0.787705 26.5818 $20.94 ETH <0.01% <$0.000001 92,899,813.7006 $20.91 ETH <0.01% $0.000001 33,132,300.186 $20.87 ETH <0.01% $0.000412 50,521.1583 $20.8 ETH <0.01% $0.000153 135,626.6423 $20.72 ETH <0.01% $0.003879 5,335.6976 $20.7 ETH <0.01% $2.44 8.4679 $20.65 ETH <0.01% $0.076057 271.2953 $20.63 ETH <0.01% $0.001867 11,043.4389 $20.62 ETH <0.01% $0.00075 27,492.9288 $20.62 ETH <0.01% $0.000005 3,870,537.135 $20.48 ETH <0.01% $0.00191 10,656.522 $20.36 ETH <0.01% $0.458442 44.3964 $20.35 ETH <0.01% $0.000041 491,509.0731 $20.35 ETH <0.01% $0.000199 101,497.5571 $20.23 ETH <0.01% $0.999616 20.1557 $20.15 ETH <0.01% $0.002161 9,287.0686 $20.07 ETH <0.01% $0.008976 2,228.8847 $20.01 ETH <0.01% $0.001588 12,565.1752 $19.95 ETH <0.01% <$0.000001 15,355,863,527.7162 $19.73 ETH <0.01% <$0.000001 17,867,912,235.2225 $19.51 ETH <0.01% $0.000193 101,019.0209 $19.5 ETH <0.01% <$0.000001 177,260,188,783.6581 $19.46 ETH <0.01% $0.045771 425.2342 $19.46 ETH <0.01% $0.134854 143.738 $19.38 ETH <0.01% $0.002412 8,000.7727 $19.3 ETH <0.01% $110.39 0.1746 $19.28 ETH <0.01% <$0.000001 7,143,839,481.8462 $19.22 ETH <0.01% $2.59 7.4203 $19.22 ETH <0.01% $0.110791 172.8362 $19.15 ETH <0.01% $0.797629 23.9367 $19.09 ETH <0.01% $0.085843 221.7321 $19.03 ETH <0.01% $0.000127 149,300.5991 $19.01 ETH <0.01% $0.402392 47.2456 $19.01 ETH <0.01% $3.26 5.8205 $18.97 ETH <0.01% <$0.000001 945,678,318.9864 $18.95 ETH <0.01% $0.015398 1,227.9287 $18.91 ETH <0.01% <$0.000001 39,031,227,866.0824 $18.85 ETH <0.01% $0.030227 623.2947 $18.84 ETH <0.01% $0.022552 833.8684 $18.81 ETH <0.01% $0.009708 1,930.9128 $18.75 ETH <0.01% $0.006114 3,064.6772 $18.74 ETH <0.01% $0.000001 32,315,314.4685 $18.71 ETH <0.01% <$0.000001 159,429,038.5122 $18.7 ETH <0.01% $10.79 1.7329 $18.7 ETH <0.01% $274.8 0.0679 $18.67 ETH <0.01% <$0.000001 20,353,616,842.999 $18.65 ETH <0.01% $0.191688 96.9764 $18.59 ETH <0.01% $0.001388 13,337.5866 $18.51 ETH <0.01% $0.066904 274.8002 $18.39 ETH <0.01% $0.00001 1,864,496.1007 $18.12 ETH <0.01% $0.011846 1,525.6656 $18.07 ETH <0.01% $0.006906 2,601.2591 $17.96 ETH <0.01% $0.051733 346.6294 $17.93 ETH <0.01% $0.000495 36,173.4154 $17.91 ETH