More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 511,755 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exact Input V2Sw... | 65639043 | 10 secs ago | IN | 0 POL | 0.02353223 | ||||
Exact Input V3Sw... | 65639030 | 38 secs ago | IN | 0 POL | 0.01 | ||||
Exact Input V2Sw... | 65639021 | 58 secs ago | IN | 0 POL | 0.0215016 | ||||
Exact Input V2Sw... | 65639005 | 1 min ago | IN | 0 POL | 0.02353965 | ||||
Exact Input V2Sw... | 65638990 | 2 mins ago | IN | 0 POL | 0.03153437 | ||||
Exact Input V3Sw... | 65638979 | 2 mins ago | IN | 6.76249207 POL | 0.02727922 | ||||
Exact Input V2Sw... | 65638952 | 3 mins ago | IN | 0.399 POL | 0.01338961 | ||||
Exact Input V3Sw... | 65638944 | 3 mins ago | IN | 0 POL | 0.01711004 | ||||
Exact Input V3Sw... | 65638931 | 4 mins ago | IN | 0 POL | 0.04044247 | ||||
Exact Input V2Sw... | 65638928 | 4 mins ago | IN | 0 POL | 0.03633357 | ||||
Exact Input V3Sw... | 65638911 | 4 mins ago | IN | 0 POL | 0.05166647 | ||||
Exact Input V2Sw... | 65638902 | 5 mins ago | IN | 40.3 POL | 0.02742106 | ||||
Exact Input V3Sw... | 65638897 | 5 mins ago | IN | 0 POL | 0.04329596 | ||||
Exact Input V2Sw... | 65638886 | 5 mins ago | IN | 0 POL | 0.03074306 | ||||
Exact Input V3Sw... | 65638878 | 6 mins ago | IN | 3.7 POL | 0.04254606 | ||||
Exact Input V2Sw... | 65638832 | 7 mins ago | IN | 29 POL | 0.02480659 | ||||
Exact Input V2Sw... | 65638821 | 8 mins ago | IN | 0 POL | 0.04161543 | ||||
Exact Input V2Sw... | 65638818 | 8 mins ago | IN | 0 POL | 0.03332558 | ||||
Exact Input V3Sw... | 65638783 | 9 mins ago | IN | 0 POL | 0.03488003 | ||||
Exact Input V2Sw... | 65638780 | 9 mins ago | IN | 0.399 POL | 0.01772281 | ||||
Exact Input V3Sw... | 65638765 | 10 mins ago | IN | 0 POL | 0.03219588 | ||||
Exact Input V2Sw... | 65638751 | 10 mins ago | IN | 0.00872157 POL | 0.02869151 | ||||
Exact Input V3Sw... | 65638743 | 10 mins ago | IN | 0 POL | 0.02855964 | ||||
Exact Input V2Sw... | 65638737 | 11 mins ago | IN | 0 POL | 0.02655002 | ||||
Exact Input V2Sw... | 65638729 | 11 mins ago | IN | 0 POL | 0.02565164 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
65638979 | 2 mins ago | 6.74220459 POL | ||||
65638952 | 3 mins ago | 0.397803 POL | ||||
65638931 | 4 mins ago | 33.14722702 POL | ||||
65638931 | 4 mins ago | 33.14722702 POL | ||||
65638911 | 4 mins ago | 177.35160276 POL | ||||
65638911 | 4 mins ago | 177.35160276 POL | ||||
65638902 | 5 mins ago | 40.1791 POL | ||||
65638878 | 6 mins ago | 3.6889 POL | ||||
65638832 | 7 mins ago | 28.913 POL | ||||
65638780 | 9 mins ago | 0.397803 POL | ||||
65638751 | 10 mins ago | 0.00869541 POL | ||||
65638556 | 17 mins ago | 4.829875 POL | ||||
65638556 | 17 mins ago | 4.829875 POL | ||||
65638537 | 18 mins ago | 32.1014923 POL | ||||
65638537 | 18 mins ago | 32.1014923 POL | ||||
65638452 | 21 mins ago | 183.22047775 POL | ||||
65638421 | 22 mins ago | 0.0997 POL | ||||
65638375 | 23 mins ago | 6.61482303 POL | ||||
65638375 | 23 mins ago | 6.61482303 POL | ||||
65638342 | 25 mins ago | 5.37778697 POL | ||||
65638342 | 25 mins ago | 5.37778697 POL | ||||
65638250 | 28 mins ago | 12.961 POL | ||||
65638203 | 30 mins ago | 45.00830677 POL | ||||
65638203 | 30 mins ago | 45.00830677 POL | ||||
65638175 | 31 mins ago | 0.96961075 POL |
Loading...
Loading
Contract Name:
TransitSwapRouterV5
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity =0.8.20; 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(FunctionFlag.cross) { 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 = executeFunds(FunctionFlag.cross, desc.srcToken, desc.wrappedToken, desc.caller, desc.amount, desc.fee, desc.signature); { (bool success, bytes memory result) = desc.caller.call{value:swapAmount}(desc.calls); if (!success) { revert(RevertReasonParser.parse(result, "TransitCrossV5:")); } TransferHelper.safeApprove(desc.srcToken, desc.caller, 0); } _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(FunctionFlag.executeAggregate) 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 toBeforeBalance; address bridgeAddress = _aggregate_bridge; uint256 swapAmount = executeFunds(FunctionFlag.executeAggregate, desc.srcToken, desc.wrappedToken, bridgeAddress, desc.amount, desc.fee, desc.signature); 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(FunctionFlag.executeV3Swap) 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 toBeforeBalance; bool isToETH; if (TransferHelper.isETH(params.srcToken)) { tokenIn = params.wrappedToken; } uint256 actualAmountIn = executeFunds(FunctionFlag.executeV3Swap, params.srcToken, params.wrappedToken, address(0), params.amount, params.fee, params.signature); 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); } _verifyCallback(pool, poolSalt, address(uint160(pool))); } 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"); (bool isToVault, uint256 vaultFee) = splitFee(exactInput.fee); actualAmountIn = calculateTradeFee(true, exactInput.amount, vaultFee, exactInput.signature); 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"); if (isToVault) { TransferHelper.safeTransferETH(_vault, vaultFee); } 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 (isToVault) { TransferHelper.safeTransferWithoutRequire(path[0], _vault, vaultFee); } } 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(FunctionFlag.executeV2Swap) 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; address internal _vault; 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 ChangeVault(address preVault, address newVault); 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, address vault) 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); } if (vault != address(0)) { address preVault = _vault; _vault = vault; emit ChangeVault(preVault, vault); } } 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, FunctionFlag[] calldata flags) external onlyExecutor { uint len = flags.length; for (uint i; i < len; i++) { if (paused) { _pause(flags[i]); } else { _unpause(flags[i]); } } } function transitProxyAddress() external view returns (address bridgeProxy, address feeSigner) { bridgeProxy = _aggregate_bridge; feeSigner = _fee_signer; } function transitFee() external view returns (uint256, uint256, address) { return (_aggregate_fee, _cross_fee, _vault); } 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); } function splitFee(uint256 fee) internal view returns (bool isToVault, uint256 vaultFee) { uint vaultFlag = fee % 10; vaultFee = (fee.sub(vaultFlag)).div(10); if (vaultFlag == 1 && vaultFee > 0 && _vault != address(0)) { isToVault = true; } } function executeFunds(FunctionFlag flag, address srcToken, address wrappedToken, address caller, uint256 amount, uint256 fee, bytes calldata signature) internal returns (uint256 swapAmount) { (bool isToVault, uint256 vaultFee) = splitFee(fee); bool isAggregate = flag == FunctionFlag.cross ? false : true; uint256 actualAmountIn = calculateTradeFee(isAggregate, amount, vaultFee, signature); if (TransferHelper.isETH(srcToken)) { if (flag == FunctionFlag.cross) { require(msg.value >= amount, "invalid msg.value"); swapAmount = msg.value.sub(vaultFee); } else { require(msg.value == amount, "invalid msg.value"); swapAmount = actualAmountIn; } if (wrappedToken != address(0)) { require(_wrapped_allowed[wrappedToken], "Invalid wrapped address"); if (flag == FunctionFlag.cross) { TransferHelper.safeDeposit(wrappedToken, swapAmount); TransferHelper.safeApprove(wrappedToken, caller, swapAmount); swapAmount = 0; } else if (flag == FunctionFlag.executeV3Swap) { TransferHelper.safeDeposit(wrappedToken, actualAmountIn); } } if (isToVault) { TransferHelper.safeTransferETH(_vault, vaultFee); } } else { TransferHelper.safeTransferFrom(srcToken, msg.sender, address(this), amount); if (flag == FunctionFlag.cross) { TransferHelper.safeApprove(srcToken, caller, actualAmountIn); swapAmount = msg.value; } else if (flag == FunctionFlag.executeAggregate) { TransferHelper.safeTransfer(srcToken, caller, actualAmountIn); } else if (flag == FunctionFlag.executeV3Swap) { swapAmount = actualAmountIn; } if (isToVault) { TransferHelper.safeTransferWithoutRequire(srcToken, _vault, vaultFee); } } } }
// 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 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, FunctionFlag flag); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account, FunctionFlag flag); mapping(FunctionFlag => bool) private _paused; enum FunctionFlag {executeAggregate, executeV2Swap, executeV3Swap, cross} /** * @dev Initializes the contract in unpaused state. */ constructor() { } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused(FunctionFlag flag) { _requireNotPaused(flag); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused(FunctionFlag flag) { _requirePaused(flag); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused(FunctionFlag flag) public view virtual returns (bool) { return _paused[flag]; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused(FunctionFlag flag) internal view virtual { require(!paused(flag), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused(FunctionFlag flag) internal view virtual { require(paused(flag), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause(FunctionFlag flag) internal virtual whenNotPaused(flag) { _paused[flag] = true; emit Paused(msg.sender, flag); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause(FunctionFlag flag) internal virtual whenPaused(flag) { _paused[flag] = false; emit Unpaused(msg.sender, flag); } function pausedOverAll() public view virtual returns (bool executeAggregate, bool executeV2Swap, bool executeV3Swap, bool cross) { executeAggregate = _paused[FunctionFlag.executeAggregate]; executeV2Swap = _paused[FunctionFlag.executeV2Swap]; executeV3Swap = _paused[FunctionFlag.executeV3Swap]; cross = _paused[FunctionFlag.cross]; } }
{ "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
[{"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":"preVault","type":"address"},{"indexed":false,"internalType":"address","name":"newVault","type":"address"}],"name":"ChangeVault","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"},{"indexed":false,"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"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"},{"indexed":false,"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"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"},{"internalType":"enum Pausable.FunctionFlag[]","name":"flags","type":"uint8[]"}],"name":"changePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"vault","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":[{"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pausedOverAll","outputs":[{"internalType":"bool","name":"executeAggregate","type":"bool"},{"internalType":"bool","name":"executeV2Swap","type":"bool"},{"internalType":"bool","name":"executeV3Swap","type":"bool"},{"internalType":"bool","name":"cross","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"},{"internalType":"address","name":"","type":"address"}],"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
608060405234801562000010575f80fd5b506001543390600160a01b900460ff1615620000725760405162461bcd60e51b815260206004820152601460248201527f4f776e61626c653a20696e697469616c697a6564000000000000000000000000604482015260640160405180910390fd5b6200007d8162000175565b506001805460ff60a01b1916600160a01b1781556003819055604080518082018252600d81526c5472616e73697453776170563560981b60209182015281518083018352928352603560f81b9281019290925280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f928101929092527f20b7d1a4a088b240a0e093c572f43e31015ce187a55e6f343e049dcb744e5341908201527fceebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c160608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600955620001ce565b600180546001600160a01b03199081169091555f80546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b615e1680620001dc5f395ff3fe608060405260043610610184575f3560e01c80637ec753fe116100d0578063b9b5149b11610089578063d63234e011610063578063d63234e0146105a8578063d808d889146105c5578063fa461e33146102a4578063fa9ec7af146105d8576101c3565b8063b9b5149b14610546578063bf5c55a214610559578063c34c08e514610578576101c3565b80637ec753fe1461049757806392bcc8be146104b657806394d3d793146104d5578063afed2d0e146104e9578063b93c0beb14610508578063b946fd3b14610527576101c3565b80633644e5151161013d5780635ac86ab7116101175780635ac86ab7146103e95780636b3ec416146104185780636fbf72f91461042b5780637e467ecf14610464576101c3565b80633644e515146102eb5780633c481d57146103005780634c42342f146103d6576101c3565b80630ced9fb9146101ff5780630dc4bdae146102365780630e8cc705146102575780631975b0961461027657806323a69e75146102a45780632adb806f146102c3576101c3565b366101c357604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101ce575f80fd5b505f80806101df3660048184614c14565b8101906101ec9190614ca5565b9250925092506101fd8383836105eb565b005b34801561020a575f80fd5b50600654600754604080516001600160a01b039384168152929091166020830152015b60405180910390f35b610249610244366004614d30565b610694565b60405190815260200161022d565b348015610262575f80fd5b506101fd610271366004614dbc565b6106a6565b348015610281575f80fd5b50610295610290366004614e62565b610826565b60405161022d93929190614eed565b3480156102af575f80fd5b506101fd6102be366004614f2a565b610925565b6102d66102d1366004614fa2565b61096b565b6040805192835260208301919091520161022d565b3480156102f6575f80fd5b5061024960095481565b34801561030b575f80fd5b5060026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b547fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0547f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5460035f527f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35460ff938416939283169291821691166040805194151585529215156020850152901515918301919091521515606082015260800161022d565b6102d66103e4366004615026565b610992565b3480156103f4575f80fd5b5061040861040336600461505f565b6109b6565b604051901515815260200161022d565b6101fd610426366004615026565b6109f6565b348015610436575f80fd5b506004546005546008546040805193845260208401929092526001600160a01b03169082015260600161022d565b34801561046f575f80fd5b506102497f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156104a2575f80fd5b506101fd6104b13660046150ed565b610d11565b3480156104c1575f80fd5b506101fd6104d03660046151e5565b610e96565b3480156104e0575f80fd5b506101fd61107f565b3480156104f4575f80fd5b506101fd610503366004615277565b611105565b348015610513575f80fd5b506101fd610522366004615292565b611175565b348015610532575f80fd5b506101fd6105413660046152f8565b61142a565b610249610554366004615026565b611573565b348015610564575f80fd5b506101fd610573366004615340565b611583565b348015610583575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161022d565b3480156105b3575f80fd5b506001546001600160a01b0316610590565b6102496105d3366004614fa2565b611618565b6102d66105e6366004614d30565b611623565b5f8313806105f857505f82135b6106345760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b5f808280602001905181019061064a9190615390565b915091505f8082806020019051810190610664919061540d565b91509150610673848233611633565b855f88131561067f5750865b61068a8333836117e6565b5050505050505050565b5f61069f8383611903565b9392505050565b6106ae611e7b565b5f5b8251811015610821575f6106dc8483815181106106cf576106cf615439565b6020026020010151611ef1565b156106f25750476106ed8382611f29565b61079e565b83828151811061070457610704615439565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610752573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610776919061544d565b905061079c84838151811061078d5761078d615439565b60200260200101518483611fe2565b505b826001600160a01b0316336001600160a01b03168584815181106107c4576107c4615439565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161080691815260200190565b60405180910390a4508061081981615478565b9150506106b0565b505050565b6040805180820182525f80825260606020808401919091526001600160a01b038781168352600a8252848320548782168452600b835285842054878552600c84529386902086518088019097528054909216865260018201805460ff92831697929095169594919384019161089a90615490565b80601f01602080910402602001604051908101604052809291908181526020018280546108c690615490565b80156109115780601f106108e857610100808354040283529160200191610911565b820191905f5260205f20905b8154815290600101906020018083116108f457829003601f168201915b505050505081525050905093509350939050565b610965848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506105eb92505050565b50505050565b5f805f5a905061097b85856120c6565b92505a61098890826154c2565b9150509250929050565b5f805f5a90506109a1846125d7565b92505a6109ae90826154c2565b915050915091565b5f60025f8360038111156109cc576109cc6154d5565b60038111156109dd576109dd6154d5565b815260208101919091526040015f205460ff1692915050565b600260035403610a185760405162461bcd60e51b815260040161062b906154e9565b60026003556003610a2881612b20565b5f610a37610120840184615520565b905011610a805760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8260a0013511610ad35760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b600a5f610ae66060850160408601615277565b6001600160a01b0316815260208101919091526040015f205460ff16610b3f5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b604482015260640161062b565b5f610b8f6003610b526020860186615277565b610b6260a0870160808801615277565b610b726060880160408901615277565b60a088013560c0890135610b8a6101408b018b615520565b612b69565b90505f80610ba36060860160408701615277565b6001600160a01b031683610bbb610120880188615520565b604051610bc9929190615562565b5f6040518083038185875af1925050503d805f8114610c03576040519150601f19603f3d011682016040523d82523d5f602084013e610c08565b606091505b509150915081610c5c57610c43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612ddf565b60405162461bcd60e51b815260040161062b9190615571565b610c82610c6c6020870187615277565b610c7c6060880160408901615277565b5f613053565b50610d079050610c956020850185615277565b610ca56040860160208701615277565b610cb56080870160608801615277565b60a08701355f60e0890135610cce6101008b018b615520565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061316292505050565b5050600160035550565b610d19611e7b565b5f5b8251811015610821575f828281518110610d3757610d37615439565b602002602001015110158015610d6857506103e8828281518110610d5d57610d5d615439565b602002602001015111155b610da95760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b604482015260640161062b565b828181518110610dbb57610dbb615439565b602002602001015115610ded57818181518110610dda57610dda615439565b6020026020010151600481905550610e0e565b818181518110610dff57610dff615439565b60200260200101516005819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610e4157610e41615439565b6020026020010151838381518110610e5b57610e5b615439565b6020026020010151604051610e7c9291909115158252602082015260400190565b60405180910390a180610e8e81615478565b915050610d1b565b610e9e611e7b565b848114610edc5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b828114610f1a5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b825f5b81811015611034576040518060400160405280878784818110610f4257610f42615439565b9050602002016020810190610f579190615277565b6001600160a01b03168152602001858584818110610f7757610f77615439565b9050602002810190610f899190615520565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250600c92508b90508a85818110610fd557610fd5615439565b60209081029290920135835250818101929092526040015f20825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061101d90826155c8565b50905050808061102c90615478565b915050610f1d565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161106e96959493929190615733565b60405180910390a150505050505050565b33806110936001546001600160a01b031690565b6001600160a01b0316146110f95760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b606482015260840161062b565b611102816131c6565b50565b61110d611e7b565b600180546001600160a01b0383166001600160a01b0319909116811790915561113d5f546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61117d611e7b565b8215611275575f5b8381101561123a57600a5f8686848181106111a2576111a2615439565b90506020020160208101906111b79190615277565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600a908787858181106111ec576111ec615439565b90506020020160208101906112019190615277565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061123281615478565b915050611185565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161126c9291906157e3565b60405180910390a15b8015610965575f816001600160401b0381111561129457611294614c3b565b6040519080825280602002602001820160405280156112bd578160200160208202803683370190505b5090505f5b828110156113e757600b5f8585848181106112df576112df615439565b90506020020160208101906112f49190615277565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600b9086868581811061132957611329615439565b905060200201602081019061133e9190615277565b6001600160a01b0316815260208101919091526040015f908120805460ff191692151592909217909155600b9085858481811061137d5761137d615439565b90506020020160208101906113929190615277565b6001600160a01b0316815260208101919091526040015f2054825160ff909116908390839081106113c5576113c5615439565b91151560209283029190910190910152806113df81615478565b9150506112c2565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e6383838360405161141b939291906157f6565b60405180910390a15050505050565b611432611e7b565b6001600160a01b0383161561149357600680546001600160a01b0319166001600160a01b0385169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0382161561150157600780546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b6001600160a01b0381161561082157600880546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3911b5760f95a64aaa8d7f1775f57a7b6ed0bcf1ebb3fbfcc045e2f04eaad11910160405180910390a150505050565b5f61157d826125d7565b92915050565b61158b611e7b565b805f5b818110156116115784156115d0576115cb8484838181106115b1576115b1615439565b90506020020160208101906115c6919061505f565b61321f565b6115ff565b6115ff8484838181106115e5576115e5615439565b90506020020160208101906115fa919061505f565b6132b1565b8061160981615478565b91505061158e565b5050505050565b5f61069f83836120c6565b5f805f5a905061097b8585611903565b600f60f884901c165f818152600c60209081526040808320815180830190925280546001600160a01b03168252600181018054929391929184019161167790615490565b80601f01602080910402602001604051908101604052809291908181526020018280546116a390615490565b80156116ee5780601f106116c5576101008083540402835291602001916116ee565b820191905f5260205f20905b8154815290600101906020018083116116d157829003601f168201915b5050509190925250508151919250506001600160a01b03166117525760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e646578656400000000000000604482015260640161062b565b5f815f015185836020015160405160200161176f9392919061584f565b604051602081830303815290604052805190602001205f1c9050836001600160a01b0316816001600160a01b0316146117de5760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b604482015260640161062b565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916118419190615897565b5f604051808303815f865af19150503d805f811461187a576040519150601f19603f3d011682016040523d82523d5f602084013e61187f565b606091505b50915091508180156118a95750805115806118a95750808060200190518101906118a991906158b2565b6116115760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b606482015260840161062b565b5f6002600354036119265760405162461bcd60e51b815260040161062b906154e9565b6002600355600161193681612b20565b428310156119705760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b6001600f604086013560f81c16145f8080808061198d8a87613336565b945094509450945094506119ef835f815181106119ac576119ac615439565b60200260200101518b8060e001906119c491906158cd565b5f8181106119d4576119d4615439565b90506020020160208101906119e99190615277565b866117e6565b8515611bb6578415611ad357611a4960408b013584611a1160e08e018e6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613863915050565b611acc82611a5d60408d0160208e01615277565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa158015611aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac6919061544d565b90613b5a565b9750611d2b565b611b3f60408b013584611ae960e08e018e6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508d5f016020810190611b3a9190615277565b613863565b611acc818460018651611b5291906154c2565b81518110611b6257611b62615439565b60200260200101516001600160a01b03166370a082318d5f016020810190611b8a9190615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401611a87565b5f8a604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611be9929190615912565b5f60405180830381865afa158015611c03573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c2a9190810190615967565b90508515611c9757611c7c8185611c4460e08f018f6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613baf915050565b611c9083611a5d60408e0160208f01615277565b9850611d29565b611cff8185611ca960e08f018f6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508e5f016020810190611cfa9190615277565b613baf565b8060018251611d0e91906154c2565b81518110611d1e57611d1e615439565b602002602001015198505b505b8960800135881015611d4f5760405162461bcd60e51b815260040161062b906159e7565b8415611d8457611d6e611d6860408c0160208d01615277565b89613d99565b611d84611d7e60208c018c615277565b89611f29565b50505050505f85806101200190611d9b9190615520565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929350611e6d9250611de391505060c08801886158cd565b5f818110611df357611df3615439565b9050602002016020810190611e089190615277565b611e1560c08901896158cd565b6001611e2460c08c018c6158cd565b611e2f9291506154c2565b818110611e3e57611e3e615439565b9050602002016020810190611e539190615277565b611e6060208a018a615277565b8960600135885f87613162565b505050600160035592915050565b33611e8d5f546001600160a01b031690565b6001600160a01b031614611eef5760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b606482015260840161062b565b565b5f6001600160a01b038216158061157d57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080515f808252602082019092526001600160a01b038416908390604051611f529190615897565b5f6040518083038185875af1925050503d805f8114611f8c576040519150601f19603f3d011682016040523d82523d5f602084013e611f91565b606091505b50509050806108215760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161062b565b5f805f856001600160a01b031663a9059cbb868660405160240161201b9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516120549190615897565b5f604051808303815f865af19150503d805f811461208d576040519150601f19603f3d011682016040523d82523d5f602084013e612092565b606091505b50915091508180156120bc5750805115806120bc5750808060200190518101906120bc91906158b2565b9695505050505050565b5f6002600354036120e95760405162461bcd60e51b815260040161062b906154e9565b60026003555f6120f881612b20565b5f6121066020850185615520565b90501161214f5760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8460800135116121a25760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b5f6121b36060860160408701615277565b6001600160a01b0316036122135760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b606482015260840161062b565b5f8460a00135116122775760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b606482015260840161062b565b600b5f61228a6080870160608801615277565b6001600160a01b0316815260208101919091526040015f205460ff166122f25760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420777261707065642061646472657373000000000000000000604482015260640161062b565b6006545f906001600160a01b03168161233b8161231260208a018a615277565b61232260808b0160608c01615277565b8560808c013560c08d0135610b8a6101008f018f615520565b90506123556123506040890160208a01615277565b611ef1565b1561237b5761236a6060880160408901615277565b6001600160a01b0316319250612412565b61238b6040880160208901615277565b6001600160a01b03166370a082316123a960608a0160408b01615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156123eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240f919061544d565b92505b5f80836001600160a01b031683633f3204d28a6040516024016124359190615a14565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161246e9190615897565b5f6040518083038185875af1925050503d805f81146124a8576040519150601f19603f3d011682016040523d82523d5f602084013e6124ad565b606091505b5091509150816124e557610c43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612ddf565b506124fb90506123506040890160208a01615277565b1561252b576125248361251460608a0160408b01615277565b6001600160a01b03163190613b5a565b9450612560565b61255d8361253f60408a0160208b01615277565b6001600160a01b03166370a08231611b8a60608c0160408d01615277565b94505b8660a001358510156125845760405162461bcd60e51b815260040161062b906159e7565b6125c86125946020890189615277565b6125a460408a0160208b01615277565b6125b460608b0160408c01615277565b60808b0135895f610cce60e08f018f615520565b50505050600160035592915050565b5f6002600354036125fa5760405162461bcd60e51b815260040161062b906154e9565b6002600355600261260a81612b20565b5f6126196101008501856158cd565b9050116126565760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b604482015260640161062b565b428360e0013510156126945760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b600b5f6126a76080860160608701615277565b6001600160a01b0316815260208101919091526040015f205460ff166126df5760405162461bcd60e51b815260040161062b90615a5f565b5f6126ed6020850185615277565b90505f6127006040860160208701615277565b90505f806127146123506020890189615277565b1561272c576127296080880160608901615277565b93505b5f61276b600261273f60208b018b615277565b61274f60808c0160608d01615277565b5f8c608001358d60c001358e806101200190610b8a9190615520565b905061278061235060408a0160208b01615277565b1561281a576127956080890160608a01615277565b93506127a76080890160608a01615277565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156127eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061280f919061544d565b9250600191506128b1565b61282a6040890160208a01615277565b6001600160a01b03166370a0823161284860608b0160408c01615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561288a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae919061544d565b92505b5f6128c06101008a018a6158cd565b91503090506060600183111561297857875f805b8581101561296d575f8e8061010001906128ee91906158cd565b838181106128fe576128fe615439565b905060200201359050612912848483613eac565b955093506129216001886154c2565b8214801561292d575088155b1561294b578e60400160208101906129459190615277565b95508a92505b6129578682878b614197565b975050808061296590615478565b9150506128d4565b50859b5050506129f6565b6129a7888861298b6101008f018f6158cd565b5f81811061299b5761299b615439565b90506020020135613eac565b91508590506129c3576129c060608c0160408d01615277565b91505b6129f3826129d56101008e018e6158cd565b5f8181106129e5576129e5615439565b905060200201358387614197565b99505b5050508115612a7057612a1383611a5d60808b0160608c01615277565b96508760a00135871015612a395760405162461bcd60e51b815260040161062b906159e7565b612a52612a4c60808a0160608b01615277565b88613d99565b612a6b612a6560608a0160408b01615277565b88611f29565b612ac8565b612aa283612a8460408b0160208c01615277565b6001600160a01b03166370a08231611b8a60608d0160408e01615277565b96508760a00135871015612ac85760405162461bcd60e51b815260040161062b906159e7565b612b10612ad860208a018a615277565b612ae860408b0160208c01615277565b612af860608c0160408d01615277565b8b608001358b5f8e806101400190610cce9190615520565b5050505050506001600355919050565b612b29816109b6565b156111025760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161062b565b5f805f612b7586614346565b90925090505f60038c6003811115612b8f57612b8f6154d5565b14612b9b576001612b9d565b5f5b90505f612bad828a858a8a6143a2565b9050612bb88c611ef1565b15612d325760038d6003811115612bd157612bd16154d5565b03612c2b5788341015612c1a5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b612c243484613b5a565b9450612c72565b883414612c6e5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b8094505b6001600160a01b038b1615612d11576001600160a01b038b165f908152600b602052604090205460ff16612cb85760405162461bcd60e51b815260040161062b90615a5f565b60038d6003811115612ccc57612ccc6154d5565b03612cee57612cdb8b86614457565b612ce68b8b87613053565b5f9450612d11565b60028d6003811115612d0257612d026154d5565b03612d1157612d118b82614457565b8315612d2d57600854612d2d906001600160a01b031684611f29565b612dcf565b612d3e8c33308c614551565b60038d6003811115612d5257612d526154d5565b03612d6a57612d628c8b83613053565b349450612daf565b5f8d6003811115612d7d57612d7d6154d5565b03612d9257612d8d8c8b836117e6565b612daf565b60028d6003811115612da657612da66154d5565b03612daf578094505b8315612dcf57600854612dcd908d906001600160a01b031685611fe2565b505b5050505098975050505050505050565b60606044835110158015612e175750825f81518110612e0057612e00615439565b6020910101516001600160f81b031916600160fb1b145b8015612e48575082600181518110612e3157612e31615439565b6020910101516001600160f81b03191660c360f81b145b8015612e79575082600281518110612e6257612e62615439565b6020910101516001600160f81b031916607960f81b145b8015612eaa575082600381518110612e9357612e93615439565b6020910101516001600160f81b031916600560fd1b145b15612f3457604483810180519091612ec29190615a96565b84511015612f0a5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015260640161062b565b8281604051602001612f1d929190615aa9565b60405160208183030381529060405291505061157d565b82516024148015612f695750825f81518110612f5257612f52615439565b6020910101516001600160f81b031916602760f91b145b8015612f9a575082600181518110612f8357612f83615439565b6020910101516001600160f81b031916600960fb1b145b8015612fcb575082600281518110612fb457612fb4615439565b6020910101516001600160f81b031916607b60f81b145b8015612ffc575082600381518110612fe557612fe5615439565b6020910101516001600160f81b031916607160f81b145b156130215760248301518261301082614674565b604051602001612f1d929190615af7565b8161302b8461469c565b60405160200161303c929190615b2b565b604051602081830303815290604052905092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f928392908716916130ae9190615897565b5f604051808303815f865af19150503d805f81146130e7576040519150601f19603f3d011682016040523d82523d5f602084013e6130ec565b606091505b509150915081801561311657508051158061311657508080602001905181019061311691906158b2565b6116115760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640161062b565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516131b59493929190615b7b565b60405180910390a450505050505050565b600180546001600160a01b03199081169091555f80546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b8061322981612b20565b600160025f846003811115613240576132406154d5565b6003811115613251576132516154d5565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d455933836040516132a5929190615b9f565b60405180910390a15050565b806132bb8161487c565b5f60025f8460038111156132d1576132d16154d5565b60038111156132e2576132e26154d5565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f4cd3e1443d03aba343c5d882744f8f172c07b495e955ac3defb325cbd73c855033836040516132a5929190615b9f565b5f806060818061334960e08801886158cd565b61335591506001615a96565b61336260c08901896158cd565b9050146133a05760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015260640161062b565b600b5f6133b360408a0160208b01615277565b6001600160a01b0316815260208101919091526040015f205460ff166133eb5760405162461bcd60e51b815260040161062b90615a5f565b5f806133fa8960a00135614346565b909250905061341d600160608b0135836134186101008e018e615520565b6143a2565b95505f61342d60c08b018b6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525093945084925060019150613472905060c08e018e6158cd565b61347d9291506154c2565b8151811061348d5761348d615439565b602002602001015190506134cf8b8060c001906134aa91906158cd565b5f8181106134ba576134ba615439565b90506020020160208101906123509190615277565b1561358f578a60600135341461351b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b604482015260640161062b565b831561353757600854613537906001600160a01b031684611f29565b61354760408c0160208d01615277565b825f8151811061355957613559615439565b6001600160a01b0390921660209283029190910182015261358a906135849060408e01908e01615277565b89614457565b6136f0565b89156136a157815f815181106135a7576135a7615439565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135f5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613619919061544d565b9750613644825f8151811061363057613630615439565b602002602001015133308e60600135614551565b61369a8b60a00135611ac68a855f8151811061366257613662615439565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401611a87565b97506136b6565b6136b6825f8151811061363057613630615439565b83156136f0576136ee825f815181106136d1576136d1615439565b60209081029190910101516008546001600160a01b031685611fe2565b505b6136f981611ef1565b156137c75761370e60408c0160208d01615277565b826001845161371d91906154c2565b8151811061372d5761372d615439565b6001600160a01b03909216602092830291909101820152600199506137589060408d01908d01615277565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561379c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137c0919061544d565b9550613852565b8915613852576001600160a01b0381166370a082316137e960208e018e615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561382b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061384f919061544d565b94505b819650505050509295509295909350565b5f5b6001845161387391906154c2565b811015611611575f8085838151811061388e5761388e615439565b6020026020010151868460016138a49190615a96565b815181106138b4576138b4615439565b6020026020010151915091505f816001600160a01b0316836001600160a01b0316106138e15781836138e4565b82825b5090505f8685815181106138fa576138fa615439565b602002602001015190505f805f80846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613944573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139689190615bee565b506001600160701b031691506001600160701b031691505f80876001600160a01b03168a6001600160a01b0316146139a15782846139a4565b83835b6040516370a0823160e01b81526001600160a01b038a811660048301529294509092506139df918491908d16906370a0823190602401611a87565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b8152600401613a22939291909283526020830191909152604082015260600190565b602060405180830381865afa158015613a3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a61919061544d565b9450505050505f80856001600160a01b0316886001600160a01b031614613a8957825f613a8c565b5f835b915091505f60028d51613a9f91906154c2565b8a10613aab578a613ad0565b8b613ab78b6001615a96565b81518110613ac757613ac7615439565b60200260200101515b604080515f8152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613b119086908690869060248101615c2f565b5f604051808303815f87803b158015613b28575f80fd5b505af1158015613b3a573d5f803e3d5ffd5b505050505050505050505050508080613b5290615478565b915050613865565b5f82613b6683826154c2565b915081111561157d5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161062b565b5f5b60018451613bbf91906154c2565b811015611611575f80858381518110613bda57613bda615439565b602002602001015186846001613bf09190615a96565b81518110613c0057613c00615439565b6020026020010151915091505f816001600160a01b0316836001600160a01b031610613c2d578183613c30565b82825b5090505f88613c40866001615a96565b81518110613c5057613c50615439565b602002602001015190505f80836001600160a01b0316866001600160a01b031614613c7c57825f613c7f565b5f835b915091505f60028b51613c9291906154c2565b8810613c9e5788613cc3565b89613caa896001615a96565b81518110613cba57613cba615439565b60200260200101515b9050898881518110613cd757613cd7615439565b60200260200101516001600160a01b031663022c0d9f8484845f6001600160401b03811115613d0857613d08614c3b565b6040519080825280601f01601f191660200182016040528015613d32576020820181803683370190505b506040518563ffffffff1660e01b8152600401613d529493929190615c2f565b5f604051808303815f87803b158015613d69575f80fd5b505af1158015613d7b573d5f803e3d5ffd5b50505050505050505050508080613d9190615478565b915050613bb1565b5f80836001600160a01b03165f632e1a7d4d85604051602401613dbe91815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613df79190615897565b5f6040518083038185875af1925050503d805f8114613e31576040519150601f19603f3d011682016040523d82523d5f602084013e613e36565b606091505b5091509150818015613e60575080511580613e60575080806020019051810190613e6091906158b2565b6109655760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c454400604482015260640161062b565b5f60605f8390505f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f149190615c5b565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f779190615c5b565b90505f836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fda9190615c76565b604080516001600160a01b03808716602083015285169181019190915262ffffff821660608201529091505f9060800160408051601f1981840301815291905280516020909101209050600160ff1b88161580156140da57846001600160a01b03168b6001600160a01b0316146140635760405162461bcd60e51b815260040161062b90615c98565b6001600160a01b038a16156140a357836001600160a01b03168a6001600160a01b0316146140a35760405162461bcd60e51b815260040161062b90615c98565b604080516001600160a01b03871660208201529081018390529397508793606001604051602081830303815290604052965061417e565b836001600160a01b03168b6001600160a01b03161461410b5760405162461bcd60e51b815260040161062b90615c98565b6001600160a01b038a161561414b57846001600160a01b03168a6001600160a01b03161461414b5760405162461bcd60e51b815260040161062b90615c98565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b61418989838b611633565b505050505050935093915050565b5f600160ff1b841615801561426f575f856001600160a01b031663128acb0888846141c1886148c8565b6141d16401000276a36001615cba565b8b8b6040516020016141e4929190615ce1565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401614213959493929190615cf9565b60408051808303815f875af115801561422e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142529190615d33565b9150506142678161426290615d55565b614935565b92505061433d565b5f856001600160a01b031663128acb08888461428a886148c8565b6142a9600173fffd8963efd1fc6a506488495d951d5263988d26615d6f565b8b8b6040516020016142bc929190615ce1565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016142eb959493929190615cf9565b60408051808303815f875af1158015614306573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061432a9190615d33565b50905061433961426282615d55565b9250505b50949350505050565b5f8080614354600a85615da3565b905061436b600a6143658684613b5a565b90614986565b915080600114801561437c57505f82115b801561439257506008546001600160a01b031615155b1561439c57600192505b50915091565b5f8086156143cc576143c5612710614365600454896149d390919063ffffffff16565b90506143ea565b6143e7612710614365600554896149d390919063ffffffff16565b90505b80851015614442576143fe86868686614a39565b6144425760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b604482015260640161062b565b61444c8686613b5a565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b17905290515f9182916001600160a01b03861691859161449c9190615897565b5f6040518083038185875af1925050503d805f81146144d6576040519150601f19603f3d011682016040523d82523d5f602084013e6144db565b606091505b509150915081801561450557508051158061450557508080602001905181019061450591906158b2565b6109655760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c45440000604482015260640161062b565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291515f928392908816916145b49190615897565b5f604051808303815f865af19150503d805f81146145ed576040519150601f19603f3d011682016040523d82523d5f602084013e6145f2565b606091505b509150915081801561461c57508051158061461c57508080602001905181019061461c91906158b2565b6117de5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b606482015260840161062b565b606061157d8260405160200161468c91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b905f906146c3906002615db6565b6146ce906002615a96565b6001600160401b038111156146e5576146e5614c3b565b6040519080825280601f01601f19166020018201604052801561470f576020820181803683370190505b509050600360fc1b815f8151811061472957614729615439565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061475757614757615439565b60200101906001600160f81b03191690815f1a9053505f5b84518110156148745782600486838151811061478d5761478d615439565b01602001516001600160f81b031916901c60f81c601081106147b1576147b1615439565b1a60f81b826147c1836002615db6565b6147cc906002615a96565b815181106147dc576147dc615439565b60200101906001600160f81b03191690815f1a9053508285828151811061480557614805615439565b60209101015160f81c600f166010811061482157614821615439565b1a60f81b82614831836002615db6565b61483c906003615a96565b8151811061484c5761484c615439565b60200101906001600160f81b03191690815f1a9053508061486c81615478565b91505061476f565b509392505050565b614885816109b6565b6111025760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161062b565b5f6001600160ff1b038211156149315760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161062b565b5090565b5f808212156149315760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015260640161062b565b5f815f036149c95760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b604482015260640161062b565b61069f8284615dcd565b5f8115806149f6575082826149e88183615db6565b92506149f49083615dcd565b145b61157d5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161062b565b600954604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f6020820152339181019190915260608101869052608081018590525f91829160a00160405160208183030381529060405280519060200120604051602001614ac092919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f805f614b1987878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614ba592505050565b9250925092505f6001858585856040515f8152602001604052604051614b5b949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015614b7b573d5f803e3d5ffd5b5050604051601f1901516007546001600160a01b039081169116149b9a5050505050505050505050565b5f805f8351604114614bf95760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161062b565b505050602081015160408201516060909201515f1a92909190565b5f8085851115614c22575f80fd5b83861115614c2e575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614c7757614c77614c3b565b604052919050565b5f6001600160401b03821115614c9757614c97614c3b565b50601f01601f191660200190565b5f805f60608486031215614cb7575f80fd5b833592506020840135915060408401356001600160401b03811115614cda575f80fd5b8401601f81018613614cea575f80fd5b8035614cfd614cf882614c7f565b614c4f565b818152876020838501011115614d11575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f8060408385031215614d41575f80fd5b82356001600160401b03811115614d56575f80fd5b83016101408186031215614d68575f80fd5b946020939093013593505050565b5f6001600160401b03821115614d8e57614d8e614c3b565b5060051b60200190565b6001600160a01b0381168114611102575f80fd5b8035614db781614d98565b919050565b5f8060408385031215614dcd575f80fd5b82356001600160401b03811115614de2575f80fd5b8301601f81018513614df2575f80fd5b80356020614e02614cf883614d76565b82815260059290921b83018101918181019088841115614e20575f80fd5b938201935b83851015614e47578435614e3881614d98565b82529382019390820190614e25565b9550614e569050868201614dac565b93505050509250929050565b5f805f60608486031215614e74575f80fd5b8335614e7f81614d98565b92506020840135614e8f81614d98565b929592945050506040919091013590565b5f5b83811015614eba578181015183820152602001614ea2565b50505f910152565b5f8151808452614ed9816020860160208601614ea0565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201525f6020830151604060808401526120bc60a0840182614ec2565b5f805f8060608587031215614f3d575f80fd5b843593506020850135925060408501356001600160401b0380821115614f61575f80fd5b818701915087601f830112614f74575f80fd5b813581811115614f82575f80fd5b886020828501011115614f93575f80fd5b95989497505060200194505050565b5f8060408385031215614fb3575f80fd5b82356001600160401b0380821115614fc9575f80fd5b908401906101208287031215614fdd575f80fd5b90925060208401359080821115614ff2575f80fd5b50830160408186031215615004575f80fd5b809150509250929050565b5f6101608284031215615020575f80fd5b50919050565b5f60208284031215615036575f80fd5b81356001600160401b0381111561504b575f80fd5b6150578482850161500f565b949350505050565b5f6020828403121561506f575f80fd5b81356004811061069f575f80fd5b8015158114611102575f80fd5b5f82601f830112615099575f80fd5b813560206150a9614cf883614d76565b82815260059290921b840181019181810190868411156150c7575f80fd5b8286015b848110156150e257803583529183019183016150cb565b509695505050505050565b5f80604083850312156150fe575f80fd5b82356001600160401b0380821115615114575f80fd5b818501915085601f830112615127575f80fd5b81356020615137614cf883614d76565b82815260059290921b84018101918181019089841115615155575f80fd5b948201945b8386101561517c57853561516d8161507d565b8252948201949082019061515a565b96505086013592505080821115615191575f80fd5b506109888582860161508a565b5f8083601f8401126151ae575f80fd5b5081356001600160401b038111156151c4575f80fd5b6020830191508360208260051b85010111156151de575f80fd5b9250929050565b5f805f805f80606087890312156151fa575f80fd5b86356001600160401b0380821115615210575f80fd5b61521c8a838b0161519e565b90985096506020890135915080821115615234575f80fd5b6152408a838b0161519e565b90965094506040890135915080821115615258575f80fd5b5061526589828a0161519e565b979a9699509497509295939492505050565b5f60208284031215615287575f80fd5b813561069f81614d98565b5f805f80604085870312156152a5575f80fd5b84356001600160401b03808211156152bb575f80fd5b6152c78883890161519e565b909650945060208701359150808211156152df575f80fd5b506152ec8782880161519e565b95989497509550505050565b5f805f6060848603121561530a575f80fd5b833561531581614d98565b9250602084013561532581614d98565b9150604084013561533581614d98565b809150509250925092565b5f805f60408486031215615352575f80fd5b833561535d8161507d565b925060208401356001600160401b03811115615377575f80fd5b6153838682870161519e565b9497909650939450505050565b5f80604083850312156153a1575f80fd5b8251915060208301516001600160401b038111156153bd575f80fd5b8301601f810185136153cd575f80fd5b80516153db614cf882614c7f565b8181528660208385010111156153ef575f80fd5b615400826020830160208601614ea0565b8093505050509250929050565b5f806040838503121561541e575f80fd5b825161542981614d98565b6020939093015192949293505050565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561545d575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161548957615489615464565b5060010190565b600181811c908216806154a457607f821691505b60208210810361502057634e487b7160e01b5f52602260045260245ffd5b8181038181111561157d5761157d615464565b634e487b7160e01b5f52602160045260245ffd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f808335601e19843603018112615535575f80fd5b8301803591506001600160401b0382111561554e575f80fd5b6020019150368190038213156151de575f80fd5b818382375f9101908152919050565b602081525f61069f6020830184614ec2565b601f821115610821575f81815260208120601f850160051c810160208610156155a95750805b601f850160051c820191505b818110156117de578281556001016155b5565b81516001600160401b038111156155e1576155e1614c3b565b6155f5816155ef8454615490565b84615583565b602080601f831160018114615628575f84156156115750858301515b5f19600386901b1c1916600185901b1785556117de565b5f85815260208120601f198616915b8281101561565657888601518255948401946001909101908401615637565b508582101561567357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f60208085019450825f5b858110156156bf5781356156a481614d98565b6001600160a01b031687529582019590820190600101615691565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112615707575f80fd5b83016020810192503590506001600160401b03811115615725575f80fd5b8036038213156151de575f80fd5b606080825281018690525f6001600160fb1b03871115615751575f80fd5b8660051b80896080850137808301905060206080848303018185015261577b60808301888a615683565b84810360408601528581529150808201600586901b83018201875f5b888110156157d157858303601f190184526157b2828b6156f2565b6157bd8582846156ca565b958701959450505090840190600101615797565b50909c9b505050505050505050505050565b602081525f615057602083018486615683565b604081525f615809604083018587615683565b8281036020848101919091528451808352858201928201905f5b81811015615841578451151583529383019391830191600101615823565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b1660018201528260158201525f8251615888816035850160208701614ea0565b91909101603501949350505050565b5f82516158a8818460208701614ea0565b9190910192915050565b5f602082840312156158c2575f80fd5b815161069f8161507d565b5f808335601e198436030181126158e2575f80fd5b8301803591506001600160401b038211156158fb575f80fd5b6020019150600581901b36038213156151de575f80fd5b5f60408201848352602060408185015281855180845260608601915082870193505f5b8181101561595a5784516001600160a01b031683529383019391830191600101615935565b5090979650505050505050565b5f6020808385031215615978575f80fd5b82516001600160401b0381111561598d575f80fd5b8301601f8101851361599d575f80fd5b80516159ab614cf882614d76565b81815260059190911b820183019083810190878311156159c9575f80fd5b928401925b8284101561444c578351825292840192908401906159ce565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081525f8235615a2481614d98565b6001600160a01b0316602083810191909152615a42908401846156f2565b604080850152615a566060850182846156ca565b95945050505050565b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8082018082111561157d5761157d615464565b5f8351615aba818460208801614ea0565b6508ae4e4dee4560d31b9083019081528351615add816006840160208801614ea0565b602960f81b60069290910191820152600701949350505050565b5f8351615b08818460208801614ea0565b650a0c2dcd2c6560d31b9083019081528351615add816006840160208801614ea0565b5f8351615b3c818460208801614ea0565b670aadcd6dcdeeedc560c31b9083019081528351615b61816008840160208801614ea0565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201525f6120bc6080830184614ec2565b6001600160a01b03831681526040810160048310615bcb57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b80516001600160701b0381168114614db7575f80fd5b5f805f60608486031215615c00575f80fd5b615c0984615bd8565b9250615c1760208501615bd8565b9150604084015163ffffffff81168114615335575f80fd5b84815283602082015260018060a01b0383166040820152608060608201525f6120bc6080830184614ec2565b5f60208284031215615c6b575f80fd5b815161069f81614d98565b5f60208284031215615c86575f80fd5b815162ffffff8116811461069f575f80fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615cda57615cda615464565b5092915050565b828152604060208201525f6150576040830184614ec2565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f9061444c90830184614ec2565b5f8060408385031215615d44575f80fd5b505080516020909101519092909150565b5f600160ff1b8201615d6957615d69615464565b505f0390565b6001600160a01b03828116828216039080821115615cda57615cda615464565b634e487b7160e01b5f52601260045260245ffd5b5f82615db157615db1615d8f565b500690565b808202811582820484141761157d5761157d615464565b5f82615ddb57615ddb615d8f565b50049056fea2646970667358221220d82901ab41ad4a880be21280b78ed1e0f46bd9051cce7a4af24a0d40325ddb4d64736f6c63430008140033
Deployed Bytecode
0x608060405260043610610184575f3560e01c80637ec753fe116100d0578063b9b5149b11610089578063d63234e011610063578063d63234e0146105a8578063d808d889146105c5578063fa461e33146102a4578063fa9ec7af146105d8576101c3565b8063b9b5149b14610546578063bf5c55a214610559578063c34c08e514610578576101c3565b80637ec753fe1461049757806392bcc8be146104b657806394d3d793146104d5578063afed2d0e146104e9578063b93c0beb14610508578063b946fd3b14610527576101c3565b80633644e5151161013d5780635ac86ab7116101175780635ac86ab7146103e95780636b3ec416146104185780636fbf72f91461042b5780637e467ecf14610464576101c3565b80633644e515146102eb5780633c481d57146103005780634c42342f146103d6576101c3565b80630ced9fb9146101ff5780630dc4bdae146102365780630e8cc705146102575780631975b0961461027657806323a69e75146102a45780632adb806f146102c3576101c3565b366101c357604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101ce575f80fd5b505f80806101df3660048184614c14565b8101906101ec9190614ca5565b9250925092506101fd8383836105eb565b005b34801561020a575f80fd5b50600654600754604080516001600160a01b039384168152929091166020830152015b60405180910390f35b610249610244366004614d30565b610694565b60405190815260200161022d565b348015610262575f80fd5b506101fd610271366004614dbc565b6106a6565b348015610281575f80fd5b50610295610290366004614e62565b610826565b60405161022d93929190614eed565b3480156102af575f80fd5b506101fd6102be366004614f2a565b610925565b6102d66102d1366004614fa2565b61096b565b6040805192835260208301919091520161022d565b3480156102f6575f80fd5b5061024960095481565b34801561030b575f80fd5b5060026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b547fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0547f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5460035f527f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35460ff938416939283169291821691166040805194151585529215156020850152901515918301919091521515606082015260800161022d565b6102d66103e4366004615026565b610992565b3480156103f4575f80fd5b5061040861040336600461505f565b6109b6565b604051901515815260200161022d565b6101fd610426366004615026565b6109f6565b348015610436575f80fd5b506004546005546008546040805193845260208401929092526001600160a01b03169082015260600161022d565b34801561046f575f80fd5b506102497f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156104a2575f80fd5b506101fd6104b13660046150ed565b610d11565b3480156104c1575f80fd5b506101fd6104d03660046151e5565b610e96565b3480156104e0575f80fd5b506101fd61107f565b3480156104f4575f80fd5b506101fd610503366004615277565b611105565b348015610513575f80fd5b506101fd610522366004615292565b611175565b348015610532575f80fd5b506101fd6105413660046152f8565b61142a565b610249610554366004615026565b611573565b348015610564575f80fd5b506101fd610573366004615340565b611583565b348015610583575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161022d565b3480156105b3575f80fd5b506001546001600160a01b0316610590565b6102496105d3366004614fa2565b611618565b6102d66105e6366004614d30565b611623565b5f8313806105f857505f82135b6106345760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b5f808280602001905181019061064a9190615390565b915091505f8082806020019051810190610664919061540d565b91509150610673848233611633565b855f88131561067f5750865b61068a8333836117e6565b5050505050505050565b5f61069f8383611903565b9392505050565b6106ae611e7b565b5f5b8251811015610821575f6106dc8483815181106106cf576106cf615439565b6020026020010151611ef1565b156106f25750476106ed8382611f29565b61079e565b83828151811061070457610704615439565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610752573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610776919061544d565b905061079c84838151811061078d5761078d615439565b60200260200101518483611fe2565b505b826001600160a01b0316336001600160a01b03168584815181106107c4576107c4615439565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161080691815260200190565b60405180910390a4508061081981615478565b9150506106b0565b505050565b6040805180820182525f80825260606020808401919091526001600160a01b038781168352600a8252848320548782168452600b835285842054878552600c84529386902086518088019097528054909216865260018201805460ff92831697929095169594919384019161089a90615490565b80601f01602080910402602001604051908101604052809291908181526020018280546108c690615490565b80156109115780601f106108e857610100808354040283529160200191610911565b820191905f5260205f20905b8154815290600101906020018083116108f457829003601f168201915b505050505081525050905093509350939050565b610965848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506105eb92505050565b50505050565b5f805f5a905061097b85856120c6565b92505a61098890826154c2565b9150509250929050565b5f805f5a90506109a1846125d7565b92505a6109ae90826154c2565b915050915091565b5f60025f8360038111156109cc576109cc6154d5565b60038111156109dd576109dd6154d5565b815260208101919091526040015f205460ff1692915050565b600260035403610a185760405162461bcd60e51b815260040161062b906154e9565b60026003556003610a2881612b20565b5f610a37610120840184615520565b905011610a805760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8260a0013511610ad35760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b600a5f610ae66060850160408601615277565b6001600160a01b0316815260208101919091526040015f205460ff16610b3f5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b604482015260640161062b565b5f610b8f6003610b526020860186615277565b610b6260a0870160808801615277565b610b726060880160408901615277565b60a088013560c0890135610b8a6101408b018b615520565b612b69565b90505f80610ba36060860160408701615277565b6001600160a01b031683610bbb610120880188615520565b604051610bc9929190615562565b5f6040518083038185875af1925050503d805f8114610c03576040519150601f19603f3d011682016040523d82523d5f602084013e610c08565b606091505b509150915081610c5c57610c43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612ddf565b60405162461bcd60e51b815260040161062b9190615571565b610c82610c6c6020870187615277565b610c7c6060880160408901615277565b5f613053565b50610d079050610c956020850185615277565b610ca56040860160208701615277565b610cb56080870160608801615277565b60a08701355f60e0890135610cce6101008b018b615520565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061316292505050565b5050600160035550565b610d19611e7b565b5f5b8251811015610821575f828281518110610d3757610d37615439565b602002602001015110158015610d6857506103e8828281518110610d5d57610d5d615439565b602002602001015111155b610da95760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b604482015260640161062b565b828181518110610dbb57610dbb615439565b602002602001015115610ded57818181518110610dda57610dda615439565b6020026020010151600481905550610e0e565b818181518110610dff57610dff615439565b60200260200101516005819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610e4157610e41615439565b6020026020010151838381518110610e5b57610e5b615439565b6020026020010151604051610e7c9291909115158252602082015260400190565b60405180910390a180610e8e81615478565b915050610d1b565b610e9e611e7b565b848114610edc5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b828114610f1a5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b825f5b81811015611034576040518060400160405280878784818110610f4257610f42615439565b9050602002016020810190610f579190615277565b6001600160a01b03168152602001858584818110610f7757610f77615439565b9050602002810190610f899190615520565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250600c92508b90508a85818110610fd557610fd5615439565b60209081029290920135835250818101929092526040015f20825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061101d90826155c8565b50905050808061102c90615478565b915050610f1d565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161106e96959493929190615733565b60405180910390a150505050505050565b33806110936001546001600160a01b031690565b6001600160a01b0316146110f95760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b606482015260840161062b565b611102816131c6565b50565b61110d611e7b565b600180546001600160a01b0383166001600160a01b0319909116811790915561113d5f546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61117d611e7b565b8215611275575f5b8381101561123a57600a5f8686848181106111a2576111a2615439565b90506020020160208101906111b79190615277565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600a908787858181106111ec576111ec615439565b90506020020160208101906112019190615277565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061123281615478565b915050611185565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161126c9291906157e3565b60405180910390a15b8015610965575f816001600160401b0381111561129457611294614c3b565b6040519080825280602002602001820160405280156112bd578160200160208202803683370190505b5090505f5b828110156113e757600b5f8585848181106112df576112df615439565b90506020020160208101906112f49190615277565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600b9086868581811061132957611329615439565b905060200201602081019061133e9190615277565b6001600160a01b0316815260208101919091526040015f908120805460ff191692151592909217909155600b9085858481811061137d5761137d615439565b90506020020160208101906113929190615277565b6001600160a01b0316815260208101919091526040015f2054825160ff909116908390839081106113c5576113c5615439565b91151560209283029190910190910152806113df81615478565b9150506112c2565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e6383838360405161141b939291906157f6565b60405180910390a15050505050565b611432611e7b565b6001600160a01b0383161561149357600680546001600160a01b0319166001600160a01b0385169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0382161561150157600780546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b6001600160a01b0381161561082157600880546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3911b5760f95a64aaa8d7f1775f57a7b6ed0bcf1ebb3fbfcc045e2f04eaad11910160405180910390a150505050565b5f61157d826125d7565b92915050565b61158b611e7b565b805f5b818110156116115784156115d0576115cb8484838181106115b1576115b1615439565b90506020020160208101906115c6919061505f565b61321f565b6115ff565b6115ff8484838181106115e5576115e5615439565b90506020020160208101906115fa919061505f565b6132b1565b8061160981615478565b91505061158e565b5050505050565b5f61069f83836120c6565b5f805f5a905061097b8585611903565b600f60f884901c165f818152600c60209081526040808320815180830190925280546001600160a01b03168252600181018054929391929184019161167790615490565b80601f01602080910402602001604051908101604052809291908181526020018280546116a390615490565b80156116ee5780601f106116c5576101008083540402835291602001916116ee565b820191905f5260205f20905b8154815290600101906020018083116116d157829003601f168201915b5050509190925250508151919250506001600160a01b03166117525760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e646578656400000000000000604482015260640161062b565b5f815f015185836020015160405160200161176f9392919061584f565b604051602081830303815290604052805190602001205f1c9050836001600160a01b0316816001600160a01b0316146117de5760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b604482015260640161062b565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916118419190615897565b5f604051808303815f865af19150503d805f811461187a576040519150601f19603f3d011682016040523d82523d5f602084013e61187f565b606091505b50915091508180156118a95750805115806118a95750808060200190518101906118a991906158b2565b6116115760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b606482015260840161062b565b5f6002600354036119265760405162461bcd60e51b815260040161062b906154e9565b6002600355600161193681612b20565b428310156119705760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b6001600f604086013560f81c16145f8080808061198d8a87613336565b945094509450945094506119ef835f815181106119ac576119ac615439565b60200260200101518b8060e001906119c491906158cd565b5f8181106119d4576119d4615439565b90506020020160208101906119e99190615277565b866117e6565b8515611bb6578415611ad357611a4960408b013584611a1160e08e018e6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613863915050565b611acc82611a5d60408d0160208e01615277565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa158015611aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac6919061544d565b90613b5a565b9750611d2b565b611b3f60408b013584611ae960e08e018e6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508d5f016020810190611b3a9190615277565b613863565b611acc818460018651611b5291906154c2565b81518110611b6257611b62615439565b60200260200101516001600160a01b03166370a082318d5f016020810190611b8a9190615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401611a87565b5f8a604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611be9929190615912565b5f60405180830381865afa158015611c03573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c2a9190810190615967565b90508515611c9757611c7c8185611c4460e08f018f6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613baf915050565b611c9083611a5d60408e0160208f01615277565b9850611d29565b611cff8185611ca960e08f018f6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508e5f016020810190611cfa9190615277565b613baf565b8060018251611d0e91906154c2565b81518110611d1e57611d1e615439565b602002602001015198505b505b8960800135881015611d4f5760405162461bcd60e51b815260040161062b906159e7565b8415611d8457611d6e611d6860408c0160208d01615277565b89613d99565b611d84611d7e60208c018c615277565b89611f29565b50505050505f85806101200190611d9b9190615520565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929350611e6d9250611de391505060c08801886158cd565b5f818110611df357611df3615439565b9050602002016020810190611e089190615277565b611e1560c08901896158cd565b6001611e2460c08c018c6158cd565b611e2f9291506154c2565b818110611e3e57611e3e615439565b9050602002016020810190611e539190615277565b611e6060208a018a615277565b8960600135885f87613162565b505050600160035592915050565b33611e8d5f546001600160a01b031690565b6001600160a01b031614611eef5760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b606482015260840161062b565b565b5f6001600160a01b038216158061157d57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080515f808252602082019092526001600160a01b038416908390604051611f529190615897565b5f6040518083038185875af1925050503d805f8114611f8c576040519150601f19603f3d011682016040523d82523d5f602084013e611f91565b606091505b50509050806108215760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161062b565b5f805f856001600160a01b031663a9059cbb868660405160240161201b9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516120549190615897565b5f604051808303815f865af19150503d805f811461208d576040519150601f19603f3d011682016040523d82523d5f602084013e612092565b606091505b50915091508180156120bc5750805115806120bc5750808060200190518101906120bc91906158b2565b9695505050505050565b5f6002600354036120e95760405162461bcd60e51b815260040161062b906154e9565b60026003555f6120f881612b20565b5f6121066020850185615520565b90501161214f5760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8460800135116121a25760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b5f6121b36060860160408701615277565b6001600160a01b0316036122135760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b606482015260840161062b565b5f8460a00135116122775760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b606482015260840161062b565b600b5f61228a6080870160608801615277565b6001600160a01b0316815260208101919091526040015f205460ff166122f25760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420777261707065642061646472657373000000000000000000604482015260640161062b565b6006545f906001600160a01b03168161233b8161231260208a018a615277565b61232260808b0160608c01615277565b8560808c013560c08d0135610b8a6101008f018f615520565b90506123556123506040890160208a01615277565b611ef1565b1561237b5761236a6060880160408901615277565b6001600160a01b0316319250612412565b61238b6040880160208901615277565b6001600160a01b03166370a082316123a960608a0160408b01615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156123eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240f919061544d565b92505b5f80836001600160a01b031683633f3204d28a6040516024016124359190615a14565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161246e9190615897565b5f6040518083038185875af1925050503d805f81146124a8576040519150601f19603f3d011682016040523d82523d5f602084013e6124ad565b606091505b5091509150816124e557610c43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612ddf565b506124fb90506123506040890160208a01615277565b1561252b576125248361251460608a0160408b01615277565b6001600160a01b03163190613b5a565b9450612560565b61255d8361253f60408a0160208b01615277565b6001600160a01b03166370a08231611b8a60608c0160408d01615277565b94505b8660a001358510156125845760405162461bcd60e51b815260040161062b906159e7565b6125c86125946020890189615277565b6125a460408a0160208b01615277565b6125b460608b0160408c01615277565b60808b0135895f610cce60e08f018f615520565b50505050600160035592915050565b5f6002600354036125fa5760405162461bcd60e51b815260040161062b906154e9565b6002600355600261260a81612b20565b5f6126196101008501856158cd565b9050116126565760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b604482015260640161062b565b428360e0013510156126945760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b600b5f6126a76080860160608701615277565b6001600160a01b0316815260208101919091526040015f205460ff166126df5760405162461bcd60e51b815260040161062b90615a5f565b5f6126ed6020850185615277565b90505f6127006040860160208701615277565b90505f806127146123506020890189615277565b1561272c576127296080880160608901615277565b93505b5f61276b600261273f60208b018b615277565b61274f60808c0160608d01615277565b5f8c608001358d60c001358e806101200190610b8a9190615520565b905061278061235060408a0160208b01615277565b1561281a576127956080890160608a01615277565b93506127a76080890160608a01615277565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156127eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061280f919061544d565b9250600191506128b1565b61282a6040890160208a01615277565b6001600160a01b03166370a0823161284860608b0160408c01615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561288a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae919061544d565b92505b5f6128c06101008a018a6158cd565b91503090506060600183111561297857875f805b8581101561296d575f8e8061010001906128ee91906158cd565b838181106128fe576128fe615439565b905060200201359050612912848483613eac565b955093506129216001886154c2565b8214801561292d575088155b1561294b578e60400160208101906129459190615277565b95508a92505b6129578682878b614197565b975050808061296590615478565b9150506128d4565b50859b5050506129f6565b6129a7888861298b6101008f018f6158cd565b5f81811061299b5761299b615439565b90506020020135613eac565b91508590506129c3576129c060608c0160408d01615277565b91505b6129f3826129d56101008e018e6158cd565b5f8181106129e5576129e5615439565b905060200201358387614197565b99505b5050508115612a7057612a1383611a5d60808b0160608c01615277565b96508760a00135871015612a395760405162461bcd60e51b815260040161062b906159e7565b612a52612a4c60808a0160608b01615277565b88613d99565b612a6b612a6560608a0160408b01615277565b88611f29565b612ac8565b612aa283612a8460408b0160208c01615277565b6001600160a01b03166370a08231611b8a60608d0160408e01615277565b96508760a00135871015612ac85760405162461bcd60e51b815260040161062b906159e7565b612b10612ad860208a018a615277565b612ae860408b0160208c01615277565b612af860608c0160408d01615277565b8b608001358b5f8e806101400190610cce9190615520565b5050505050506001600355919050565b612b29816109b6565b156111025760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161062b565b5f805f612b7586614346565b90925090505f60038c6003811115612b8f57612b8f6154d5565b14612b9b576001612b9d565b5f5b90505f612bad828a858a8a6143a2565b9050612bb88c611ef1565b15612d325760038d6003811115612bd157612bd16154d5565b03612c2b5788341015612c1a5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b612c243484613b5a565b9450612c72565b883414612c6e5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b8094505b6001600160a01b038b1615612d11576001600160a01b038b165f908152600b602052604090205460ff16612cb85760405162461bcd60e51b815260040161062b90615a5f565b60038d6003811115612ccc57612ccc6154d5565b03612cee57612cdb8b86614457565b612ce68b8b87613053565b5f9450612d11565b60028d6003811115612d0257612d026154d5565b03612d1157612d118b82614457565b8315612d2d57600854612d2d906001600160a01b031684611f29565b612dcf565b612d3e8c33308c614551565b60038d6003811115612d5257612d526154d5565b03612d6a57612d628c8b83613053565b349450612daf565b5f8d6003811115612d7d57612d7d6154d5565b03612d9257612d8d8c8b836117e6565b612daf565b60028d6003811115612da657612da66154d5565b03612daf578094505b8315612dcf57600854612dcd908d906001600160a01b031685611fe2565b505b5050505098975050505050505050565b60606044835110158015612e175750825f81518110612e0057612e00615439565b6020910101516001600160f81b031916600160fb1b145b8015612e48575082600181518110612e3157612e31615439565b6020910101516001600160f81b03191660c360f81b145b8015612e79575082600281518110612e6257612e62615439565b6020910101516001600160f81b031916607960f81b145b8015612eaa575082600381518110612e9357612e93615439565b6020910101516001600160f81b031916600560fd1b145b15612f3457604483810180519091612ec29190615a96565b84511015612f0a5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015260640161062b565b8281604051602001612f1d929190615aa9565b60405160208183030381529060405291505061157d565b82516024148015612f695750825f81518110612f5257612f52615439565b6020910101516001600160f81b031916602760f91b145b8015612f9a575082600181518110612f8357612f83615439565b6020910101516001600160f81b031916600960fb1b145b8015612fcb575082600281518110612fb457612fb4615439565b6020910101516001600160f81b031916607b60f81b145b8015612ffc575082600381518110612fe557612fe5615439565b6020910101516001600160f81b031916607160f81b145b156130215760248301518261301082614674565b604051602001612f1d929190615af7565b8161302b8461469c565b60405160200161303c929190615b2b565b604051602081830303815290604052905092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f928392908716916130ae9190615897565b5f604051808303815f865af19150503d805f81146130e7576040519150601f19603f3d011682016040523d82523d5f602084013e6130ec565b606091505b509150915081801561311657508051158061311657508080602001905181019061311691906158b2565b6116115760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640161062b565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516131b59493929190615b7b565b60405180910390a450505050505050565b600180546001600160a01b03199081169091555f80546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b8061322981612b20565b600160025f846003811115613240576132406154d5565b6003811115613251576132516154d5565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d455933836040516132a5929190615b9f565b60405180910390a15050565b806132bb8161487c565b5f60025f8460038111156132d1576132d16154d5565b60038111156132e2576132e26154d5565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f4cd3e1443d03aba343c5d882744f8f172c07b495e955ac3defb325cbd73c855033836040516132a5929190615b9f565b5f806060818061334960e08801886158cd565b61335591506001615a96565b61336260c08901896158cd565b9050146133a05760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015260640161062b565b600b5f6133b360408a0160208b01615277565b6001600160a01b0316815260208101919091526040015f205460ff166133eb5760405162461bcd60e51b815260040161062b90615a5f565b5f806133fa8960a00135614346565b909250905061341d600160608b0135836134186101008e018e615520565b6143a2565b95505f61342d60c08b018b6158cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525093945084925060019150613472905060c08e018e6158cd565b61347d9291506154c2565b8151811061348d5761348d615439565b602002602001015190506134cf8b8060c001906134aa91906158cd565b5f8181106134ba576134ba615439565b90506020020160208101906123509190615277565b1561358f578a60600135341461351b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b604482015260640161062b565b831561353757600854613537906001600160a01b031684611f29565b61354760408c0160208d01615277565b825f8151811061355957613559615439565b6001600160a01b0390921660209283029190910182015261358a906135849060408e01908e01615277565b89614457565b6136f0565b89156136a157815f815181106135a7576135a7615439565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135f5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613619919061544d565b9750613644825f8151811061363057613630615439565b602002602001015133308e60600135614551565b61369a8b60a00135611ac68a855f8151811061366257613662615439565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401611a87565b97506136b6565b6136b6825f8151811061363057613630615439565b83156136f0576136ee825f815181106136d1576136d1615439565b60209081029190910101516008546001600160a01b031685611fe2565b505b6136f981611ef1565b156137c75761370e60408c0160208d01615277565b826001845161371d91906154c2565b8151811061372d5761372d615439565b6001600160a01b03909216602092830291909101820152600199506137589060408d01908d01615277565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561379c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137c0919061544d565b9550613852565b8915613852576001600160a01b0381166370a082316137e960208e018e615277565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561382b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061384f919061544d565b94505b819650505050509295509295909350565b5f5b6001845161387391906154c2565b811015611611575f8085838151811061388e5761388e615439565b6020026020010151868460016138a49190615a96565b815181106138b4576138b4615439565b6020026020010151915091505f816001600160a01b0316836001600160a01b0316106138e15781836138e4565b82825b5090505f8685815181106138fa576138fa615439565b602002602001015190505f805f80846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613944573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139689190615bee565b506001600160701b031691506001600160701b031691505f80876001600160a01b03168a6001600160a01b0316146139a15782846139a4565b83835b6040516370a0823160e01b81526001600160a01b038a811660048301529294509092506139df918491908d16906370a0823190602401611a87565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b8152600401613a22939291909283526020830191909152604082015260600190565b602060405180830381865afa158015613a3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a61919061544d565b9450505050505f80856001600160a01b0316886001600160a01b031614613a8957825f613a8c565b5f835b915091505f60028d51613a9f91906154c2565b8a10613aab578a613ad0565b8b613ab78b6001615a96565b81518110613ac757613ac7615439565b60200260200101515b604080515f8152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613b119086908690869060248101615c2f565b5f604051808303815f87803b158015613b28575f80fd5b505af1158015613b3a573d5f803e3d5ffd5b505050505050505050505050508080613b5290615478565b915050613865565b5f82613b6683826154c2565b915081111561157d5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161062b565b5f5b60018451613bbf91906154c2565b811015611611575f80858381518110613bda57613bda615439565b602002602001015186846001613bf09190615a96565b81518110613c0057613c00615439565b6020026020010151915091505f816001600160a01b0316836001600160a01b031610613c2d578183613c30565b82825b5090505f88613c40866001615a96565b81518110613c5057613c50615439565b602002602001015190505f80836001600160a01b0316866001600160a01b031614613c7c57825f613c7f565b5f835b915091505f60028b51613c9291906154c2565b8810613c9e5788613cc3565b89613caa896001615a96565b81518110613cba57613cba615439565b60200260200101515b9050898881518110613cd757613cd7615439565b60200260200101516001600160a01b031663022c0d9f8484845f6001600160401b03811115613d0857613d08614c3b565b6040519080825280601f01601f191660200182016040528015613d32576020820181803683370190505b506040518563ffffffff1660e01b8152600401613d529493929190615c2f565b5f604051808303815f87803b158015613d69575f80fd5b505af1158015613d7b573d5f803e3d5ffd5b50505050505050505050508080613d9190615478565b915050613bb1565b5f80836001600160a01b03165f632e1a7d4d85604051602401613dbe91815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613df79190615897565b5f6040518083038185875af1925050503d805f8114613e31576040519150601f19603f3d011682016040523d82523d5f602084013e613e36565b606091505b5091509150818015613e60575080511580613e60575080806020019051810190613e6091906158b2565b6109655760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c454400604482015260640161062b565b5f60605f8390505f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f149190615c5b565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f779190615c5b565b90505f836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fda9190615c76565b604080516001600160a01b03808716602083015285169181019190915262ffffff821660608201529091505f9060800160408051601f1981840301815291905280516020909101209050600160ff1b88161580156140da57846001600160a01b03168b6001600160a01b0316146140635760405162461bcd60e51b815260040161062b90615c98565b6001600160a01b038a16156140a357836001600160a01b03168a6001600160a01b0316146140a35760405162461bcd60e51b815260040161062b90615c98565b604080516001600160a01b03871660208201529081018390529397508793606001604051602081830303815290604052965061417e565b836001600160a01b03168b6001600160a01b03161461410b5760405162461bcd60e51b815260040161062b90615c98565b6001600160a01b038a161561414b57846001600160a01b03168a6001600160a01b03161461414b5760405162461bcd60e51b815260040161062b90615c98565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b61418989838b611633565b505050505050935093915050565b5f600160ff1b841615801561426f575f856001600160a01b031663128acb0888846141c1886148c8565b6141d16401000276a36001615cba565b8b8b6040516020016141e4929190615ce1565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401614213959493929190615cf9565b60408051808303815f875af115801561422e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142529190615d33565b9150506142678161426290615d55565b614935565b92505061433d565b5f856001600160a01b031663128acb08888461428a886148c8565b6142a9600173fffd8963efd1fc6a506488495d951d5263988d26615d6f565b8b8b6040516020016142bc929190615ce1565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016142eb959493929190615cf9565b60408051808303815f875af1158015614306573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061432a9190615d33565b50905061433961426282615d55565b9250505b50949350505050565b5f8080614354600a85615da3565b905061436b600a6143658684613b5a565b90614986565b915080600114801561437c57505f82115b801561439257506008546001600160a01b031615155b1561439c57600192505b50915091565b5f8086156143cc576143c5612710614365600454896149d390919063ffffffff16565b90506143ea565b6143e7612710614365600554896149d390919063ffffffff16565b90505b80851015614442576143fe86868686614a39565b6144425760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b604482015260640161062b565b61444c8686613b5a565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b17905290515f9182916001600160a01b03861691859161449c9190615897565b5f6040518083038185875af1925050503d805f81146144d6576040519150601f19603f3d011682016040523d82523d5f602084013e6144db565b606091505b509150915081801561450557508051158061450557508080602001905181019061450591906158b2565b6109655760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c45440000604482015260640161062b565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291515f928392908816916145b49190615897565b5f604051808303815f865af19150503d805f81146145ed576040519150601f19603f3d011682016040523d82523d5f602084013e6145f2565b606091505b509150915081801561461c57508051158061461c57508080602001905181019061461c91906158b2565b6117de5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b606482015260840161062b565b606061157d8260405160200161468c91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b905f906146c3906002615db6565b6146ce906002615a96565b6001600160401b038111156146e5576146e5614c3b565b6040519080825280601f01601f19166020018201604052801561470f576020820181803683370190505b509050600360fc1b815f8151811061472957614729615439565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061475757614757615439565b60200101906001600160f81b03191690815f1a9053505f5b84518110156148745782600486838151811061478d5761478d615439565b01602001516001600160f81b031916901c60f81c601081106147b1576147b1615439565b1a60f81b826147c1836002615db6565b6147cc906002615a96565b815181106147dc576147dc615439565b60200101906001600160f81b03191690815f1a9053508285828151811061480557614805615439565b60209101015160f81c600f166010811061482157614821615439565b1a60f81b82614831836002615db6565b61483c906003615a96565b8151811061484c5761484c615439565b60200101906001600160f81b03191690815f1a9053508061486c81615478565b91505061476f565b509392505050565b614885816109b6565b6111025760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161062b565b5f6001600160ff1b038211156149315760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161062b565b5090565b5f808212156149315760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015260640161062b565b5f815f036149c95760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b604482015260640161062b565b61069f8284615dcd565b5f8115806149f6575082826149e88183615db6565b92506149f49083615dcd565b145b61157d5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161062b565b600954604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f6020820152339181019190915260608101869052608081018590525f91829160a00160405160208183030381529060405280519060200120604051602001614ac092919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f805f614b1987878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614ba592505050565b9250925092505f6001858585856040515f8152602001604052604051614b5b949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015614b7b573d5f803e3d5ffd5b5050604051601f1901516007546001600160a01b039081169116149b9a5050505050505050505050565b5f805f8351604114614bf95760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161062b565b505050602081015160408201516060909201515f1a92909190565b5f8085851115614c22575f80fd5b83861115614c2e575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614c7757614c77614c3b565b604052919050565b5f6001600160401b03821115614c9757614c97614c3b565b50601f01601f191660200190565b5f805f60608486031215614cb7575f80fd5b833592506020840135915060408401356001600160401b03811115614cda575f80fd5b8401601f81018613614cea575f80fd5b8035614cfd614cf882614c7f565b614c4f565b818152876020838501011115614d11575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f8060408385031215614d41575f80fd5b82356001600160401b03811115614d56575f80fd5b83016101408186031215614d68575f80fd5b946020939093013593505050565b5f6001600160401b03821115614d8e57614d8e614c3b565b5060051b60200190565b6001600160a01b0381168114611102575f80fd5b8035614db781614d98565b919050565b5f8060408385031215614dcd575f80fd5b82356001600160401b03811115614de2575f80fd5b8301601f81018513614df2575f80fd5b80356020614e02614cf883614d76565b82815260059290921b83018101918181019088841115614e20575f80fd5b938201935b83851015614e47578435614e3881614d98565b82529382019390820190614e25565b9550614e569050868201614dac565b93505050509250929050565b5f805f60608486031215614e74575f80fd5b8335614e7f81614d98565b92506020840135614e8f81614d98565b929592945050506040919091013590565b5f5b83811015614eba578181015183820152602001614ea2565b50505f910152565b5f8151808452614ed9816020860160208601614ea0565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201525f6020830151604060808401526120bc60a0840182614ec2565b5f805f8060608587031215614f3d575f80fd5b843593506020850135925060408501356001600160401b0380821115614f61575f80fd5b818701915087601f830112614f74575f80fd5b813581811115614f82575f80fd5b886020828501011115614f93575f80fd5b95989497505060200194505050565b5f8060408385031215614fb3575f80fd5b82356001600160401b0380821115614fc9575f80fd5b908401906101208287031215614fdd575f80fd5b90925060208401359080821115614ff2575f80fd5b50830160408186031215615004575f80fd5b809150509250929050565b5f6101608284031215615020575f80fd5b50919050565b5f60208284031215615036575f80fd5b81356001600160401b0381111561504b575f80fd5b6150578482850161500f565b949350505050565b5f6020828403121561506f575f80fd5b81356004811061069f575f80fd5b8015158114611102575f80fd5b5f82601f830112615099575f80fd5b813560206150a9614cf883614d76565b82815260059290921b840181019181810190868411156150c7575f80fd5b8286015b848110156150e257803583529183019183016150cb565b509695505050505050565b5f80604083850312156150fe575f80fd5b82356001600160401b0380821115615114575f80fd5b818501915085601f830112615127575f80fd5b81356020615137614cf883614d76565b82815260059290921b84018101918181019089841115615155575f80fd5b948201945b8386101561517c57853561516d8161507d565b8252948201949082019061515a565b96505086013592505080821115615191575f80fd5b506109888582860161508a565b5f8083601f8401126151ae575f80fd5b5081356001600160401b038111156151c4575f80fd5b6020830191508360208260051b85010111156151de575f80fd5b9250929050565b5f805f805f80606087890312156151fa575f80fd5b86356001600160401b0380821115615210575f80fd5b61521c8a838b0161519e565b90985096506020890135915080821115615234575f80fd5b6152408a838b0161519e565b90965094506040890135915080821115615258575f80fd5b5061526589828a0161519e565b979a9699509497509295939492505050565b5f60208284031215615287575f80fd5b813561069f81614d98565b5f805f80604085870312156152a5575f80fd5b84356001600160401b03808211156152bb575f80fd5b6152c78883890161519e565b909650945060208701359150808211156152df575f80fd5b506152ec8782880161519e565b95989497509550505050565b5f805f6060848603121561530a575f80fd5b833561531581614d98565b9250602084013561532581614d98565b9150604084013561533581614d98565b809150509250925092565b5f805f60408486031215615352575f80fd5b833561535d8161507d565b925060208401356001600160401b03811115615377575f80fd5b6153838682870161519e565b9497909650939450505050565b5f80604083850312156153a1575f80fd5b8251915060208301516001600160401b038111156153bd575f80fd5b8301601f810185136153cd575f80fd5b80516153db614cf882614c7f565b8181528660208385010111156153ef575f80fd5b615400826020830160208601614ea0565b8093505050509250929050565b5f806040838503121561541e575f80fd5b825161542981614d98565b6020939093015192949293505050565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561545d575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161548957615489615464565b5060010190565b600181811c908216806154a457607f821691505b60208210810361502057634e487b7160e01b5f52602260045260245ffd5b8181038181111561157d5761157d615464565b634e487b7160e01b5f52602160045260245ffd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f808335601e19843603018112615535575f80fd5b8301803591506001600160401b0382111561554e575f80fd5b6020019150368190038213156151de575f80fd5b818382375f9101908152919050565b602081525f61069f6020830184614ec2565b601f821115610821575f81815260208120601f850160051c810160208610156155a95750805b601f850160051c820191505b818110156117de578281556001016155b5565b81516001600160401b038111156155e1576155e1614c3b565b6155f5816155ef8454615490565b84615583565b602080601f831160018114615628575f84156156115750858301515b5f19600386901b1c1916600185901b1785556117de565b5f85815260208120601f198616915b8281101561565657888601518255948401946001909101908401615637565b508582101561567357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f60208085019450825f5b858110156156bf5781356156a481614d98565b6001600160a01b031687529582019590820190600101615691565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112615707575f80fd5b83016020810192503590506001600160401b03811115615725575f80fd5b8036038213156151de575f80fd5b606080825281018690525f6001600160fb1b03871115615751575f80fd5b8660051b80896080850137808301905060206080848303018185015261577b60808301888a615683565b84810360408601528581529150808201600586901b83018201875f5b888110156157d157858303601f190184526157b2828b6156f2565b6157bd8582846156ca565b958701959450505090840190600101615797565b50909c9b505050505050505050505050565b602081525f615057602083018486615683565b604081525f615809604083018587615683565b8281036020848101919091528451808352858201928201905f5b81811015615841578451151583529383019391830191600101615823565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b1660018201528260158201525f8251615888816035850160208701614ea0565b91909101603501949350505050565b5f82516158a8818460208701614ea0565b9190910192915050565b5f602082840312156158c2575f80fd5b815161069f8161507d565b5f808335601e198436030181126158e2575f80fd5b8301803591506001600160401b038211156158fb575f80fd5b6020019150600581901b36038213156151de575f80fd5b5f60408201848352602060408185015281855180845260608601915082870193505f5b8181101561595a5784516001600160a01b031683529383019391830191600101615935565b5090979650505050505050565b5f6020808385031215615978575f80fd5b82516001600160401b0381111561598d575f80fd5b8301601f8101851361599d575f80fd5b80516159ab614cf882614d76565b81815260059190911b820183019083810190878311156159c9575f80fd5b928401925b8284101561444c578351825292840192908401906159ce565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081525f8235615a2481614d98565b6001600160a01b0316602083810191909152615a42908401846156f2565b604080850152615a566060850182846156ca565b95945050505050565b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8082018082111561157d5761157d615464565b5f8351615aba818460208801614ea0565b6508ae4e4dee4560d31b9083019081528351615add816006840160208801614ea0565b602960f81b60069290910191820152600701949350505050565b5f8351615b08818460208801614ea0565b650a0c2dcd2c6560d31b9083019081528351615add816006840160208801614ea0565b5f8351615b3c818460208801614ea0565b670aadcd6dcdeeedc560c31b9083019081528351615b61816008840160208801614ea0565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201525f6120bc6080830184614ec2565b6001600160a01b03831681526040810160048310615bcb57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b80516001600160701b0381168114614db7575f80fd5b5f805f60608486031215615c00575f80fd5b615c0984615bd8565b9250615c1760208501615bd8565b9150604084015163ffffffff81168114615335575f80fd5b84815283602082015260018060a01b0383166040820152608060608201525f6120bc6080830184614ec2565b5f60208284031215615c6b575f80fd5b815161069f81614d98565b5f60208284031215615c86575f80fd5b815162ffffff8116811461069f575f80fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615cda57615cda615464565b5092915050565b828152604060208201525f6150576040830184614ec2565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f9061444c90830184614ec2565b5f8060408385031215615d44575f80fd5b505080516020909101519092909150565b5f600160ff1b8201615d6957615d69615464565b505f0390565b6001600160a01b03828116828216039080821115615cda57615cda615464565b634e487b7160e01b5f52601260045260245ffd5b5f82615db157615db1615d8f565b500690565b808202811582820484141761157d5761157d615464565b5f82615ddb57615ddb615d8f565b50049056fea2646970667358221220d82901ab41ad4a880be21280b78ed1e0f46bd9051cce7a4af24a0d40325ddb4d64736f6c63430008140033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BASE | 21.42% | $3,840.79 | 2.4646 | $9,465.99 | |
BASE | 3.90% | $0.998419 | 1,725.7266 | $1,723 | |
BASE | 2.47% | $2.73 | 399.6253 | $1,090.98 | |
BASE | 2.15% | $0.019047 | 49,816.2528 | $948.87 | |
BASE | 1.77% | $0.004958 | 157,930.4067 | $783.06 | |
BASE | 0.86% | $0.550872 | 686.2689 | $378.05 | |
BASE | 0.71% | $0.040607 | 7,719.7477 | $313.48 | |
BASE | 0.55% | $0.019366 | 12,474.9183 | $241.59 | |
BASE | 0.46% | $2.51 | 80.49 | $202.03 | |
BASE | 0.44% | $3.82 | 50.9581 | $194.66 | |
BASE | 0.36% | <$0.000001 | 462,682,196.5228 | $157.77 | |
BASE | 0.30% | $0.034189 | 3,915.7149 | $133.87 | |
BASE | 0.30% | $0.022269 | 5,974.341 | $133.04 | |
BASE | 0.28% | $0.022109 | 5,685.3425 | $125.7 | |
BASE | 0.28% | $0.107325 | 1,168.4275 | $125.4 | |
BASE | 0.27% | $0.012637 | 9,292.4728 | $117.43 | |
BASE | 0.26% | $1.8 | 64.27 | $115.69 | |
BASE | 0.24% | $0.004042 | 26,390.6771 | $106.68 | |
BASE | 0.24% | $0.084172 | 1,244.9459 | $104.79 | |
BASE | 0.20% | $0.0061 | 14,155.6244 | $86.36 | |
BASE | 0.19% | $0.000725 | 117,737.0298 | $85.4 | |
BASE | 0.14% | $0.003649 | 16,626.3898 | $60.67 | |
BASE | 0.13% | $0.032475 | 1,829.9903 | $59.43 | |
BASE | 0.11% | <$0.000001 | 3,943,514,203.8204 | $49.69 | |
BASE | 0.11% | $3.41 | 14.3552 | $48.95 | |
BASE | 0.10% | $0.001037 | 43,530.6855 | $45.15 | |
BASE | 0.10% | $0.247405 | 172.7862 | $42.75 | |
BASE | 0.09% | $0.00943 | 4,332.0488 | $40.85 | |
BASE | 0.09% | $0.000008 | 5,118,309.2841 | $39.21 | |
BASE | 0.09% | $0.000097 | 403,535.8475 | $39.07 | |
BASE | 0.09% | $0.377172 | 100.413 | $37.87 | |
BASE | 0.08% | <$0.000001 | 900,997,572.2855 | $36.58 | |
BASE | 0.08% | $0.000019 | 1,886,174.8452 | $35.72 | |
BASE | 0.08% | $0.000182 | 194,370.4645 | $35.32 | |
BASE | 0.08% | $0.029744 | 1,173.2989 | $34.9 | |
BASE | 0.08% | $0.000104 | 325,454.2772 | $33.85 | |
BASE | 0.07% | $0.044551 | 735.2686 | $32.76 | |
BASE | 0.07% | $0.000546 | 58,118.2036 | $31.73 | |
BASE | 0.07% | $0.000496 | 63,521.4192 | $31.5 | |
BASE | 0.07% | $0.025034 | 1,185.6274 | $29.68 | |
BASE | 0.07% | $3,837.71 | 0.00771007 | $29.59 | |
BASE | 0.07% | $0.000531 | 55,600.699 | $29.55 | |
BASE | 0.06% | $0.000191 | 146,901.2245 | $28.11 | |
BASE | 0.06% | $1.07 | 25.9449 | $27.71 | |
BASE | 0.06% | $0.000294 | 93,250.0529 | $27.43 | |
BASE | 0.06% | $0.001733 | 15,297.9202 | $26.5 | |
BASE | 0.06% | $0.000355 | 73,030.5727 | $25.95 | |
BASE | 0.06% | $0.00004 | 625,107.3823 | $25.21 | |
BASE | 0.06% | $0.027216 | 918.9813 | $25.01 | |
BASE | 0.06% | $0.000021 | 1,137,622.8165 | $24.37 | |
BASE | 0.05% | $0.00003 | 820,398.3472 | $24.21 | |
BASE | 0.05% | $0.005146 | 4,419.4432 | $22.74 | |
BASE | 0.05% | $0.086631 | 261.4203 | $22.65 | |
BASE | 0.05% | $0.004691 | 4,404.5027 | $20.66 | |
BASE | 0.05% | <$0.000001 | 47,361,003.8965 | $20.46 | |
BASE | 0.05% | $0.000565 | 35,552.6341 | $20.1 | |
BASE | 0.05% | $0.005205 | 3,846.2419 | $20.02 | |
BASE | 0.04% | $0.008235 | 2,321.6209 | $19.12 | |
BASE | 0.04% | $25.88 | 0.7055 | $18.26 | |
BASE | 0.04% | $0.999673 | 18.2298 | $18.22 | |
BASE | 0.04% | $0.000914 | 19,806.8807 | $18.11 | |
BASE | 0.04% | $103,669 | 0.00017462 | $18.1 | |
BASE | 0.04% | $0.000003 | 6,567,382.282 | $17.73 | |
BASE | 0.04% | $0.018327 | 958.3644 | $17.56 | |
BASE | 0.04% | $0.00801 | 2,151.3333 | $17.23 | |
BASE | 0.04% | $0.00162 | 10,628.4456 | $17.22 | |
BASE | 0.04% | $0.003656 | 4,623.0128 | $16.9 | |
BASE | 0.04% | $0.29987 | 53.4426 | $16.03 | |
BASE | 0.03% | $0.000909 | 16,186.9403 | $14.71 | |
BASE | 0.03% | $0.026639 | 547.3328 | $14.58 | |
BASE | 0.03% | $0.188484 | 74.8284 | $14.1 | |
BASE | 0.03% | $0.007589 | 1,831.6856 | $13.9 | |
BASE | 0.03% | $0.00001 | 1,379,810.7778 | $13.45 | |
BASE | 0.03% | $0.000282 | 47,553.374 | $13.41 | |
BASE | 0.03% | $0.000047 | 279,652.714 | $13.06 | |
BASE | 0.03% | $0.006783 | 1,875.591 | $12.72 | |
BASE | 0.03% | $0.001289 | 9,539.0312 | $12.3 | |
BASE | 0.03% | $0.112386 | 105.6418 | $11.87 | |
BASE | 0.03% | $0.15183 | 75.8404 | $11.51 | |
BASE | 0.02% | $0.002207 | 4,958.9453 | $10.95 | |
BASE | 0.02% | $0.000519 | 20,588.8781 | $10.68 | |
BASE | 0.02% | $0.076986 | 134.883 | $10.38 | |
BASE | 0.02% | $0.088402 | 114.0967 | $10.09 | |
BASE | 0.02% | $0.228662 | 43.9146 | $10.04 | |
BASE | 0.02% | <$0.000001 | 3,271,439,089.4945 | $9.81 | |
BASE | 0.02% | $0.006378 | 1,457.6515 | $9.3 | |
BASE | 0.02% | $0.614566 | 15.1257 | $9.3 | |
BASE | 0.02% | $0.014894 | 593.9087 | $8.85 | |
BASE | 0.02% | $0.000485 | 17,665.21 | $8.56 | |
BASE | 0.02% | $0.000302 | 28,196.2967 | $8.51 | |
BASE | 0.02% | $0.007077 | 1,167.354 | $8.26 | |
BASE | 0.02% | $0.001767 | 4,559.2314 | $8.06 | |
BASE | 0.02% | <$0.000001 | 733,053,526.8293 | $7.7 | |
BASE | 0.02% | $0.000108 | 66,693.5717 | $7.19 | |
BASE | 0.02% | $0.000322 | 21,495.3915 | $6.93 | |
BASE | 0.02% | $0.000658 | 10,317.1646 | $6.79 | |
BASE | 0.01% | $0.001741 | 3,782.0425 | $6.58 | |
BASE | 0.01% | $0.684637 | 9.484 | $6.49 | |
BASE | 0.01% | $0.000859 | 7,152.894 | $6.14 | |
BASE | 0.01% | $0.000012 | 494,012.5732 | $6.04 | |
BASE | 0.01% | $12.53 | 0.4635 | $5.81 | |
BASE | 0.01% | $0.088497 | 65.4523 | $5.79 | |
BASE | 0.01% | $0.005569 | 1,008.479 | $5.62 | |
BASE | 0.01% | $0.003634 | 1,542.1553 | $5.6 | |
BASE | 0.01% | $0.000033 | 160,875.2699 | $5.35 | |
BASE | 0.01% | $0.005262 | 1,008.1564 | $5.31 | |
BASE | 0.01% | $0.00006 | 84,468.8124 | $5.04 | |
BASE | 0.01% | $0.007291 | 683.2262 | $4.98 | |
BASE | 0.01% | $0.000013 | 368,048.9181 | $4.84 | |
BASE | 0.01% | $0.997338 | 4.7897 | $4.78 | |
BASE | 0.01% | <$0.000001 | 4,323,006,764.2335 | $4.76 | |
BASE | 0.01% | $0.084206 | 54.4861 | $4.59 | |
BASE | <0.01% | $0.004563 | 950.0636 | $4.34 | |
BASE | <0.01% | $0.000065 | 64,988.3189 | $4.23 | |
BASE | <0.01% | $0.000035 | 118,983.896 | $4.18 | |
BASE | <0.01% | $1.08 | 3.846 | $4.17 | |
BASE | <0.01% | $0.395578 | 10.4223 | $4.12 | |
BASE | <0.01% | $0.00072 | 5,638.3865 | $4.06 | |
BASE | <0.01% | $0.000036 | 111,244.7442 | $4.04 | |
BASE | <0.01% | $0.001532 | 2,528.6613 | $3.87 | |
BASE | <0.01% | $0.076204 | 50.1055 | $3.82 | |
BASE | <0.01% | $0.000007 | 546,893.316 | $3.63 | |
BASE | <0.01% | $0.54432 | 6.4305 | $3.5 | |
BASE | <0.01% | $0.002697 | 1,277.3688 | $3.45 | |
BASE | <0.01% | <$0.000001 | 1,180,082,999.0007 | $3.42 | |
BASE | <0.01% | $0.000725 | 4,692.3864 | $3.4 | |
BASE | <0.01% | $0.000066 | 51,734.3479 | $3.4 | |
BASE | <0.01% | $0.000961 | 3,469.6489 | $3.34 | |
BASE | <0.01% | $0.009915 | 331.6497 | $3.29 | |
BASE | <0.01% | $0.001062 | 3,075.3199 | $3.27 | |
BASE | <0.01% | $0.311101 | 10.4426 | $3.25 | |
BASE | <0.01% | $0.000402 | 7,715.6189 | $3.1 | |
BASE | <0.01% | $1.61 | 1.9076 | $3.07 | |
BASE | <0.01% | $0.001976 | 1,507.8403 | $2.98 | |
BASE | <0.01% | $0.027904 | 104.6621 | $2.92 | |
BASE | <0.01% | $0.007563 | 380.5413 | $2.88 | |
BASE | <0.01% | $0.000027 | 103,826.8203 | $2.85 | |
BASE | <0.01% | $0.000236 | 11,668.1525 | $2.76 | |
BASE | <0.01% | $0.003273 | 839.4522 | $2.75 | |
BASE | <0.01% | $1.54 | 1.6756 | $2.58 | |
BASE | <0.01% | $0.000637 | 3,613.5259 | $2.3 | |
BASE | <0.01% | $0.00301 | 753.6368 | $2.27 | |
BASE | <0.01% | $0.005467 | 413.4982 | $2.26 | |
BASE | <0.01% | $0.000442 | 5,007.8264 | $2.21 | |
BASE | <0.01% | $0.000057 | 38,232.4893 | $2.19 | |
BASE | <0.01% | $0.000036 | 59,936.374 | $2.18 | |
BASE | <0.01% | $0.000245 | 8,343.5661 | $2.05 | |
BASE | <0.01% | $0.000081 | 23,107 | $1.86 | |
BASE | <0.01% | $0.157155 | 10.823 | $1.7 | |
BASE | <0.01% | $6.35 | 0.25 | $1.59 | |
BASE | <0.01% | $0.000289 | 5,447.264 | $1.57 | |
BASE | <0.01% | $0.003201 | 490.148 | $1.57 | |
BASE | <0.01% | $0.000024 | 64,778.2226 | $1.54 | |
BASE | <0.01% | $0.000099 | 15,178.9392 | $1.5 | |
BASE | <0.01% | $0.000044 | 33,786.2071 | $1.49 | |
BASE | <0.01% | $2.92 | 0.5093 | $1.49 | |
BASE | <0.01% | $0.004881 | 270.348 | $1.32 | |
BASE | <0.01% | $0.015339 | 82.0978 | $1.26 | |
BASE | <0.01% | $0.01443 | 84.5035 | $1.22 | |
BASE | <0.01% | $0.000085 | 14,307.1862 | $1.22 | |
BASE | <0.01% | $0.034803 | 34.4018 | $1.2 | |
BASE | <0.01% | $0.000076 | 15,196.0146 | $1.15 | |
BASE | <0.01% | $0.000709 | 1,560.8577 | $1.11 | |
BASE | <0.01% | $0.000001 | 1,650,636.7758 | $1.08 | |
BASE | <0.01% | $0.000493 | 1,894.0428 | $0.9344 | |
BASE | <0.01% | $0.000149 | 5,917.9209 | $0.8823 | |
BASE | <0.01% | $0.125365 | 6.748 | $0.8459 | |
BASE | <0.01% | $0.510311 | 1.6139 | $0.8236 | |
BASE | <0.01% | <$0.000001 | 2,334,249.601 | $0.7628 | |
BASE | <0.01% | $0.018259 | 40.004 | $0.7304 | |
BASE | <0.01% | $175.98 | 0.00411678 | $0.7244 | |
BASE | <0.01% | $0.000763 | 900 | $0.6868 | |
BASE | <0.01% | $0.014181 | 46.988 | $0.6663 | |
BASE | <0.01% | <$0.000001 | 2,101,091.4396 | $0.657 | |
BASE | <0.01% | $0.006127 | 103.8184 | $0.6361 | |
BASE | <0.01% | $0.000101 | 6,258.1826 | $0.6338 | |
BASE | <0.01% | $0.000027 | 23,236.8423 | $0.6276 | |
BASE | <0.01% | $0.999897 | 0.6245 | $0.6243 | |
BASE | <0.01% | $0.000001 | 435,575.7614 | $0.5527 | |
BASE | <0.01% | $0.016179 | 33.5051 | $0.542 | |
BASE | <0.01% | $0.000129 | 4,171.1228 | $0.536 | |
BASE | <0.01% | $0.005367 | 98.8026 | $0.5302 | |
BASE | <0.01% | $0.01162 | 42.282 | $0.4913 | |
BASE | <0.01% | $0.000224 | 2,145.8357 | $0.4814 | |
BASE | <0.01% | $0.00109 | 433.0407 | $0.4721 | |
BASE | <0.01% | $0.000559 | 843.5299 | $0.4717 | |
BASE | <0.01% | $0.000028 | 16,670.7873 | $0.4697 | |
BASE | <0.01% | $0.000001 | 371,633.1589 | $0.4295 | |
BASE | <0.01% | $0.016088 | 24.731 | $0.3978 | |
BASE | <0.01% | $0.332805 | 1.1864 | $0.3948 | |
BASE | <0.01% | $0.810675 | 0.4134 | $0.3351 | |
BASE | <0.01% | <$0.000001 | 2,928,991.2482 | $0.3107 | |
BASE | <0.01% | $3,952.11 | 0.00007708 | $0.3046 | |
BASE | <0.01% | $0.00042 | 681.9108 | $0.2861 | |
BASE | <0.01% | $0.085494 | 3.2968 | $0.2818 | |
BASE | <0.01% | $0.000038 | 7,236.505 | $0.2765 | |
BASE | <0.01% | $2.58 | 0.1067 | $0.2751 | |
BASE | <0.01% | $0.000194 | 1,234.0888 | $0.239 | |
BASE | <0.01% | $0.000455 | 503.7026 | $0.229 | |
BASE | <0.01% | $4.51 | 0.039 | $0.1758 | |
BASE | <0.01% | $0.000656 | 251.0851 | $0.1647 | |
BASE | <0.01% | $0.015759 | 10.4041 | $0.1639 | |
BASE | <0.01% | $0.000267 | 557.1464 | $0.1488 | |
BASE | <0.01% | $4,188.46 | 0.00003524 | $0.1476 | |
BASE | <0.01% | $0.000795 | 172.7913 | $0.1372 | |
BASE | <0.01% | $0.000939 | 142.56 | $0.1338 | |
BASE | <0.01% | $2.21 | 0.0599 | $0.1324 | |
BASE | <0.01% | $0.000005 | 23,308.8186 | $0.1114 | |
BASE | <0.01% | $0.000026 | 4,196.3147 | $0.1106 | |
BASE | <0.01% | $0.340679 | 0.3195 | $0.1088 | |
BLAST | 9.60% | $0.00991 | 428,251.2397 | $4,244.09 | |
BLAST | 8.04% | $3,840.56 | 0.9251 | $3,553.03 | |
BLAST | 1.81% | $1 | 798.2643 | $800.66 | |
BLAST | 0.03% | $0.000966 | 12,008.4736 | $11.6 | |
BLAST | 0.01% | $0.010528 | 614.34 | $6.47 | |
BLAST | 0.01% | $0.004005 | 1,419.4119 | $5.69 | |
BLAST | 0.01% | $0.000031 | 144,204.513 | $4.5 | |
BLAST | <0.01% | <$0.000001 | 955,268,636.2358 | $4.2 | |
BLAST | <0.01% | $0.010734 | 244.538 | $2.62 | |
BLAST | <0.01% | <$0.000001 | 10,893,779,514.4255 | $2.18 | |
BLAST | <0.01% | $0.000098 | 21,231.4592 | $2.09 | |
BLAST | <0.01% | $0.001161 | 1,490.4663 | $1.73 | |
BLAST | <0.01% | $0.02487 | 67.7377 | $1.68 | |
BLAST | <0.01% | $0.005015 | 135.7399 | $0.6807 | |
BLAST | <0.01% | $3,840.22 | 0.00012507 | $0.4802 | |
BLAST | <0.01% | <$0.000001 | 5,962,555.8153 | $0.4257 | |
BLAST | <0.01% | $0.001581 | 117.1757 | $0.1853 | |
POL | 4.73% | $0.997461 | 2,096.8139 | $2,091.49 | |
POL | Polygon (POL) | 2.55% | $0.546074 | 2,063.4145 | $1,126.78 |
POL | 1.92% | $0.000005 | 169,234,556.4205 | $847.1 | |
POL | 1.91% | $12.93 | 65.3897 | $845.49 | |
POL | 0.32% | $0.030653 | 4,673.8364 | $143.27 | |
POL | 0.21% | $0.827385 | 110.4883 | $91.42 | |
POL | 0.19% | $3,847.36 | 0.0221 | $85 | |
POL | 0.16% | $2.05 | 34.9427 | $71.79 | |
POL | 0.11% | $0.997651 | 50.745 | $50.63 | |
POL | 0.10% | $0.215807 | 212.4099 | $45.84 | |
POL | 0.09% | $0.209997 | 189.9961 | $39.9 | |
POL | 0.08% | $0.004857 | 7,564.0991 | $36.74 | |
POL | 0.04% | $0.097724 | 184.2625 | $18.01 | |
POL | 0.03% | <$0.000001 | 850,375,982.8701 | $14.54 | |
POL | 0.03% | $0.55002 | 24.5754 | $13.52 | |
POL | 0.03% | <$0.000001 | 944,405,033.2921 | $13.5 | |
POL | 0.03% | $27.19 | 0.4771 | $12.97 | |
POL | 0.02% | $0.004571 | 2,381.8557 | $10.89 | |
POL | 0.02% | $0.001015 | 10,073.9144 | $10.23 | |
POL | 0.02% | $0.000004 | 2,280,716.8806 | $9.37 | |
POL | 0.02% | $0.010982 | 853.4512 | $9.37 | |
POL | 0.02% | $0.000026 | 353,279.4224 | $9.02 | |
POL | 0.02% | $0.013243 | 662.9543 | $8.78 | |
POL | 0.02% | $0.016472 | 513.0912 | $8.45 | |
POL | 0.02% | $103,497 | 0.00008032 | $8.31 | |
POL | 0.02% | $1.04 | 7.5948 | $7.9 | |
POL | 0.02% | $6.76 | 1.1679 | $7.9 | |
POL | 0.02% | $374.31 | 0.0207 | $7.76 | |
POL | 0.02% | $0.004826 | 1,529.4772 | $7.38 | |
POL | 0.02% | $0.102088 | 71.4734 | $7.3 | |
POL | 0.01% | $0.000267 | 23,671.3983 | $6.32 | |
POL | 0.01% | $0.004684 | 1,151.219 | $5.39 | |
POL | 0.01% | $0.000863 | 6,090.3626 | $5.25 | |
POL | 0.01% | $1.87 | 2.7894 | $5.22 | |
POL | 0.01% | <$0.000001 | 557,849,877.5545 | $5.13 | |
POL | 0.01% | $0.047685 | 100.1085 | $4.77 | |
POL | 0.01% | $0.998502 | 4.6364 | $4.63 | |
POL | 0.01% | $0.000034 | 135,105.9711 | $4.57 | |
POL | 0.01% | $0.003165 | 1,400.3208 | $4.43 | |
POL | <0.01% | $0.586518 | 7.5138 | $4.41 | |
POL | <0.01% | $0.251563 | 17.4166 | $4.38 | |
POL | <0.01% | $0.012876 | 330.3825 | $4.25 | |
POL | <0.01% | $1,730.16 | 0.00245521 | $4.25 | |
POL | <0.01% | $0.997651 | 4.1269 | $4.12 | |
POL | <0.01% | $0.004956 | 783.4232 | $3.88 | |
POL | <0.01% | <$0.000001 | 18,557,125.8484 | $3.87 | |
POL | <0.01% | $0.660917 | 5.7434 | $3.8 | |
POL | <0.01% | $0.004286 | 873.1404 | $3.74 | |
POL | <0.01% | $1.22 | 3.0276 | $3.69 | |
POL | <0.01% | $6.36 | 0.566 | $3.6 | |
POL | <0.01% | $0.622262 | 5.746 | $3.58 | |
POL | <0.01% | $0.000965 | 3,656.5432 | $3.53 | |
POL | <0.01% | $2,642.91 | 0.00133231 | $3.52 | |
POL | <0.01% | $0.005301 | 623.3706 | $3.3 | |
POL | <0.01% | $0.000718 | 4,488.3148 | $3.22 | |
POL | <0.01% | $0.011364 | 282.2073 | $3.21 | |
POL | <0.01% | $0.956203 | 3.3523 | $3.21 | |
POL | <0.01% | $0.011887 | 242.9299 | $2.89 | |
POL | <0.01% | $0.050181 | 57.5357 | $2.89 | |
POL | <0.01% | $0.001259 | 2,246.1796 | $2.83 | |
POL | <0.01% | $0.000178 | 15,403.9373 | $2.74 | |
POL | <0.01% | $0.327032 | 8.0957 | $2.65 | |
POL | <0.01% | $0.007707 | 333.0016 | $2.57 | |
POL | <0.01% | $0.001404 | 1,824.8485 | $2.56 | |
POL | <0.01% | $0.206352 | 11.7139 | $2.42 | |
POL | <0.01% | $0.531828 | 4.5326 | $2.41 | |
POL | <0.01% | $0.168612 | 14.2592 | $2.4 | |
POL | <0.01% | $0.001759 | 1,364.423 | $2.4 | |
POL | <0.01% | $0.008671 | 276.7176 | $2.4 | |
POL | <0.01% | $0.163998 | 14.4578 | $2.37 | |
POL | <0.01% | $0.684856 | 3.2697 | $2.24 | |
POL | <0.01% | $0.010443 | 211.8626 | $2.21 | |
POL | <0.01% | $0.002016 | 1,024.9575 | $2.07 | |
POL | <0.01% | $0.210084 | 9.8022 | $2.06 | |
POL | <0.01% | $0.934618 | 2.1684 | $2.03 | |
POL | <0.01% | $1.07 | 1.8381 | $1.96 | |
POL | <0.01% | $0.005111 | 380.8009 | $1.95 | |
POL | <0.01% | $0.009382 | 196.7091 | $1.85 | |
POL | <0.01% | $0.055665 | 32.7989 | $1.83 | |
POL | <0.01% | <$0.000001 | 3,590,701.637 | $1.77 | |
POL | <0.01% | $98.05 | 0.0181 | $1.77 | |
POL | <0.01% | $0.249029 | 7.042 | $1.75 | |
POL | <0.01% | $0.336814 | 4.9017 | $1.65 | |
POL | <0.01% | $2.01 | 0.8071 | $1.62 | |
POL | <0.01% | $216.11 | 0.0073561 | $1.59 | |
POL | <0.01% | $3.51 | 0.4443 | $1.56 | |
POL | <0.01% | $0.000982 | 1,550.2591 | $1.52 | |
POL | <0.01% | $9,874.33 | 0.00014616 | $1.44 | |
POL | <0.01% | $0.001946 | 722.8484 | $1.41 | |
POL | <0.01% | $0.000604 | 2,261.5304 | $1.37 | |
POL | <0.01% | $22.6 | 0.06 | $1.36 | |
POL | <0.01% | $0.012475 | 108.146 | $1.35 | |
POL | <0.01% | $103,294.51 | 0.00001297 | $1.34 | |
POL | <0.01% | $0.004151 | 304.5432 | $1.26 | |
POL | <0.01% | $103,671.97 | 0.00001174 | $1.22 | |
POL | <0.01% | <$0.000001 | 2,294,424,803.3778 | $1.15 | |
POL | <0.01% | $275.85 | 0.00413211 | $1.14 | |
POL | <0.01% | $0.000285 | 3,944.023 | $1.13 | |
POL | <0.01% | $0.011645 | 95.1422 | $1.11 | |
POL | <0.01% | $1.19 | 0.9241 | $1.1 | |
POL | <0.01% | $1.15 | 0.956 | $1.1 | |
POL | <0.01% | $0.001232 | 849.135 | $1.05 | |
POL | <0.01% | $64.88 | 0.0158 | $1.03 | |
POL | <0.01% | $0.011033 | 92.6283 | $1.02 | |
POL | <0.01% | $0.023956 | 41.8825 | $1 | |
POL | <0.01% | <$0.000001 | 75,364,553.4469 | $0.9646 | |
POL | <0.01% | $366.51 | 0.00257333 | $0.9431 | |
POL | <0.01% | $0.149179 | 6.2631 | $0.9343 | |
POL | <0.01% | $15.56 | 0.0594 | $0.9239 | |
POL | <0.01% | $0.014872 | 56.9009 | $0.8462 | |
POL | <0.01% | $0.047508 | 17.061 | $0.8105 | |
POL | <0.01% | $0.19194 | 3.9011 | $0.7487 | |
POL | <0.01% | $0.054544 | 13.4818 | $0.7353 | |
POL | <0.01% | $0.681429 | 1.0616 | $0.7234 | |
POL | <0.01% | $0.021352 | 33.8403 | $0.7225 | |
POL | <0.01% | $0.023693 | 30.2584 | $0.7169 | |
POL | <0.01% | $0.000223 | 3,060 | $0.6828 | |
POL | <0.01% | $0.298408 | 2.2709 | $0.6776 | |
POL | <0.01% | $0.000185 | 3,275.6346 | $0.6049 | |
POL | <0.01% | $77.32 | 0.00757738 | $0.5858 | |
POL | <0.01% | $0.007318 | 77.7197 | $0.5687 | |
POL | <0.01% | $0.000042 | 12,818.0602 | $0.5434 | |
POL | <0.01% | $0.006866 | 74.4426 | $0.5111 | |
POL | <0.01% | $0.050219 | 10.0731 | $0.5058 | |
POL | <0.01% | $0.001522 | 323.0774 | $0.4915 | |
POL | <0.01% | $2.54 | 0.1912 | $0.4856 | |
POL | <0.01% | $0.002649 | 176.8765 | $0.4685 | |
POL | <0.01% | $0.006515 | 70.5009 | $0.4593 | |
POL | <0.01% | $46.19 | 0.00993778 | $0.459 | |
POL | <0.01% | $3.31 | 0.1383 | $0.4577 | |
POL | <0.01% | $0.000002 | 187,440.9439 | $0.4281 | |
POL | <0.01% | $0.992131 | 0.4287 | $0.4253 | |
POL | <0.01% | $0.202979 | 2.0444 | $0.4149 | |
POL | <0.01% | $0.001283 | 314.5951 | $0.4035 | |
POL | <0.01% | $0.014368 | 27.606 | $0.3966 | |
POL | <0.01% | $0.182 | 2.1009 | $0.3823 | |
POL | <0.01% | $2.04 | 0.1864 | $0.3803 | |
POL | <0.01% | $0.011608 | 31.671 | $0.3676 | |
POL | <0.01% | $0.332761 | 1.0014 | $0.3332 | |
POL | <0.01% | $0.359126 | 0.8941 | $0.321 | |
POL | <0.01% | $0.025603 | 12.305 | $0.315 | |
POL | <0.01% | $0.050222 | 6.0672 | $0.3047 | |
POL | <0.01% | $0.004267 | 70.4865 | $0.3007 | |
POL | <0.01% | $4.48 | 0.0651 | $0.2915 | |
POL | <0.01% | $0.424864 | 0.6767 | $0.2874 | |
POL | <0.01% | $4.07 | 0.0704 | $0.2863 | |
POL | <0.01% | $0.000516 | 551.2581 | $0.2845 | |
POL | <0.01% | $0.453086 | 0.6004 | $0.272 | |
POL | <0.01% | $0.558954 | 0.4863 | $0.2718 | |
POL | <0.01% | $0.006757 | 39.8386 | $0.2691 | |
POL | <0.01% | $0.880004 | 0.2873 | $0.2527 | |
POL | <0.01% | $0.003309 | 74.8589 | $0.2477 | |
POL | <0.01% | $0.000037 | 6,562.4755 | $0.2455 | |
POL | <0.01% | $0.000728 | 319.6318 | $0.2326 | |
POL | <0.01% | $0.0053 | 43.1355 | $0.2286 | |
POL | <0.01% | $0.074498 | 3.06 | $0.2279 | |
POL | <0.01% | $0.043974 | 4.7761 | $0.21 | |
POL | <0.01% | $0.011861 | 16.6918 | $0.1979 | |
POL | <0.01% | $0.003165 | 61.8109 | $0.1956 | |
POL | <0.01% | $0.232791 | 0.8354 | $0.1944 | |
POL | <0.01% | $0.006319 | 30.027 | $0.1897 | |
POL | <0.01% | $0.048481 | 3.8638 | $0.1873 | |
POL | <0.01% | $0.000378 | 492.3 | $0.1858 | |
POL | <0.01% | $0.002174 | 85.4094 | $0.1856 | |
POL | <0.01% | $0.002235 | 81 | $0.181 | |
POL | <0.01% | $0.004441 | 37.8156 | $0.1679 | |
POL | <0.01% | $0.00003 | 5,460 | $0.1639 | |
POL | <0.01% | $0.037072 | 4.2182 | $0.1563 | |
POL | <0.01% | $0.000437 | 352.7281 | $0.1541 | |
POL | <0.01% | $0.00001 | 15,574.2636 | $0.154 | |
POL | <0.01% | $0.000299 | 510.2289 | $0.1527 | |
POL | <0.01% | $17.18 | 0.00879491 | $0.151 | |
POL | <0.01% | $0.000864 | 168.6045 | $0.1457 | |
POL | <0.01% | $0.003101 | 46.8625 | $0.1453 | |
POL | <0.01% | $0.209854 | 0.6549 | $0.1374 | |
POL | <0.01% | $1.41 | 0.0944 | $0.1331 | |
POL | <0.01% | $0.999559 | 0.1244 | $0.1243 | |
POL | <0.01% | $0.352614 | 0.3445 | $0.1214 | |
POL | <0.01% | $0.001588 | 69.4373 | $0.1102 | |
POL | <0.01% | $0.000001 | 106,869.2317 | $0.1077 | |
POL | <0.01% | $0.757461 | 0.1407 | $0.1065 | |
POL | <0.01% | $0.005007 | 20.7698 | $0.104 | |
POL | <0.01% | $0.097026 | 1.0684 | $0.1036 | |
POL | <0.01% | $0.006086 | 16.8628 | $0.1026 | |
FTM | 8.07% | $103,883 | 0.0343 | $3,564.15 | |
FTM | 1.82% | $1.21 | 664.3631 | $805.42 | |
FTM | 0.31% | $3,857.84 | 0.0357 | $137.8 | |
FTM | 0.29% | <$0.000001 | 539,938,224.339 | $126.78 | |
FTM | 0.15% | $0.446584 | 152.4104 | $68.06 | |
FTM | 0.07% | $9,910.19 | 0.00313831 | $31.1 | |
FTM | 0.05% | $1.41 | 14.844 | $20.93 | |
FTM | 0.02% | $0.55041 | 13.4735 | $7.42 | |
FTM | 0.02% | $0.003455 | 2,091.1685 | $7.23 | |
FTM | 0.01% | $366.5 | 0.0136 | $5 | |
FTM | <0.01% | $27.3 | 0.1271 | $3.47 | |
FTM | <0.01% | $0.052543 | 54.9038 | $2.88 | |
FTM | <0.01% | $375.76 | 0.00569666 | $2.14 | |
FTM | <0.01% | $1.48 | 1.2318 | $1.82 | |
FTM | <0.01% | $0.993762 | 1.7226 | $1.71 | |
FTM | <0.01% | $6.99 | 0.1129 | $0.7889 | |
FTM | <0.01% | $0.00087 | 765.7002 | $0.6658 | |
FTM | <0.01% | <$0.000001 | 2,194,824.3926 | $0.5348 | |
FTM | <0.01% | $0.169883 | 2.6532 | $0.4507 | |
FTM | <0.01% | $0.072075 | 4.424 | $0.3188 | |
FTM | <0.01% | $0.001433 | 96.1584 | $0.1377 | |
ARB | 3.91% | $0.999474 | 1,727.8875 | $1,726.98 | |
ARB | 1.32% | $3,843.18 | 0.1519 | $583.78 | |
ARB | 0.55% | $0.928758 | 263.1651 | $244.42 | |
ARB | 0.50% | $0.99872 | 220.1118 | $219.83 | |
ARB | 0.19% | $103,278 | 0.00081149 | $83.81 | |
ARB | 0.05% | $3,840.22 | 0.00582932 | $22.39 | |
ARB | 0.05% | $0.07525 | 286.3315 | $21.55 | |
ARB | 0.05% | $0.067079 | 300 | $20.12 | |
ARB | 0.03% | $0.519938 | 27.1237 | $14.1 | |
ARB | 0.02% | $0.000085 | 116,821.6663 | $9.89 | |
ARB | 0.02% | $0.059122 | 164.2409 | $9.71 | |
ARB | 0.02% | <$0.000001 | 32,211,635,885.9793 | $9.66 | |
ARB | 0.02% | $0.99872 | 8.6578 | $8.65 | |
ARB | 0.02% | $2.58 | 3.1623 | $8.16 | |
ARB | 0.02% | $3.3 | 2.3314 | $7.69 | |
ARB | 0.02% | $6.35 | 1.0629 | $6.75 | |
ARB | 0.02% | $0.020504 | 323.6846 | $6.64 | |
ARB | 0.01% | $0.000413 | 15,958.2902 | $6.59 | |
ARB | 0.01% | $0.07118 | 79.5027 | $5.66 | |
ARB | 0.01% | $1.04 | 5.4 | $5.59 | |
ARB | 0.01% | $0.37971 | 13.3946 | $5.09 | |
ARB | 0.01% | $0.009024 | 513.0315 | $4.63 | |
ARB | <0.01% | $3,950.72 | 0.00109814 | $4.34 | |
ARB | <0.01% | $0.034631 | 122.9074 | $4.26 | |
ARB | <0.01% | $0.014948 | 277.85 | $4.15 | |
ARB | <0.01% | $1.87 | 2.2063 | $4.13 | |
ARB | <0.01% | <$0.000001 | 24,974,187.5628 | $4.08 | |
ARB | <0.01% | $0.076784 | 50.9201 | $3.91 | |
ARB | <0.01% | $0.079757 | 36.5126 | $2.91 | |
ARB | <0.01% | $0.00002 | 139,889.5729 | $2.83 | |
ARB | <0.01% | $103,130 | 0.00002665 | $2.75 | |
ARB | <0.01% | $2.03 | 1.1984 | $2.43 | |
ARB | <0.01% | $0.000003 | 851,848.4097 | $2.16 | |
ARB | <0.01% | $2.43 | 0.8554 | $2.08 | |
ARB | <0.01% | $0.134338 | 15.4706 | $2.08 | |
ARB | <0.01% | $0.000153 | 12,287.0819 | $1.89 | |
ARB | <0.01% | $0.057726 | 31.7833 | $1.83 | |
ARB | <0.01% | $15.5 | 0.1145 | $1.77 | |
ARB | <0.01% | $103,542 | 0.00001612 | $1.67 | |
ARB | <0.01% | <$0.000001 | 7,383,535,208.2711 | $1.48 | |
ARB | <0.01% | $2.83 | 0.5217 | $1.48 | |
ARB | <0.01% | $0.068649 | 21.4419 | $1.47 | |
ARB | <0.01% | $0.001283 | 1,127.7062 | $1.45 | |
ARB | <0.01% | $0.000021 | 67,309.0989 | $1.43 | |
ARB | <0.01% | $27.07 | 0.0527 | $1.43 | |
ARB | <0.01% | $0.000031 | 45,190.2053 | $1.38 | |
ARB | <0.01% | $0.053916 | 25.1883 | $1.36 | |
ARB | <0.01% | $0.287801 | 4.6775 | $1.35 | |
ARB | <0.01% | $0.02855 | 44.2536 | $1.26 | |
ARB | <0.01% | $3,826.66 | 0.00031063 | $1.19 | |
ARB | <0.01% | $3.53 | 0.3104 | $1.1 | |
ARB | <0.01% | $6.17 | 0.1598 | $0.9859 | |
ARB | <0.01% | $0.154138 | 6.3051 | $0.9718 | |
ARB | <0.01% | $14.66 | 0.0595 | $0.8725 | |
ARB | <0.01% | $0.04847 | 14.9291 | $0.7236 | |
ARB | <0.01% | $0.008917 | 77.596 | $0.6919 | |
ARB | <0.01% | $0.170849 | 4.048 | $0.6915 | |
ARB | <0.01% | <$0.000001 | 195,174,014.308 | $0.6635 | |
ARB | <0.01% | $0.998139 | 0.6588 | $0.6575 | |
ARB | <0.01% | <$0.000001 | 644,231,831.2765 | $0.6442 | |
ARB | <0.01% | $60.37 | 0.0104 | $0.629 | |
ARB | <0.01% | $3 | 0.204 | $0.612 | |
ARB | <0.01% | $1 | 0.6103 | $0.6108 | |
ARB | <0.01% | $0.324848 | 1.8763 | $0.6095 | |
ARB | <0.01% | $0.069473 | 7.4108 | $0.5148 | |
ARB | <0.01% | $0.000009 | 49,058.5048 | $0.4268 | |
ARB | <0.01% | $42.34 | 0.00984186 | $0.4167 | |
ARB | <0.01% | $3.06 | 0.1345 | $0.4115 | |
ARB | <0.01% | $0.633091 | 0.6281 | $0.3976 | |
ARB | <0.01% | $0.311105 | 1.1568 | $0.3598 | |
ARB | <0.01% | $0.248449 | 1.4406 | $0.3579 | |
ARB | <0.01% | $0.472099 | 0.6218 | $0.2935 | |
ARB | <0.01% | $0.026954 | 9.9175 | $0.2673 | |
ARB | <0.01% | $0.833 | 0.315 | $0.2623 | |
ARB | <0.01% | $1,502.83 | 0.00016819 | $0.2527 | |
ARB | <0.01% | $0.011617 | 16.7821 | $0.1949 | |
ARB | <0.01% | $0.000417 | 466.8607 | $0.1947 | |
ARB | <0.01% | $0.000863 | 215.9687 | $0.1864 | |
ARB | <0.01% | $0.003905 | 46.8487 | $0.1829 | |
ARB | <0.01% | $0.064011 | 2.3908 | $0.153 | |
ARB | <0.01% | $1.44 | 0.0969 | $0.1395 | |
ARB | <0.01% | $0.028108 | 4.809 | $0.1351 | |
ARB | <0.01% | $0.046858 | 2.7453 | $0.1286 | |
AVAX | 1.40% | $46.06 | 13.4734 | $620.63 | |
AVAX | 0.76% | $0.999823 | 335.6242 | $335.56 | |
AVAX | 0.29% | $0.999966 | 129.3177 | $129.31 | |
AVAX | 0.29% | $0.999823 | 126.3696 | $126.35 | |
AVAX | 0.07% | $0.727697 | 40.2116 | $29.26 | |
AVAX | 0.06% | $0.003353 | 7,716.3533 | $25.87 | |
AVAX | 0.05% | <$0.000001 | 634,728,656.7938 | $20.95 | |
AVAX | 0.05% | $0.149787 | 132.9506 | $19.91 | |
AVAX | 0.02% | $0.000002 | 3,603,762.7153 | $7.21 | |
AVAX | 0.01% | $0.364774 | 15.1855 | $5.54 | |
AVAX | 0.01% | $0.013258 | 382.4024 | $5.07 | |
AVAX | 0.01% | $0.000167 | 28,530.7794 | $4.75 | |
AVAX | <0.01% | $27.1 | 0.1423 | $3.86 | |
AVAX | <0.01% | $0.472537 | 6.0426 | $2.86 | |
AVAX | <0.01% | $376.51 | 0.00672696 | $2.53 | |
AVAX | <0.01% | $53.88 | 0.0406 | $2.19 | |
AVAX | <0.01% | <$0.000001 | 86,037,938.6272 | $1.86 | |
AVAX | <0.01% | $0.009434 | 174.6522 | $1.65 | |
AVAX | <0.01% | $0.00596 | 133.5119 | $0.7957 | |
AVAX | <0.01% | $0.000737 | 994.4961 | $0.7326 | |
AVAX | <0.01% | $0.024218 | 30 | $0.7265 | |
AVAX | <0.01% | $32.82 | 0.0197 | $0.6453 | |
AVAX | <0.01% | $0.019633 | 16.0118 | $0.3143 | |
AVAX | <0.01% | $0.000534 | 319.6418 | $0.1707 | |
SCROLL | 1.21% | $3,840.99 | 0.1391 | $534.16 | |
SCROLL | 0.36% | $0.998419 | 157.3646 | $157.12 | |
SCROLL | 0.09% | $0.999711 | 40.3793 | $40.37 | |
SCROLL | 0.02% | $4,580.89 | 0.00176922 | $8.1 | |
SCROLL | 0.02% | $1.03 | 6.9084 | $7.14 | |
SCROLL | <0.01% | $103,933.45 | 0.00002657 | $2.76 | |
SCROLL | <0.01% | $0.000001 | 360,650.8428 | $0.3109 | |
SCROLL | <0.01% | $4,051.1 | 0.00004527 | $0.1833 | |
SCROLL | <0.01% | $0.996617 | 0.1825 | $0.1819 | |
SCROLL | <0.01% | $0.103022 | 1.035 | $0.1066 | |
LINEA | 1.26% | $3,840.99 | 0.1444 | $554.63 | |
LINEA | 0.06% | $0.999083 | 26.6584 | $26.63 | |
LINEA | 0.05% | $0.998419 | 21.8747 | $21.84 | |
LINEA | 0.02% | $0.992853 | 8.5129 | $8.45 | |
LINEA | 0.02% | $3,952.11 | 0.0018069 | $7.14 | |
LINEA | 0.01% | $0.091576 | 70.6108 | $6.47 | |
LINEA | <0.01% | $3,865.28 | 0.00091158 | $3.52 | |
LINEA | <0.01% | $0.001749 | 1,815.99 | $3.18 | |
LINEA | <0.01% | $0.00032 | 4,604.5255 | $1.47 | |
LINEA | <0.01% | $0.104831 | 13.8594 | $1.45 | |
LINEA | <0.01% | $0.012708 | 47.3847 | $0.6021 | |
LINEA | <0.01% | $0.013349 | 44.0091 | $0.5874 | |
LINEA | <0.01% | $4,558.96 | 0.00007351 | $0.3351 | |
OPBNB | 0.34% | $710.78 | 0.2098 | $149.12 | |
OPBNB | 0.18% | $1 | 78.537 | $78.54 | |
WORLD | 0.26% | $3,841.42 | 0.0301 | $115.62 | |
WORLD | 0.07% | $2.64 | 11.482 | $30.31 | |
WORLD | 0.01% | $0.99872 | 5.7929 | $5.79 | |
BSC | 0.11% | $0.999083 | 49.9 | $49.85 | |
BSC | 0.03% | $710.94 | 0.0205 | $14.56 | |
MANTLE | 0.01% | $1.17 | 5.4658 | $6.42 | |
MANTLE | 0.01% | $0.993902 | 6.1667 | $6.13 | |
MANTLE | <0.01% | $3,835.53 | 0.00089829 | $3.45 | |
MANTLE | <0.01% | $0.995392 | 2.7822 | $2.77 | |
MANTLE | <0.01% | $4,033.73 | 0.0004112 | $1.66 | |
MANTLE | <0.01% | $0.121695 | 1 | $0.1216 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.