Overview
ETH Balance
ETH Value
$0.17 (@ $3,971.01/ETH)More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Tup | 95154 | 425 days ago | IN | 0 ETH | 0.00106056 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11326159 | 23 days ago | 0.00004189 ETH | ||||
11326159 | 23 days ago | 0.00009024 ETH | ||||
11326159 | 23 days ago | 0.00009024 ETH | ||||
11326147 | 23 days ago | 0.0003646 ETH | ||||
11326147 | 23 days ago | 0.0003646 ETH | ||||
11326147 | 23 days ago | 0.00001914 ETH | ||||
11326147 | 23 days ago | 0.001 ETH | ||||
11326147 | 23 days ago | 0.001 ETH | ||||
11326147 | 23 days ago | 0.00000485 ETH | ||||
11326147 | 23 days ago | 0.00036372 ETH | ||||
11326147 | 23 days ago | 0.00036372 ETH | ||||
11326147 | 23 days ago | 0.00001914 ETH | ||||
11326147 | 23 days ago | 0.001 ETH | ||||
11326147 | 23 days ago | 0.001 ETH | ||||
11326147 | 23 days ago | 0.00000485 ETH | ||||
11326147 | 23 days ago | 0.00000485 ETH | ||||
8760871 | 111 days ago | 1 wei | ||||
8760871 | 111 days ago | 0.000025 ETH | ||||
8760871 | 111 days ago | 0.000025 ETH | ||||
8752275 | 111 days ago | 1 wei | ||||
8752275 | 111 days ago | 0.000049 ETH | ||||
8752275 | 111 days ago | 0.000049 ETH | ||||
8745279 | 111 days ago | 1 wei | ||||
8745279 | 111 days ago | 0.000025 ETH | ||||
8745279 | 111 days ago | 0.000025 ETH |
Loading...
Loading
Contract Name:
Helper
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at scrollscan.com on 2023-10-18 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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 is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface ITimeIsUp { function FLASH_MINT_FEE() external view returns (uint256); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount) external returns (bool); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); function accountShareBalance(address account) external view returns (uint256); function burn(uint256 amount) external; function mint(uint256 timeAmount) external payable; function queryAmountExternalLP(uint256 amountNative) external view returns (uint256); function queryAmountInternalLP(uint256 amountNative) external view returns (uint256); function queryAmountOptimal(uint256 amountNative) external view returns (uint256); function queryNativeAmount(uint256 d2Amount) external view returns (uint256); function queryNativeFromTimeAmount(uint256 timeAmount) external view returns (uint256); function queryPriceNative(uint256 amountNative) external view returns (uint256); function queryPriceInverse(uint256 d2Amount) external view returns (uint256); function queryRate() external view returns (uint256); function queryPublicReward() external view returns (uint256); function returnNative() external payable returns (bool); function splitSharesWithReward() external; function buy() external payable returns (bool success); function sell(uint256 d2Amount) external returns (bool success); function flashMint(uint256 d2AmountToBorrow, bytes calldata data) external; function payFlashMintFee() external payable; function poolBalance() external view returns (uint256); function toBeShared() external view returns (uint256); function receiveProfit() external payable; } interface IHelperBase { function addLiquidityNative(uint256 tupAmount) external payable returns (bool); function checkAndPerformArbitrage() external returns (bool); function pairTupEth() external view returns (address); function queryRate() external view returns (uint256); function queryPoolAddress() external view returns (address); function setTup(address tupAddress) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function defaultFactory() external pure returns (address); function factory() external pure returns (address); function factoryV2() external pure returns (address); function WETH() external pure returns (address); function weth() external pure returns (address); function WCELO() external pure returns (address); function WETH9() external pure returns (address); function WAVAX() external pure returns (address); function WHT() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IWETH { function approve(address to, uint256 amount) external returns (bool); function deposit() external payable; function mint(address to, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract Helper is Ownable, IHelperBase { using Math for uint256; bool internal immutable hasAlternativeSwap; bool internal isInternal; bool internal isRunningArbitrage; bool internal swapSuccessful; enum Operation { ETH_TO_TUP_INTERNAL_TUP_TO_ETH_EXTERNAL, ETH_TO_TUP_EXTERNAL_TUP_TO_ETH_INTERNAL } Operation internal operation; IUniswapV2Router02 internal router; IUniswapV2Factory internal factory; ITimeIsUp internal tup; address internal _pairTupEth; uint256 internal constant FACTOR = 10 ** 18; uint256 internal constant ARBITRAGE_RATE = 500; uint256 internal constant SWAP_FEE = 100; uint256[22] internal rangesWETH = [ 50_000_000 ether, 10_000_000 ether, 5_000_000 ether, 1_000_000 ether, 500_000 ether, 100_000 ether, 50_000 ether, 10_000 ether, 5_000 ether, 1_000 ether, 500 ether, 100 ether, 50 ether, 10 ether, 5 ether, 1 ether, 0.5 ether, 0.1 ether, 0.05 ether, 0.01 ether, 0.005 ether, 0.001 ether ]; modifier fromTup() { require(msg.sender == address(tup), "Helper: only TUP token contract can call this function"); _; } modifier internalOnly() { require(isInternal, "Helper: sorry buddy but you do not have access to this function"); _; } modifier adjustInternalCondition() { isInternal = true; _; isInternal = false; } modifier runningArbitrage() { if (!isRunningArbitrage) { isRunningArbitrage = true; _; isRunningArbitrage = false; } } constructor( address _addressProvider, address _exchangeRouterAddress, address _tupTokenAddress, bool _hasAlternativeSwap, address _owner ) { router = IUniswapV2Router02(_exchangeRouterAddress); factory = IUniswapV2Factory(router.factory()); tup = ITimeIsUp(payable(_tupTokenAddress)); hasAlternativeSwap = _hasAlternativeSwap; if (_owner != msg.sender) transferOwnership(_owner); } function _calculateFee(uint256 amount) internal virtual returns (uint256) { return amount + amount.mulDiv(SWAP_FEE, 10_000); } function _startTraditionalSwap(address asset, uint256 amount) internal virtual returns (bool) { return false; } function _startAlternativeSwap(uint256 amountIn, uint256 amountOut) internal returns (bool) { address weth = router.WETH(); swapSuccessful = false; IUniswapV2Pair pair = IUniswapV2Pair(_pairTupEth); if (operation == Operation.ETH_TO_TUP_EXTERNAL_TUP_TO_ETH_INTERNAL) { uint256 amount0Out = address(tup) == pair.token0() ? amountOut : 0; uint256 amount1Out = address(tup) == pair.token1() ? amountOut : 0; try pair.swap(amount0Out, amount1Out, address(this), bytes(abi.encode(address(tup), amountOut))) { return swapSuccessful; } catch { return swapSuccessful; } } else { // ETH_TO_TUP_INTERNAL_TUP_TO_ETH_EXTERNAL uint256 amount0Out = weth == pair.token0() ? amountIn : 0; uint256 amount1Out = weth == pair.token1() ? amountIn : 0; try pair.swap(amount0Out, amount1Out, address(this), bytes(abi.encode(weth, amountIn))) { return swapSuccessful; } catch { return swapSuccessful; } } } receive() external payable { } fallback() external payable { require(msg.data.length == 0); } function _commonCall(address sender, bytes calldata data) internal { if (msg.sender == _pairTupEth) { if (sender == address(this)) { // Operation.ETH_TO_TUP_EXTERNAL_TUP_TO_ETH_INTERNAL (address tokenToBorrow, uint256 amountToBorrow) = abi.decode(data, (address, uint256)); if (tokenToBorrow == address(tup)) { // 1. TUP -> ETH (Internal) try tup.sell(amountToBorrow) { address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(tup); uint256[] memory amountRequired = router.getAmountsIn(amountToBorrow, path); IWETH(path[0]).deposit{ value: amountRequired[0] }(); // 2. ETH -> TUP (External) IERC20(path[0]).transfer(msg.sender, amountRequired[0]); tup.receiveProfit{ value: address(this).balance }(); swapSuccessful = true; } catch { swapSuccessful = false; return; } } else { // 1. ETH -> TUP (Internal) address weth = router.WETH(); IWETH(weth).withdraw(amountToBorrow); try tup.buy{ value: amountToBorrow }() { address[] memory path = new address[](2); path[0] = address(tup); path[1] = weth; uint256[] memory amountRequired = router.getAmountsIn(amountToBorrow, path); // 2. TUP -> ETH (External) IERC20(path[0]).transfer(msg.sender, amountRequired[0]); try tup.returnNative{ value: address(this).balance }() { // We return the pool amount to the contract here try tup.sell(tup.balanceOf(address(this))) { tup.receiveProfit{ value: address(this).balance }(); swapSuccessful = true; } catch { swapSuccessful = false; return; } } catch { swapSuccessful = false; return; } } catch { swapSuccessful = false; return; } } } } else { swapSuccessful = false; return; } } function _createPair(address asset01, address asset02) internal returns (address pair) { pair = factory.getPair(asset01, asset02); if (pair == address(0) && asset01 != address(0) && asset02 != address(0)) { try factory.createPair(asset01, asset02) returns (address p) { pair = p; } catch { revert(); } } return pair; } function _performOperation(address asset, uint256 amount) internal returns (bool) { if (operation == Operation.ETH_TO_TUP_INTERNAL_TUP_TO_ETH_EXTERNAL) { IWETH(asset).withdraw(amount); // assumming asset == weth try tup.buy{ value: amount }() { address[] memory path = new address[](2); path[0] = address(tup); path[1] = asset; uint256 tupAmount = tup.balanceOf(address(this)); tup.approve(address(router), tupAmount); try router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tupAmount, 0, // amount, path, address(this), block.timestamp + 300 ) { return true; } catch { return false; } } catch { return false; } } else { address[] memory path = new address[](2); path[0] = asset; path[1] = address(tup); IERC20(asset).approve(address(router), amount); try router.swapExactTokensForTokensSupportingFeeOnTransferTokens( amount, 0, //tup.queryAmountInternalLP(amount), path, address(this), block.timestamp + 300 ) { uint256 tupAmount = tup.balanceOf(address(this)); try tup.sell(tupAmount) { IWETH(asset).deposit{ value: address(this).balance }(); return true; } catch { return false; } } catch { return false; } } } /** * @dev Add liquidity for the TUP/ETH pair LP in third party exchange (based on UniswapV2) * */ function addLiquidityNative(uint256 tupAmount) external payable fromTup returns (bool) { tup.approve(address(router), tupAmount); // add liquidity for the TUP/ETH pair try router.addLiquidityETH{ value: msg.value }( address(tup), tupAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0), block.timestamp + 300 ) { return true; } catch { tup.returnNative{ value: msg.value }(); return false; } } function checkAndPerformArbitrage() external virtual runningArbitrage fromTup adjustInternalCondition returns (bool) { address weth = router.WETH(); address pair = factory.getPair(address(tup), weth); uint256 balanceInternalNative = tup.poolBalance(); uint256 balanceExternalNative = IERC20(weth).balanceOf(pair); uint256 balanceInternalTUP = tup.balanceOf(address(tup)); uint256 balanceExternalTUP = tup.balanceOf(pair); if (balanceInternalNative == 0 || balanceExternalNative == 0) { return false; } uint256 rateInternal = balanceInternalTUP.mulDiv(FACTOR, balanceInternalNative); uint256 rateExternal = balanceExternalTUP.mulDiv(FACTOR, balanceExternalNative); if (rateExternal == 0 || rateInternal == 0) { return false; } bool shouldPerformArbitrage = (rateExternal > rateInternal) ? (rateExternal - rateInternal).mulDiv(10_000, rateExternal) >= ARBITRAGE_RATE : (rateInternal - rateExternal).mulDiv(10_000, rateInternal) >= ARBITRAGE_RATE; return (shouldPerformArbitrage ? _performArbitrage() : false); } function _performArbitrage() internal returns (bool success) { address weth = router.WETH(); address[] memory assets_01 = new address[](2); assets_01[0] = weth; assets_01[1] = address(tup); address[] memory assets_02 = new address[](2); assets_02[0] = address(tup); assets_02[1] = weth; uint256[] memory amountOutExternal; uint256 amountOutInternal; address pair = factory.getPair(address(tup), weth); uint256 balanceInternalNative = tup.poolBalance(); uint256 balanceExternalNative = IERC20(weth).balanceOf(pair); uint256 balanceInternalTUP = tup.balanceOf(address(tup)); uint256 balanceExternalTUP = tup.balanceOf(pair); // getAmountsIn (amountOut, path) --> Given an amountOut value of path[1] token, it will tell us how many path[0] tokens we send // getAmountsOut(amountIn, path) --> Given an amountIn value of path[0] token, it will tell us how many path[1] tokens we receive for (uint256 i = 0; i < rangesWETH.length; i++) { amountOutExternal = router.getAmountsOut(rangesWETH[i], assets_01); amountOutInternal = tup.queryNativeAmount(amountOutExternal[1]); uint256 totalWithFee = _calculateFee(rangesWETH[i]); if (amountOutInternal <= totalWithFee) { amountOutInternal = tup.queryAmountOptimal(rangesWETH[i]); amountOutExternal = router.getAmountsOut(amountOutInternal, assets_02); if (amountOutExternal[1] > totalWithFee) { // perform arbitrage here - Option #1 - Buy TUP LP Internal and Sell TUP LP External if (balanceExternalNative >= amountOutExternal[1] && balanceInternalTUP >= amountOutInternal) { operation = Operation.ETH_TO_TUP_INTERNAL_TUP_TO_ETH_EXTERNAL; if (!hasAlternativeSwap) { success = _startTraditionalSwap(weth, rangesWETH[i]); if (!success) { success = _startAlternativeSwap(rangesWETH[i], amountOutInternal); } } else { success = _startAlternativeSwap(rangesWETH[i], amountOutInternal); } if (success) { break; } } } } else { // perform arbitrage here - Option #2 - Buy TUP LP External and Sell TUP LP Internal if (balanceInternalNative >= amountOutInternal && balanceExternalTUP >= amountOutExternal[1]) { operation = Operation.ETH_TO_TUP_EXTERNAL_TUP_TO_ETH_INTERNAL; if (!hasAlternativeSwap) { success = _startTraditionalSwap(weth, rangesWETH[i]); if (!success) { success = _startAlternativeSwap(rangesWETH[i], amountOutExternal[1]); } } else { success = _startAlternativeSwap(rangesWETH[i], amountOutExternal[1]); } if (success) { break; } } } } return success; } function pancakeCall(address _sender, uint256 _amount0, uint256 _amount1, bytes calldata _data) external { _commonCall(_sender, _data); } function pairTupEth() external view returns (address) { return _pairTupEth; } function uniswapV2Call(address _sender, uint256 _amount0, uint256 _amount1, bytes calldata _data) external { _commonCall(_sender, _data); } function queryRate() external view fromTup returns (uint256) { address weth = router.WETH(); uint256 ethBalance = IERC20(weth).balanceOf(_pairTupEth); return (ethBalance == 0) ? FACTOR : tup.balanceOf(_pairTupEth).mulDiv(FACTOR, ethBalance); } function queryPoolAddress() external view virtual returns (address) { return address(0); } function setTup(address tupAddress) external virtual onlyOwner { tup = ITimeIsUp(payable(tupAddress)); _pairTupEth = _createPair(address(tup), router.WETH()); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_addressProvider","type":"address"},{"internalType":"address","name":"_exchangeRouterAddress","type":"address"},{"internalType":"address","name":"_tupTokenAddress","type":"address"},{"internalType":"bool","name":"_hasAlternativeSwap","type":"bool"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"tupAmount","type":"uint256"}],"name":"addLiquidityNative","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkAndPerformArbitrage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairTupEth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_amount0","type":"uint256"},{"internalType":"uint256","name":"_amount1","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"pancakeCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queryPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"queryRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tupAddress","type":"address"}],"name":"setTup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_amount0","type":"uint256"},{"internalType":"uint256","name":"_amount1","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV2Call","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6103606040526a295be96e6406697200000060a09081526a084595161401484a00000060c0526a0422ca8b0a00a42500000060e05269d3c21bcecceda1000000610100526969e10de76676d08000006101205269152d02c7e14af680000061014052690a968163f0a57b4000006101605269021e19e0c9bab24000006101805269010f0cf064dd592000006101a052683635c9adc5dea000006101c052681b1ae4d6e2ef5000006101e05268056bc75e2d63100000610200526802b5e3af16b188000061022052678ac7230489e8000061024052674563918244f4000061026052670de0b6b3a7640000610280526706f05b59d3b200006102a05267016345785d8a00006102c05266b1a2bc2ec500006102e052662386f26fc10000610300526611c37937e080006103205266038d7ea4c68000610340526200014790600590601662000386565b503480156200015557600080fd5b50604051620031c3380380620031c3833981016040819052620001789162000408565b620001833362000255565b600180546001600160a01b0319166001600160a01b0386169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020391906200047e565b600280546001600160a01b03199081166001600160a01b03938416179091556003805490911685831617905582151560805233908216146200024a576200024a81620002a5565b5050505050620004a3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620002af62000328565b6001600160a01b0381166200031a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620003258162000255565b50565b6000546001600160a01b03163314620003845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000311565b565b8260168101928215620003c2579160200282015b82811115620003c257825182906001600160581b03169055916020019190600101906200039a565b50620003d0929150620003d4565b5090565b5b80821115620003d05760008155600101620003d5565b80516001600160a01b03811681146200040357600080fd5b919050565b600080600080600060a086880312156200042157600080fd5b6200042c86620003eb565b94506200043c60208701620003eb565b93506200044c60408701620003eb565b9250606086015180151581146200046257600080fd5b91506200047260808701620003eb565b90509295509295909350565b6000602082840312156200049157600080fd5b6200049c82620003eb565b9392505050565b608051612cfd620004c66000396000818161225301526123570152612cfd6000f3fe6080604052600436106100c05760003560e01c80638480081211610074578063a840a4f51161004e578063a840a4f5146101ba578063c6cc93a1146101cf578063f2fde38b146101ed576100c7565b806384800812146101015780638da5cb5b1461017957806395d18a1314610197576100c7565b806315496ef5116100a557806315496ef5146101215780632ea7710314610144578063715018a614610164576100c7565b806303bc95a0146100d457806310d1e85c14610101576100c7565b366100c757005b36156100d257600080fd5b005b3480156100e057600080fd5b5060005b6040516001600160a01b0390911681526020015b60405180910390f35b34801561010d57600080fd5b506100d261011c36600461286d565b61020d565b61013461012f366004612903565b61021f565b60405190151581526020016100f8565b34801561015057600080fd5b506100d261015f36600461291c565b6104b4565b34801561017057600080fd5b506100d26105b7565b34801561018557600080fd5b506000546001600160a01b03166100e4565b3480156101a357600080fd5b506101ac6105cb565b6040519081526020016100f8565b3480156101c657600080fd5b5061013461080f565b3480156101db57600080fd5b506004546001600160a01b03166100e4565b3480156101f957600080fd5b506100d261020836600461291c565b610d36565b610218858383610de0565b5050505050565b6003546000906001600160a01b031633146102c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f48656c7065723a206f6e6c792054555020746f6b656e20636f6e74726163742060448201527f63616e2063616c6c20746869732066756e6374696f6e0000000000000000000060648201526084015b60405180910390fd5b6003546001546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561032f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103539190612939565b506001546003546001600160a01b039182169163f305d7199134911685600080806103804261012c61298a565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af193505050508015610422575060408051601f3d908101601f1916820190925261041f918101906129a2565b60015b6104a957600360009054906101000a90046001600160a01b03166001600160a01b03166370471f73346040518263ffffffff1660e01b815260040160206040518083038185885af115801561047b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104a09190612939565b50600092915050565b506001949350505050565b6104bc61186b565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116918217909255600154604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905161057c94929092169163ad5c4648916004808201926020929091908290030181865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057791906129d0565b6118df565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105bf61186b565b6105c96000611a44565b565b6003546000906001600160a01b03163314610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f48656c7065723a206f6e6c792054555020746f6b656e20636f6e74726163742060448201527f63616e2063616c6c20746869732066756e6374696f6e0000000000000000000060648201526084016102b8565b600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156106cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef91906129d0565b600480546040516370a0823160e01b81526001600160a01b03918216928101929092529192506000918316906370a0823190602401602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076591906129ed565b905080156107fd57600354600480546040516370a0823160e01b81526001600160a01b03918216928101929092526107f892670de0b6b3a7640000928592909116906370a0823190602401602060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f191906129ed565b9190611aac565b610807565b670de0b6b3a76400005b925050505b90565b600080547501000000000000000000000000000000000000000000900460ff1661080c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055600354336001600160a01b039091161461090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f48656c7065723a206f6e6c792054555020746f6b656e20636f6e74726163742060448201527f63616e2063616c6c20746869732066756e6374696f6e0000000000000000000060648201526084016102b8565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000178155600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d591906129d0565b6002546003546040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152818416602482015292935060009291169063e6a4390590604401602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c91906129d0565b90506000600360009054906101000a90046001600160a01b03166001600160a01b03166396365d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae791906129ed565b6040516370a0823160e01b81526001600160a01b0384811660048301529192506000918516906370a0823190602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5791906129ed565b6003546040516370a0823160e01b81526001600160a01b0390911660048201819052919250600091906370a0823190602401602060405180830381865afa158015610ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bca91906129ed565b6003546040516370a0823160e01b81526001600160a01b038781166004830152929350600092909116906370a0823190602401602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e91906129ed565b9050831580610c4b575082155b15610c5f5760009650505050505050610d0b565b6000610c7483670de0b6b3a764000087611aac565b90506000610c8b83670de0b6b3a764000087611aac565b9050801580610c98575081155b15610cae57600098505050505050505050610d0b565b6000828211610cd2576101f4610ccb612710856107f18682612a06565b1015610ce9565b6101f4610ce6612710846107f18782612a06565b10155b905080610cf7576000610cff565b610cff611b80565b99505050505050505050505b600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16905590565b610d3e61186b565b6001600160a01b038116610dd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102b8565b610ddd81611a44565b50565b6004546001600160a01b031633141561183e576001600160a01b03831630141561183957600080610e1383850185612a1d565b60035491935091506001600160a01b0380841691161415611265576003546040517fe4849b32000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063e4849b32906024016020604051808303816000875af1925050508015610eae575060408051601f3d908101601f19168201909252610eab91810190612939565b60015b610ee1575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055505050565b506040805160028082526060820183526000926020830190803683375050600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906129d0565b81600081518110610f9c57610f9c612a78565b6001600160a01b039283166020918202929092010152600354825191169082906001908110610fcd57610fcd612a78565b6001600160a01b0392831660209182029290920101526001546040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000929190911690631f00ca749061102a9086908690600401612aa7565b600060405180830381865afa158015611047573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261106f9190810190612afe565b90508160008151811061108457611084612a78565b60200260200101516001600160a01b031663d0e30db0826000815181106110ad576110ad612a78565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110e057600080fd5b505af11580156110f4573d6000803e3d6000fd5b50505050508160008151811061110c5761110c612a78565b60200260200101516001600160a01b031663a9059cbb338360008151811061113657611136612a78565b60200260200101516040518363ffffffff1660e01b815260040161116f9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af115801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b29190612939565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639c4da9d8476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b5050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055506102189350505050565b600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec91906129d0565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490529091506001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b15801561134a57600080fd5b505af115801561135e573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663a6f2ae3a836040518263ffffffff1660e01b815260040160206040518083038185885af1935050505080156113d4575060408051601f3d908101601f191682019092526113d191810190612939565b60015b611408575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16905550505050565b50604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061144a5761144a612a78565b60200260200101906001600160a01b031690816001600160a01b031681525050818160018151811061147e5761147e612a78565b6001600160a01b0392831660209182029290920101526001546040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000929190911690631f00ca74906114db9087908690600401612aa7565b600060405180830381865afa1580156114f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115209190810190612afe565b90508160008151811061153557611535612a78565b60200260200101516001600160a01b031663a9059cbb338360008151811061155f5761155f612a78565b60200260200101516040518363ffffffff1660e01b81526004016115989291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156115b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115db9190612939565b50600360009054906101000a90046001600160a01b03166001600160a01b03166370471f73476040518263ffffffff1660e01b815260040160206040518083038185885af19350505050801561164e575060408051601f3d908101601f1916820190925261164b91810190612939565b60015b611684575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055505050505050565b506003546040516370a0823160e01b81523060048201526001600160a01b039091169063e4849b329082906370a0823190602401602060405180830381865afa1580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f991906129ed565b6040518263ffffffff1660e01b815260040161171791815260200190565b6020604051808303816000875af1925050508015611752575060408051601f3d908101601f1916820190925261174f91810190612939565b60015b611788575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055505050505050565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639c4da9d8476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117d957600080fd5b505af11580156117ed573d6000803e3d6000fd5b5050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000017905550505050505050505b505050565b5050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16905550565b6000546001600160a01b031633146105c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b8565b6002546040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152600092169063e6a4390590604401602060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f91906129d0565b90506001600160a01b03811615801561199057506001600160a01b03831615155b80156119a457506001600160a01b03821615155b15611a3e576002546040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301529091169063c9c65396906044016020604051808303816000875af1925050508015611a32575060408051601f3d908101601f19168201909252611a2f918101906129d0565b60015b611a3b57600080fd5b90505b92915050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060001415611b0557838281611afb57611afb612bbc565b0492505050611b79565b808411611b1157600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa91906129d0565b60408051600280825260608201835292935060009290916020830190803683370190505090508181600081518110611c3457611c34612a78565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611c6557611c65612a78565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337505060035482519293506001600160a01b031691839150600090611cc057611cc0612a78565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611cf457611cf4612a78565b6001600160a01b0392831660209182029290920101526002546003546040517fe6a4390500000000000000000000000000000000000000000000000000000000815290831660048201528583166024820152606092600092839291169063e6a4390590604401602060405180830381865afa158015611d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9b91906129d0565b90506000600360009054906101000a90046001600160a01b03166001600160a01b03166396365d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906129ed565b6040516370a0823160e01b81526001600160a01b0384811660048301529192506000918916906370a0823190602401602060405180830381865afa158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8691906129ed565b6003546040516370a0823160e01b81526001600160a01b0390911660048201819052919250600091906370a0823190602401602060405180830381865afa158015611ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef991906129ed565b6003546040516370a0823160e01b81526001600160a01b038781166004830152929350600092909116906370a0823190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d91906129ed565b905060005b6016811015612410576001546001600160a01b031663d06ca61f60058360168110611f9f57611f9f612a78565b01548c6040518363ffffffff1660e01b8152600401611fbf929190612aa7565b600060405180830381865afa158015611fdc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120049190810190612afe565b60035481519199506001600160a01b03169063f3d33a0e908a90600190811061202f5761202f612a78565b60200260200101516040518263ffffffff1660e01b815260040161205591815260200190565b602060405180830381865afa158015612072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209691906129ed565b965060006120b7600583601681106120b0576120b0612a78565b015461241e565b90508088116122e4576003546001600160a01b03166398527875600584601681106120e4576120e4612a78565b01546040518263ffffffff1660e01b815260040161210491815260200190565b602060405180830381865afa158015612121573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214591906129ed565b6001546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081529199506001600160a01b03169063d06ca61f90612191908b908e90600401612aa7565b600060405180830381865afa1580156121ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121d69190810190612afe565b985080896001815181106121ec576121ec612a78565b602002602001015111156122df578860018151811061220d5761220d612a78565b602002602001015185101580156122245750878410155b156122df57600080547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff1690557f00000000000000000000000000000000000000000000000000000000000000006122ba5761228d8c600584601681106104a0576104a0612a78565b9c508c6122b5576122b2600583601681106122aa576122aa612a78565b015489612438565b9c505b6122d3565b6122d0600583601681106122aa576122aa612a78565b9c505b8c156122df5750612410565b6123fd565b87861015801561230e57508860018151811061230257612302612a78565b60200260200101518310155b156123fd57600080547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000001790557f00000000000000000000000000000000000000000000000000000000000000006123d8576123918c600584601681106104a0576104a0612a78565b9c508c6123d3576123d0600583601681106123ae576123ae612a78565b01548a6001815181106123c3576123c3612a78565b6020026020010151612438565b9c505b6123f1565b6123ee600583601681106123ae576123ae612a78565b9c505b8c156123fd5750612410565b508061240881612c1a565b915050611f72565b505050505050505050505090565b600061242e826064612710611aac565b611a3e908361298a565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561248e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b291906129d0565b600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1690556004549091506001600160a01b0316600160005477010000000000000000000000000000000000000000000000900460ff16600181111561251d5761251d612beb565b1415612711576000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258791906129d0565b6003546001600160a01b039081169116146125a35760006125a5565b845b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906129d0565b6003546001600160a01b03908116911614612627576000612629565b855b600354604080516001600160a01b03928316602082015290810189905291925084169063022c0d9f908490849030906060015b6040516020818303038152906040526040518563ffffffff1660e01b815260040161268a9493929190612c53565b600060405180830381600087803b1580156126a457600080fd5b505af19250505080156126b5575060015b6126e5575050600054760100000000000000000000000000000000000000000000900460ff169250611a3e915050565b5050600054760100000000000000000000000000000000000000000000900460ff169250611a3e915050565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277591906129d0565b6001600160a01b0316836001600160a01b031614612794576000612796565b855b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fc91906129d0565b6001600160a01b0316846001600160a01b03161461281b57600061281d565b865b9050826001600160a01b031663022c0d9f838330888c60405160200161265c9291906001600160a01b03929092168252602082015260400190565b6001600160a01b0381168114610ddd57600080fd5b60008060008060006080868803121561288557600080fd5b853561289081612858565b94506020860135935060408601359250606086013567ffffffffffffffff808211156128bb57600080fd5b818801915088601f8301126128cf57600080fd5b8135818111156128de57600080fd5b8960208285010111156128f057600080fd5b9699959850939650602001949392505050565b60006020828403121561291557600080fd5b5035919050565b60006020828403121561292e57600080fd5b8135611a3b81612858565b60006020828403121561294b57600080fd5b81518015158114611a3b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561299d5761299d61295b565b500190565b6000806000606084860312156129b757600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129e257600080fd5b8151611a3b81612858565b6000602082840312156129ff57600080fd5b5051919050565b600082821015612a1857612a1861295b565b500390565b60008060408385031215612a3057600080fd5b8235612a3b81612858565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015612af15784516001600160a01b031683529383019391830191600101612acc565b5090979650505050505050565b60006020808385031215612b1157600080fd5b825167ffffffffffffffff80821115612b2957600080fd5b818501915085601f830112612b3d57600080fd5b815181811115612b4f57612b4f612a49565b8060051b604051601f19603f83011681018181108582111715612b7457612b74612a49565b604052918252848201925083810185019188831115612b9257600080fd5b938501935b82851015612bb057845184529385019392850192612b97565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4c57612c4c61295b565b5060010190565b8481526000602085818401526001600160a01b038516604084015260806060840152835180608085015260005b81811015612c9c5785810183015185820160a001528201612c80565b81811115612cae57600060a083870101525b50601f01601f19169290920160a001969550505050505056fea2646970667358221220a245d9f530a0b33c96a8f1edf8d371bfa4d064fd60d381a4f19ca0ff16b4176c64736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f35dd32020533c60f98d245f881312af740314a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000123e587f469fcb3c5992793d081be8d643fd78e1
Deployed Bytecode
0x6080604052600436106100c05760003560e01c80638480081211610074578063a840a4f51161004e578063a840a4f5146101ba578063c6cc93a1146101cf578063f2fde38b146101ed576100c7565b806384800812146101015780638da5cb5b1461017957806395d18a1314610197576100c7565b806315496ef5116100a557806315496ef5146101215780632ea7710314610144578063715018a614610164576100c7565b806303bc95a0146100d457806310d1e85c14610101576100c7565b366100c757005b36156100d257600080fd5b005b3480156100e057600080fd5b5060005b6040516001600160a01b0390911681526020015b60405180910390f35b34801561010d57600080fd5b506100d261011c36600461286d565b61020d565b61013461012f366004612903565b61021f565b60405190151581526020016100f8565b34801561015057600080fd5b506100d261015f36600461291c565b6104b4565b34801561017057600080fd5b506100d26105b7565b34801561018557600080fd5b506000546001600160a01b03166100e4565b3480156101a357600080fd5b506101ac6105cb565b6040519081526020016100f8565b3480156101c657600080fd5b5061013461080f565b3480156101db57600080fd5b506004546001600160a01b03166100e4565b3480156101f957600080fd5b506100d261020836600461291c565b610d36565b610218858383610de0565b5050505050565b6003546000906001600160a01b031633146102c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f48656c7065723a206f6e6c792054555020746f6b656e20636f6e74726163742060448201527f63616e2063616c6c20746869732066756e6374696f6e0000000000000000000060648201526084015b60405180910390fd5b6003546001546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561032f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103539190612939565b506001546003546001600160a01b039182169163f305d7199134911685600080806103804261012c61298a565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af193505050508015610422575060408051601f3d908101601f1916820190925261041f918101906129a2565b60015b6104a957600360009054906101000a90046001600160a01b03166001600160a01b03166370471f73346040518263ffffffff1660e01b815260040160206040518083038185885af115801561047b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104a09190612939565b50600092915050565b506001949350505050565b6104bc61186b565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116918217909255600154604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905161057c94929092169163ad5c4648916004808201926020929091908290030181865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057791906129d0565b6118df565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105bf61186b565b6105c96000611a44565b565b6003546000906001600160a01b03163314610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f48656c7065723a206f6e6c792054555020746f6b656e20636f6e74726163742060448201527f63616e2063616c6c20746869732066756e6374696f6e0000000000000000000060648201526084016102b8565b600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156106cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef91906129d0565b600480546040516370a0823160e01b81526001600160a01b03918216928101929092529192506000918316906370a0823190602401602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076591906129ed565b905080156107fd57600354600480546040516370a0823160e01b81526001600160a01b03918216928101929092526107f892670de0b6b3a7640000928592909116906370a0823190602401602060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f191906129ed565b9190611aac565b610807565b670de0b6b3a76400005b925050505b90565b600080547501000000000000000000000000000000000000000000900460ff1661080c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055600354336001600160a01b039091161461090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f48656c7065723a206f6e6c792054555020746f6b656e20636f6e74726163742060448201527f63616e2063616c6c20746869732066756e6374696f6e0000000000000000000060648201526084016102b8565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000178155600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d591906129d0565b6002546003546040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152818416602482015292935060009291169063e6a4390590604401602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c91906129d0565b90506000600360009054906101000a90046001600160a01b03166001600160a01b03166396365d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae791906129ed565b6040516370a0823160e01b81526001600160a01b0384811660048301529192506000918516906370a0823190602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5791906129ed565b6003546040516370a0823160e01b81526001600160a01b0390911660048201819052919250600091906370a0823190602401602060405180830381865afa158015610ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bca91906129ed565b6003546040516370a0823160e01b81526001600160a01b038781166004830152929350600092909116906370a0823190602401602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e91906129ed565b9050831580610c4b575082155b15610c5f5760009650505050505050610d0b565b6000610c7483670de0b6b3a764000087611aac565b90506000610c8b83670de0b6b3a764000087611aac565b9050801580610c98575081155b15610cae57600098505050505050505050610d0b565b6000828211610cd2576101f4610ccb612710856107f18682612a06565b1015610ce9565b6101f4610ce6612710846107f18782612a06565b10155b905080610cf7576000610cff565b610cff611b80565b99505050505050505050505b600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16905590565b610d3e61186b565b6001600160a01b038116610dd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102b8565b610ddd81611a44565b50565b6004546001600160a01b031633141561183e576001600160a01b03831630141561183957600080610e1383850185612a1d565b60035491935091506001600160a01b0380841691161415611265576003546040517fe4849b32000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063e4849b32906024016020604051808303816000875af1925050508015610eae575060408051601f3d908101601f19168201909252610eab91810190612939565b60015b610ee1575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055505050565b506040805160028082526060820183526000926020830190803683375050600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906129d0565b81600081518110610f9c57610f9c612a78565b6001600160a01b039283166020918202929092010152600354825191169082906001908110610fcd57610fcd612a78565b6001600160a01b0392831660209182029290920101526001546040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000929190911690631f00ca749061102a9086908690600401612aa7565b600060405180830381865afa158015611047573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261106f9190810190612afe565b90508160008151811061108457611084612a78565b60200260200101516001600160a01b031663d0e30db0826000815181106110ad576110ad612a78565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110e057600080fd5b505af11580156110f4573d6000803e3d6000fd5b50505050508160008151811061110c5761110c612a78565b60200260200101516001600160a01b031663a9059cbb338360008151811061113657611136612a78565b60200260200101516040518363ffffffff1660e01b815260040161116f9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af115801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b29190612939565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639c4da9d8476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b5050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055506102189350505050565b600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec91906129d0565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490529091506001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b15801561134a57600080fd5b505af115801561135e573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663a6f2ae3a836040518263ffffffff1660e01b815260040160206040518083038185885af1935050505080156113d4575060408051601f3d908101601f191682019092526113d191810190612939565b60015b611408575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16905550505050565b50604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061144a5761144a612a78565b60200260200101906001600160a01b031690816001600160a01b031681525050818160018151811061147e5761147e612a78565b6001600160a01b0392831660209182029290920101526001546040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000929190911690631f00ca74906114db9087908690600401612aa7565b600060405180830381865afa1580156114f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115209190810190612afe565b90508160008151811061153557611535612a78565b60200260200101516001600160a01b031663a9059cbb338360008151811061155f5761155f612a78565b60200260200101516040518363ffffffff1660e01b81526004016115989291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156115b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115db9190612939565b50600360009054906101000a90046001600160a01b03166001600160a01b03166370471f73476040518263ffffffff1660e01b815260040160206040518083038185885af19350505050801561164e575060408051601f3d908101601f1916820190925261164b91810190612939565b60015b611684575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055505050505050565b506003546040516370a0823160e01b81523060048201526001600160a01b039091169063e4849b329082906370a0823190602401602060405180830381865afa1580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f991906129ed565b6040518263ffffffff1660e01b815260040161171791815260200190565b6020604051808303816000875af1925050508015611752575060408051601f3d908101601f1916820190925261174f91810190612939565b60015b611788575050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff169055505050505050565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639c4da9d8476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117d957600080fd5b505af11580156117ed573d6000803e3d6000fd5b5050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000017905550505050505050505b505050565b5050600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16905550565b6000546001600160a01b031633146105c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b8565b6002546040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152600092169063e6a4390590604401602060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f91906129d0565b90506001600160a01b03811615801561199057506001600160a01b03831615155b80156119a457506001600160a01b03821615155b15611a3e576002546040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301529091169063c9c65396906044016020604051808303816000875af1925050508015611a32575060408051601f3d908101601f19168201909252611a2f918101906129d0565b60015b611a3b57600080fd5b90505b92915050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060001415611b0557838281611afb57611afb612bbc565b0492505050611b79565b808411611b1157600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa91906129d0565b60408051600280825260608201835292935060009290916020830190803683370190505090508181600081518110611c3457611c34612a78565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611c6557611c65612a78565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337505060035482519293506001600160a01b031691839150600090611cc057611cc0612a78565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611cf457611cf4612a78565b6001600160a01b0392831660209182029290920101526002546003546040517fe6a4390500000000000000000000000000000000000000000000000000000000815290831660048201528583166024820152606092600092839291169063e6a4390590604401602060405180830381865afa158015611d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9b91906129d0565b90506000600360009054906101000a90046001600160a01b03166001600160a01b03166396365d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906129ed565b6040516370a0823160e01b81526001600160a01b0384811660048301529192506000918916906370a0823190602401602060405180830381865afa158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8691906129ed565b6003546040516370a0823160e01b81526001600160a01b0390911660048201819052919250600091906370a0823190602401602060405180830381865afa158015611ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef991906129ed565b6003546040516370a0823160e01b81526001600160a01b038781166004830152929350600092909116906370a0823190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d91906129ed565b905060005b6016811015612410576001546001600160a01b031663d06ca61f60058360168110611f9f57611f9f612a78565b01548c6040518363ffffffff1660e01b8152600401611fbf929190612aa7565b600060405180830381865afa158015611fdc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120049190810190612afe565b60035481519199506001600160a01b03169063f3d33a0e908a90600190811061202f5761202f612a78565b60200260200101516040518263ffffffff1660e01b815260040161205591815260200190565b602060405180830381865afa158015612072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209691906129ed565b965060006120b7600583601681106120b0576120b0612a78565b015461241e565b90508088116122e4576003546001600160a01b03166398527875600584601681106120e4576120e4612a78565b01546040518263ffffffff1660e01b815260040161210491815260200190565b602060405180830381865afa158015612121573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214591906129ed565b6001546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081529199506001600160a01b03169063d06ca61f90612191908b908e90600401612aa7565b600060405180830381865afa1580156121ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121d69190810190612afe565b985080896001815181106121ec576121ec612a78565b602002602001015111156122df578860018151811061220d5761220d612a78565b602002602001015185101580156122245750878410155b156122df57600080547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff1690557f00000000000000000000000000000000000000000000000000000000000000016122ba5761228d8c600584601681106104a0576104a0612a78565b9c508c6122b5576122b2600583601681106122aa576122aa612a78565b015489612438565b9c505b6122d3565b6122d0600583601681106122aa576122aa612a78565b9c505b8c156122df5750612410565b6123fd565b87861015801561230e57508860018151811061230257612302612a78565b60200260200101518310155b156123fd57600080547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000001790557f00000000000000000000000000000000000000000000000000000000000000016123d8576123918c600584601681106104a0576104a0612a78565b9c508c6123d3576123d0600583601681106123ae576123ae612a78565b01548a6001815181106123c3576123c3612a78565b6020026020010151612438565b9c505b6123f1565b6123ee600583601681106123ae576123ae612a78565b9c505b8c156123fd5750612410565b508061240881612c1a565b915050611f72565b505050505050505050505090565b600061242e826064612710611aac565b611a3e908361298a565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561248e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b291906129d0565b600080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1690556004549091506001600160a01b0316600160005477010000000000000000000000000000000000000000000000900460ff16600181111561251d5761251d612beb565b1415612711576000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258791906129d0565b6003546001600160a01b039081169116146125a35760006125a5565b845b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906129d0565b6003546001600160a01b03908116911614612627576000612629565b855b600354604080516001600160a01b03928316602082015290810189905291925084169063022c0d9f908490849030906060015b6040516020818303038152906040526040518563ffffffff1660e01b815260040161268a9493929190612c53565b600060405180830381600087803b1580156126a457600080fd5b505af19250505080156126b5575060015b6126e5575050600054760100000000000000000000000000000000000000000000900460ff169250611a3e915050565b5050600054760100000000000000000000000000000000000000000000900460ff169250611a3e915050565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277591906129d0565b6001600160a01b0316836001600160a01b031614612794576000612796565b855b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fc91906129d0565b6001600160a01b0316846001600160a01b03161461281b57600061281d565b865b9050826001600160a01b031663022c0d9f838330888c60405160200161265c9291906001600160a01b03929092168252602082015260400190565b6001600160a01b0381168114610ddd57600080fd5b60008060008060006080868803121561288557600080fd5b853561289081612858565b94506020860135935060408601359250606086013567ffffffffffffffff808211156128bb57600080fd5b818801915088601f8301126128cf57600080fd5b8135818111156128de57600080fd5b8960208285010111156128f057600080fd5b9699959850939650602001949392505050565b60006020828403121561291557600080fd5b5035919050565b60006020828403121561292e57600080fd5b8135611a3b81612858565b60006020828403121561294b57600080fd5b81518015158114611a3b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561299d5761299d61295b565b500190565b6000806000606084860312156129b757600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129e257600080fd5b8151611a3b81612858565b6000602082840312156129ff57600080fd5b5051919050565b600082821015612a1857612a1861295b565b500390565b60008060408385031215612a3057600080fd5b8235612a3b81612858565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015612af15784516001600160a01b031683529383019391830191600101612acc565b5090979650505050505050565b60006020808385031215612b1157600080fd5b825167ffffffffffffffff80821115612b2957600080fd5b818501915085601f830112612b3d57600080fd5b815181811115612b4f57612b4f612a49565b8060051b604051601f19603f83011681018181108582111715612b7457612b74612a49565b604052918252848201925083810185019188831115612b9257600080fd5b938501935b82851015612bb057845184529385019392850192612b97565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4c57612c4c61295b565b5060010190565b8481526000602085818401526001600160a01b038516604084015260806060840152835180608085015260005b81811015612c9c5785810183015185820160a001528201612c80565b81811115612cae57600060a083870101525b50601f01601f19169290920160a001969550505050505056fea2646970667358221220a245d9f530a0b33c96a8f1edf8d371bfa4d064fd60d381a4f19ca0ff16b4176c64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f35dd32020533c60f98d245f881312af740314a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000123e587f469fcb3c5992793d081be8d643fd78e1
-----Decoded View---------------
Arg [0] : _addressProvider (address): 0x0000000000000000000000000000000000000000
Arg [1] : _exchangeRouterAddress (address): 0xf35Dd32020533c60F98d245F881312aF740314A3
Arg [2] : _tupTokenAddress (address): 0x0000000000000000000000000000000000000000
Arg [3] : _hasAlternativeSwap (bool): True
Arg [4] : _owner (address): 0x123E587F469fCB3c5992793d081bE8D643FD78e1
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 000000000000000000000000f35dd32020533c60f98d245f881312af740314a3
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 000000000000000000000000123e587f469fcb3c5992793d081be8d643fd78e1
Deployed Bytecode Sourcemap
31392:15431:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35269:8;:20;35261:29;;;;;;31392:15431;46525:104;;;;;;;;;;-1:-1:-1;46584:7:0;46525:104;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;46525:104:0;;;;;;;;46081:153;;;;;;;;;;-1:-1:-1;46081:153:0;;;;;:::i;:::-;;:::i;40547:595::-;;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;40547:595:0;1457:187:1;46637:183:0;;;;;;;;;;-1:-1:-1;46637:183:0;;;;;:::i;:::-;;:::i;18251:103::-;;;;;;;;;;;;;:::i;17603:87::-;;;;;;;;;;-1:-1:-1;17649:7:0;17676:6;-1:-1:-1;;;;;17676:6:0;17603:87;;46242:275;;;;;;;;;;;;;:::i;:::-;;;2047:25:1;;;2035:2;2020:18;46242:275:0;1901:177:1;41150:1204:0;;;;;;;;;;;;;:::i;45982:91::-;;;;;;;;;;-1:-1:-1;46054:11:0;;-1:-1:-1;;;;;46054:11:0;45982:91;;18509:201;;;;;;;;;;-1:-1:-1;18509:201:0;;;;;:::i;:::-;;:::i;46081:153::-;46199:27;46211:7;46220:5;;46199:11;:27::i;:::-;46081:153;;;;;:::o;40547:595::-;32691:3;;40628:4;;-1:-1:-1;;;;;32691:3:0;32669:10;:26;32661:93;;;;;;;2285:2:1;32661:93:0;;;2267:21:1;2324:2;2304:18;;;2297:30;2363:34;2343:18;;;2336:62;2434:24;2414:18;;;2407:52;2476:19;;32661:93:0;;;;;;;;;40645:3:::1;::::0;;40665:6;40645:39:::1;::::0;;;;-1:-1:-1;;;;;40665:6:0;;::::1;40645:39;::::0;::::1;2680:74:1::0;2770:18;;;2763:34;;;40645:3:0;::::1;::::0;:11:::1;::::0;2653:18:1;;40645:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;40746:6:0::1;::::0;40811:3:::1;::::0;-1:-1:-1;;;;;40746:6:0;;::::1;::::0;:22:::1;::::0;40777:9:::1;::::0;40811:3:::1;40830:9:::0;40746:6:::1;::::0;;40965:21:::1;:15;40983:3;40965:21;:::i;:::-;40746:251;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;3794:15:1;;;40746:251:0::1;::::0;::::1;3776:34:1::0;3826:18;;;3819:34;;;;3869:18;;;3862:34;;;;3912:18;;;3905:34;;;;3976:15;;;3955:19;;;3948:44;4008:19;;;4001:35;;;;3687:19;;40746:251:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40746:251:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;40746:251:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;40742:393;;41058:3;;;;;;;;;-1:-1:-1::0;;;;;41058:3:0::1;-1:-1:-1::0;;;;;41058:16:0::1;;41083:9;41058:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;41118:5:0::1;::::0;40547:595;-1:-1:-1;;40547:595:0:o;40742:393::-:1;-1:-1:-1::0;41020:4:0::1;::::0;40547:595;-1:-1:-1;;;;40547:595:0:o;46637:183::-;17489:13;:11;:13::i;:::-;46711:3:::1;:36:::0;;;::::1;-1:-1:-1::0;;;;;46711:36:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;46798:6:0;:13:::1;::::0;;;;;;;46772:40:::1;::::0;46798:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46772:11;:40::i;:::-;46758:11;:54:::0;;;::::1;-1:-1:-1::0;;;;;46758:54:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;46637:183:0:o;18251:103::-;17489:13;:11;:13::i;:::-;18316:30:::1;18343:1;18316:18;:30::i;:::-;18251:103::o:0;46242:275::-;32691:3;;46294:7;;-1:-1:-1;;;;;32691:3:0;32669:10;:26;32661:93;;;;;;;2285:2:1;32661:93:0;;;2267:21:1;2324:2;2304:18;;;2297:30;2363:34;2343:18;;;2336:62;2434:24;2414:18;;;2407:52;2476:19;;32661:93:0;2083:418:1;32661:93:0;46329:6:::1;::::0;:13:::1;::::0;;;;;;;46314:12:::1;::::0;-1:-1:-1;;;;;46329:6:0::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46397:11;::::0;;46374:35:::1;::::0;-1:-1:-1;;;46374:35:0;;-1:-1:-1;;;;;46397:11:0;;::::1;46374:35:::0;;::::1;160:74:1::0;;;;46314:28:0;;-1:-1:-1;46353:18:0::1;::::0;46374:22;::::1;::::0;::::1;::::0;133:18:1;;46374:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46353:56:::0;-1:-1:-1;46428:15:0;;46427:82:::1;;46456:3;::::0;46470:11:::1;::::0;;46456:26:::1;::::0;-1:-1:-1;;;46456:26:0;;-1:-1:-1;;;;;46470:11:0;;::::1;46456:26:::0;;::::1;160:74:1::0;;;;46456:53:0::1;::::0;31980:8:::1;::::0;46498:10;;46456:3;;::::1;::::0;:13:::1;::::0;133:18:1;;46456:26:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33:::0;:53;:33:::1;:53::i;:::-;46427:82;;;31980:8;46427:82;46420:89;;;;32765:1;46242:275:::0;:::o;41150:1204::-;41261:4;33095:18;;;;;;;33090:134;;33130:18;:25;;;;;;;;32691:3:::1;::::0;32669:10:::1;-1:-1:-1::0;;;;;32691:3:0;;::::1;32669:26;32661:93;;;::::0;::::1;::::0;;2285:2:1;32661:93:0::1;::::0;::::1;2267:21:1::0;2324:2;2304:18;;;2297:30;2363:34;2343:18;;;2336:62;2434:24;2414:18;;;2407:52;2476:19;;32661:93:0::1;2083:418:1::0;32661:93:0::1;32977:10:::2;:17:::0;;;::::2;::::0;::::2;::::0;;32990:4:::2;41293:6:::0;:13:::3;::::0;;;;;;;-1:-1:-1;;;;;41293:6:0;;::::3;::::0;:11:::3;::::0;:13:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;;:6;:13:::3;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41334:7;::::0;41358:3:::3;::::0;41334:35:::3;::::0;;;;-1:-1:-1;;;;;41358:3:0;;::::3;41334:35;::::0;::::3;5038:34:1::0;5108:15;;;5088:18;;;5081:43;41278:28:0;;-1:-1:-1;41319:12:0::3;::::0;41334:7;::::3;::::0;:15:::3;::::0;4950:18:1;;41334:35:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41319:50;;41380:29;41412:3;;;;;;;;;-1:-1:-1::0;;;;;41412:3:0::3;-1:-1:-1::0;;;;;41412:15:0::3;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41472:28;::::0;-1:-1:-1;;;41472:28:0;;-1:-1:-1;;;;;178:55:1;;;41472:28:0::3;::::0;::::3;160:74:1::0;41380:49:0;;-1:-1:-1;41440:29:0::3;::::0;41472:22;::::3;::::0;::::3;::::0;133:18:1;;41472:28:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41540:3;::::0;:27:::3;::::0;-1:-1:-1;;;41540:27:0;;-1:-1:-1;;;;;41540:3:0;;::::3;:27;::::0;::::3;160:74:1::0;;;41440:60:0;;-1:-1:-1;41511:26:0::3;::::0;41540:3;:13:::3;::::0;133:18:1;;41540:27:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41607:3;::::0;:19:::3;::::0;-1:-1:-1;;;41607:19:0;;-1:-1:-1;;;;;178:55:1;;;41607:19:0::3;::::0;::::3;160:74:1::0;41511:56:0;;-1:-1:-1;41578:26:0::3;::::0;41607:3;;::::3;::::0;:13:::3;::::0;133:18:1;;41607:19:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41578:48:::0;-1:-1:-1;41643:26:0;;;:56:::3;;-1:-1:-1::0;41673:26:0;;41643:56:::3;41639:101;;;41723:5;41716:12;;;;;;;;;;41639:101;41752:20;41775:56;:18:::0;31980:8:::3;41809:21:::0;41775:25:::3;:56::i;:::-;41752:79:::0;-1:-1:-1;41842:20:0::3;41865:56;:18:::0;31980:8:::3;41899:21:::0;41865:25:::3;:56::i;:::-;41842:79:::0;-1:-1:-1;41938:17:0;;;:38:::3;;-1:-1:-1::0;41959:17:0;;41938:38:::3;41934:83;;;42000:5;41993:12;;;;;;;;;;;;41934:83;42029:27;42075:12;42060;:27;42059:213;;32038:3;42196:58;42233:6;42241:12:::0;42197:27:::3;42212:12:::0;42241;42197:27:::3;:::i;42196:58::-;:76;;42059:213;;;32038:3;42104:58;42141:6;42149:12:::0;42105:27:::3;42120:12:::0;42149;42105:27:::3;:::i;42104:58::-;:76;;42059:213;42029:243;;42293:22;:52;;42340:5;42293:52;;;42318:19;:17;:19::i;:::-;42285:61;;;;;;;;;;;33005:1;33030:5:::2;33017:18:::0;;33186:26;;;;41150:1204;:::o;18509:201::-;17489:13;:11;:13::i;:::-;-1:-1:-1;;;;;18598:22:0;::::1;18590:73;;;::::0;::::1;::::0;;5467:2:1;18590:73:0::1;::::0;::::1;5449:21:1::0;5506:2;5486:18;;;5479:30;5545:34;5525:18;;;5518:62;5616:8;5596:18;;;5589:36;5642:19;;18590:73:0::1;5265:402:1::0;18590:73:0::1;18674:28;18693:8;18674:18;:28::i;:::-;18509:201:::0;:::o;35306:2802::-;35402:11;;-1:-1:-1;;;;;35402:11:0;35388:10;:25;35384:2717;;;-1:-1:-1;;;;;35434:23:0;;35452:4;35434:23;35430:2584;;;35549:21;;35598:36;;;;35609:4;35598:36;:::i;:::-;35682:3;;35548:86;;-1:-1:-1;35548:86:0;-1:-1:-1;;;;;;35657:29:0;;;35682:3;;35657:29;35653:2346;;;35764:3;;:24;;;;;;;;2047:25:1;;;-1:-1:-1;;;;;35764:3:0;;;;:8;;2020:18:1;;35764:24:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;35764:24:0;;;;;;;;-1:-1:-1;;35764:24:0;;;;;;;;;;;;:::i;:::-;;;35760:774;;-1:-1:-1;;36472:5:0;36455:22;;;;;;-1:-1:-1;;;35306:2802:0:o;35760:774::-;-1:-1:-1;35840:16:0;;;35854:1;35840:16;;;;;;;;35816:21;;35840:16;;;;;;;;-1:-1:-1;;35893:6:0;;:13;;;;;;;;35816:40;;-1:-1:-1;;;;;;35893:6:0;;;;:11;;-1:-1:-1;35893:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35883:4;35888:1;35883:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35883:23:0;;;:7;;;;;;;;;:23;35951:3;;35933:7;;35951:3;;;35933:4;;35951:3;;35933:7;;;;;;:::i;:::-;-1:-1:-1;;;;;35933:22:0;;;:7;;;;;;;;;:22;36016:6;;:41;;;;;35982:31;;36016:6;;;;;:19;;:41;;36036:14;;36052:4;;36016:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36016:41:0;;;;;;;;;;;;:::i;:::-;35982:75;;36090:4;36095:1;36090:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;36084:22:0;;36115:14;36130:1;36115:17;;;;;;;;:::i;:::-;;;;;;;36084:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36223:4;36228:1;36223:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;36216:24:0;;36241:10;36253:14;36268:1;36253:17;;;;;;;;:::i;:::-;;;;;;;36216:55;;;;;;;;;;;;;;;-1:-1:-1;;;;;2698:55:1;;;;2680:74;;2785:2;2770:18;;2763:34;2668:2;2653:18;;2506:297;36216:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36298:3;;;;;;;;;-1:-1:-1;;;;;36298:3:0;-1:-1:-1;;;;;36298:17:0;;36324:21;36298:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36376:14:0;:21;;;;;;;;-1:-1:-1;35653:2346:0;;-1:-1:-1;;;;35653:2346:0;;36646:6;;:13;;;;;;;;36631:12;;-1:-1:-1;;;;;36646:6:0;;:11;;:13;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36682:36;;;;;;;;2047:25:1;;;36631:28:0;;-1:-1:-1;;;;;;36682:20:0;;;;;2020:18:1;;36682:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36745:3;;;;;;;;;-1:-1:-1;;;;;36745:3:0;-1:-1:-1;;;;;36745:7:0;;36761:14;36745:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36745:34:0;;;;;;;;-1:-1:-1;;36745:34:0;;;;;;;;;;;;:::i;:::-;;;36741:1239;;-1:-1:-1;;37918:5:0;37901:22;;;;;;-1:-1:-1;;;;35306:2802:0:o;36741:1239::-;-1:-1:-1;36831:16:0;;;36845:1;36831:16;;;;;;;;36807:21;;36831:16;;;;;;;;-1:-1:-1;;36892:3:0;;36874:7;;;;-1:-1:-1;;;;;;36892:3:0;;36874:7;;-1:-1:-1;36892:3:0;;36874:7;;;;:::i;:::-;;;;;;:22;-1:-1:-1;;;;;36874:22:0;;;-1:-1:-1;;;;;36874:22:0;;;;;36933:4;36923;36928:1;36923:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36923:14:0;;;:7;;;;;;;;;:14;36998:6;;:41;;;;;36964:31;;36998:6;;;;;:19;;:41;;37018:14;;37034:4;;36998:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36998:41:0;;;;;;;;;;;;:::i;:::-;36964:75;;37126:4;37131:1;37126:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;37119:24:0;;37144:10;37156:14;37171:1;37156:17;;;;;;;;:::i;:::-;;;;;;;37119:55;;;;;;;;;;;;;;;-1:-1:-1;;;;;2698:55:1;;;;2680:74;;2785:2;2770:18;;2763:34;2668:2;2653:18;;2506:297;37119:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37205:3;;;;;;;;;-1:-1:-1;;;;;37205:3:0;-1:-1:-1;;;;;37205:16:0;;37230:21;37205:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37205:50:0;;;;;;;;-1:-1:-1;;37205:50:0;;;;;;;;;;;;:::i;:::-;;;37201:643;;-1:-1:-1;;37774:5:0;37757:22;;;;;;-1:-1:-1;;;;;;35306:2802:0:o;37201:643::-;-1:-1:-1;37341:3:0;;37350:28;;-1:-1:-1;;;37350:28:0;;37372:4;37350:28;;;160:74:1;-1:-1:-1;;;;;37341:3:0;;;;:8;;:3;;37350:13;;133:18:1;;37350:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37341:38;;;;;;;;;;;;;2047:25:1;;2035:2;2020:18;;1901:177;37341:38:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37341:38:0;;;;;;;;-1:-1:-1;;37341:38:0;;;;;;;;;;;;:::i;:::-;;;37337:354;;-1:-1:-1;;37613:5:0;37596:22;;;;;;-1:-1:-1;;;;;;35306:2802:0:o;37337:354::-;;37415:3;;;;;;;;;-1:-1:-1;;;;;37415:3:0;-1:-1:-1;;;;;37415:17:0;;37441:21;37415:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37501:14:0;:21;;;;;;;;-1:-1:-1;;;36780:1087:0;;36559:1440;35459:2555;;35430:2584;35306:2802;;;:::o;35384:2717::-;-1:-1:-1;;38063:5:0;38046:22;;;;;;-1:-1:-1;35306:2802:0:o;17768:132::-;17649:7;17676:6;-1:-1:-1;;;;;17676:6:0;16392:10;17832:23;17824:68;;;;;;;8506:2:1;17824:68:0;;;8488:21:1;;;8525:18;;;8518:30;8584:34;8564:18;;;8557:62;8636:18;;17824:68:0;8304:356:1;38116:432:0;38221:7;;:33;;;;;-1:-1:-1;;;;;5056:15:1;;;38221:33:0;;;5038:34:1;5108:15;;;5088:18;;;5081:43;38189:12:0;;38221:7;;:15;;4950:18:1;;38221:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38214:40;-1:-1:-1;;;;;;38269:18:0;;;:43;;;;-1:-1:-1;;;;;;38291:21:0;;;;38269:43;:68;;;;-1:-1:-1;;;;;;38316:21:0;;;;38269:68;38265:254;;;38358:7;;:36;;;;;-1:-1:-1;;;;;5056:15:1;;;38358:36:0;;;5038:34:1;5108:15;;;5088:18;;;5081:43;38358:7:0;;;;:18;;4950::1;;38358:36:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;38358:36:0;;;;;;;;-1:-1:-1;;38358:36:0;;;;;;;;;;;;:::i;:::-;;;38354:154;;38484:8;;;38354:154;38441:1;-1:-1:-1;38354:154:0;38116:432;;;;:::o;18870:191::-;18944:16;18963:6;;-1:-1:-1;;;;;18980:17:0;;;;;;;;;;19013:40;;18963:6;;;;;;;19013:40;;18944:16;19013:40;18933:128;18870:191;:::o;1722:4005::-;1838:14;;;2386:6;2383:1;2380;2373:20;2427:1;2424;2420:9;2411:18;;2483:5;2479:2;2476:13;2468:5;2464:2;2460:14;2456:34;2447:43;;;2589:5;2598:1;2589:10;2585:77;;;2635:11;2627:5;:19;;;;;:::i;:::-;;2620:26;;;;;;2585:77;2789:5;2775:11;:19;2767:28;;;;;;3058:17;3196:11;3193:1;3190;3183:25;3740:12;;3755:1;3740:16;;;3725:32;;3863:22;;;;;3361:21;;;3964:16;;;3313:20;;;;3302:32;;;3710:12;4114;;;4110:23;;;;4106:31;;;4230:12;;;;4221:21;;;;4584:1;:15;;4603:1;4583:21;;;4840;;;4836:25;;4825:36;4910:21;;;4906:25;;4895:36;4981:21;;;4977:25;;4966:36;5052:21;;;5048:25;;5037:36;5123:21;;;5119:25;;5108:36;5195:21;;;5191:25;;;5180:36;5665:15;;-1:-1:-1;;1722:4005:0;;;;;;:::o;42362:3453::-;42409:12;42434;42449:6;;;;;;;;;-1:-1:-1;;;;;42449:6:0;-1:-1:-1;;;;;42449:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42504:16;;;42518:1;42504:16;;;;;;;;42434:28;;-1:-1:-1;42475:26:0;;42504:16;;;;;;;;;;;;-1:-1:-1;42504:16:0;42475:45;;42546:4;42531:9;42541:1;42531:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42531:19:0;;;:12;;;;;;;;;:19;42584:3;;42561:12;;42584:3;;;42561:9;;42584:3;;42561:12;;;;;;:::i;:::-;-1:-1:-1;;;;;42561:27:0;;;;:12;;;;;;;;;;:27;42628:16;;;42642:1;42628:16;;;;;;;;42599:26;;42628:16;;42642:1;;42628:16;;;;;;;-1:-1:-1;;42678:3:0;;42655:12;;;;-1:-1:-1;;;;;;42678:3:0;;42655:12;;-1:-1:-1;42678:3:0;;42655:12;;;;:::i;:::-;;;;;;:27;-1:-1:-1;;;;;42655:27:0;;;-1:-1:-1;;;;;42655:27:0;;;;;42708:4;42693:9;42703:1;42693:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42693:19:0;;;:12;;;;;;;;;:19;42823:7;;42847:3;;42823:35;;;;;42847:3;;;42823:35;;;5038:34:1;5108:15;;;5088:18;;;5081:43;42725:34:0;;42770:25;;;;42823:7;;;:15;;4950:18:1;;42823:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42808:50;;42869:29;42901:3;;;;;;;;;-1:-1:-1;;;;;42901:3:0;-1:-1:-1;;;;;42901:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42961:28;;-1:-1:-1;;;42961:28:0;;-1:-1:-1;;;;;178:55:1;;;42961:28:0;;;160:74:1;42869:49:0;;-1:-1:-1;42929:29:0;;42961:22;;;;;133:18:1;;42961:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43029:3;;:27;;-1:-1:-1;;;43029:27:0;;-1:-1:-1;;;;;43029:3:0;;;:27;;;160:74:1;;;42929:60:0;;-1:-1:-1;43000:26:0;;43029:3;:13;;133:18:1;;43029:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43096:3;;:19;;-1:-1:-1;;;43096:19:0;;-1:-1:-1;;;;;178:55:1;;;43096:19:0;;;160:74:1;43000:56:0;;-1:-1:-1;43067:26:0;;43096:3;;;;:13;;133:18:1;;43096:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43067:48;;43412:9;43407:2376;43431:17;43427:1;:21;43407:2376;;;43490:6;;-1:-1:-1;;;;;43490:6:0;:20;43511:10;43522:1;43511:13;;;;;;;:::i;:::-;;;43526:9;43490:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43490:46:0;;;;;;;;;;;;:::i;:::-;43571:3;;43593:20;;43470:66;;-1:-1:-1;;;;;;43571:3:0;;:21;;43470:66;;43571:3;;43593:20;;;;;;:::i;:::-;;;;;;;43571:43;;;;;;;;;;;;;2047:25:1;;2035:2;2020:18;;1901:177;43571:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43551:63;;43629:20;43652:28;43666:10;43677:1;43666:13;;;;;;;:::i;:::-;;;43652;:28::i;:::-;43629:51;;43720:12;43699:17;:33;43695:2077;;43773:3;;-1:-1:-1;;;;;43773:3:0;:22;43796:10;43807:1;43796:13;;;;;;;:::i;:::-;;;43773:37;;;;;;;;;;;;;2047:25:1;;2035:2;2020:18;;1901:177;43773:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43849:6;;:50;;;;;43753:57;;-1:-1:-1;;;;;;43849:6:0;;:20;;:50;;43753:57;;43889:9;;43849:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43849:50:0;;;;;;;;;;;;:::i;:::-;43829:70;;43945:12;43922:17;43940:1;43922:20;;;;;;;;:::i;:::-;;;;;;;:35;43918:966;;;44117:17;44135:1;44117:20;;;;;;;;:::i;:::-;;;;;;;44092:21;:45;;:88;;;;;44163:17;44141:18;:39;;44092:88;44088:777;;;44221:49;44209:61;;;;;;44302:18;44297:442;;44363:42;44385:4;44391:10;44402:1;44391:13;;;;;;;:::i;44363:42::-;44353:52;;44441:7;44436:146;;44495:55;44517:10;44528:1;44517:13;;;;;;;:::i;:::-;;;44532:17;44495:21;:55::i;:::-;44485:65;;44436:146;44297:442;;;44656:55;44678:10;44689:1;44678:13;;;;;;;:::i;44656:55::-;44646:65;;44297:442;44769:7;44765:77;;;44809:5;;;44765:77;43695:2077;;;45055:17;45030:21;:42;;:88;;;;;45098:17;45116:1;45098:20;;;;;;;;:::i;:::-;;;;;;;45076:18;:42;;45030:88;45026:731;;;45143:9;:61;;;;;;;;45232:18;45227:420;;45289:42;45311:4;45317:10;45328:1;45317:13;;;;;;;:::i;45289:42::-;45279:52;;45363:7;45358:141;;45413:58;45435:10;45446:1;45435:13;;;;;;;:::i;:::-;;;45450:17;45468:1;45450:20;;;;;;;;:::i;:::-;;;;;;;45413:21;:58::i;:::-;45403:68;;45358:141;45227:420;;;45565:58;45587:10;45598:1;45587:13;;;;;;;:::i;45565:58::-;45555:68;;45227:420;45673:7;45669:69;;;45709:5;;;45669:69;-1:-1:-1;43450:3:0;;;;:::i;:::-;;;;43407:2376;;;;45793:14;;;;;;;;;;42362:3453;:::o;33742:140::-;33807:7;33843:31;:6;32085:3;33867:6;33843:13;:31::i;:::-;33834:40;;:6;:40;:::i;34023:1153::-;34109:4;34126:12;34141:6;;;;;;;;;-1:-1:-1;;;;;34141:6:0;-1:-1:-1;;;;;34141:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34182:5;34165:22;;;;;;34235:11;;34126:28;;-1:-1:-1;;;;;;34235:11:0;34165:22;34262:9;;;;;;;:62;;;;;;;;:::i;:::-;;34258:911;;;34341:18;34378:4;-1:-1:-1;;;;;34378:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34370:3;;-1:-1:-1;;;;;34370:3:0;;;34362:29;;;:45;;34406:1;34362:45;;;34394:9;34362:45;34341:66;;34422:18;34459:4;-1:-1:-1;;;;;34459:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34451:3;;-1:-1:-1;;;;;34451:3:0;;;34443:29;;;:45;;34487:1;34443:45;;;34475:9;34443:45;34581:3;;34562:35;;;-1:-1:-1;;;;;34581:3:0;;;34562:35;;;2680:74:1;2770:18;;;2763:34;;;34422:66:0;;-1:-1:-1;34507:9:0;;;;;34517:10;;34422:66;;34549:4;;2653:18:1;;34562:35:0;;;;;;;;;;;;;34507:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34503:216;;-1:-1:-1;;34689:14:0;;;;;;;;-1:-1:-1;34682:21:0;;-1:-1:-1;;34682:21:0;34503:216;-1:-1:-1;;34626:14:0;;;;;;;;-1:-1:-1;34619:21:0;;-1:-1:-1;;34619:21:0;34258:911;34807:18;34836:4;-1:-1:-1;;;;;34836:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34828:21:0;:4;-1:-1:-1;;;;;34828:21:0;;:36;;34863:1;34828:36;;;34852:8;34828:36;34807:57;;34879:18;34908:4;-1:-1:-1;;;;;34908:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34900:21:0;:4;-1:-1:-1;;;;;34900:21:0;;:36;;34935:1;34900:36;;;34924:8;34900:36;34879:57;;34955:4;-1:-1:-1;;;;;34955:9:0;;34965:10;34977;34997:4;35021;35027:8;35010:26;;;;;;;;-1:-1:-1;;;;;2698:55:1;;;;2680:74;;2785:2;2770:18;;2763:34;2668:2;2653:18;;2506:297;245:154;-1:-1:-1;;;;;324:5:1;320:54;313:5;310:65;300:93;;389:1;386;379:12;404:863;501:6;509;517;525;533;586:3;574:9;565:7;561:23;557:33;554:53;;;603:1;600;593:12;554:53;642:9;629:23;661:31;686:5;661:31;:::i;:::-;711:5;-1:-1:-1;763:2:1;748:18;;735:32;;-1:-1:-1;814:2:1;799:18;;786:32;;-1:-1:-1;869:2:1;854:18;;841:32;892:18;922:14;;;919:34;;;949:1;946;939:12;919:34;987:6;976:9;972:22;962:32;;1032:7;1025:4;1021:2;1017:13;1013:27;1003:55;;1054:1;1051;1044:12;1003:55;1094:2;1081:16;1120:2;1112:6;1109:14;1106:34;;;1136:1;1133;1126:12;1106:34;1181:7;1176:2;1167:6;1163:2;1159:15;1155:24;1152:37;1149:57;;;1202:1;1199;1192:12;1149:57;404:863;;;;-1:-1:-1;404:863:1;;-1:-1:-1;1233:2:1;1225:11;;1255:6;404:863;-1:-1:-1;;;404:863:1:o;1272:180::-;1331:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:52;;;1400:1;1397;1390:12;1352:52;-1:-1:-1;1423:23:1;;1272:180;-1:-1:-1;1272:180:1:o;1649:247::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;1816:9;1803:23;1835:31;1860:5;1835:31;:::i;2808:277::-;2875:6;2928:2;2916:9;2907:7;2903:23;2899:32;2896:52;;;2944:1;2941;2934:12;2896:52;2976:9;2970:16;3029:5;3022:13;3015:21;3008:5;3005:32;2995:60;;3051:1;3048;3041:12;3090:184;3142:77;3139:1;3132:88;3239:4;3236:1;3229:15;3263:4;3260:1;3253:15;3279:128;3319:3;3350:1;3346:6;3343:1;3340:13;3337:39;;;3356:18;;:::i;:::-;-1:-1:-1;3392:9:1;;3279:128::o;4047:306::-;4135:6;4143;4151;4204:2;4192:9;4183:7;4179:23;4175:32;4172:52;;;4220:1;4217;4210:12;4172:52;4249:9;4243:16;4233:26;;4299:2;4288:9;4284:18;4278:25;4268:35;;4343:2;4332:9;4328:18;4322:25;4312:35;;4047:306;;;;;:::o;4358:251::-;4428:6;4481:2;4469:9;4460:7;4456:23;4452:32;4449:52;;;4497:1;4494;4487:12;4449:52;4529:9;4523:16;4548:31;4573:5;4548:31;:::i;4614:184::-;4684:6;4737:2;4725:9;4716:7;4712:23;4708:32;4705:52;;;4753:1;4750;4743:12;4705:52;-1:-1:-1;4776:16:1;;4614:184;-1:-1:-1;4614:184:1:o;5135:125::-;5175:4;5203:1;5200;5197:8;5194:34;;;5208:18;;:::i;:::-;-1:-1:-1;5245:9:1;;5135:125::o;5672:323::-;5748:6;5756;5809:2;5797:9;5788:7;5784:23;5780:32;5777:52;;;5825:1;5822;5815:12;5777:52;5864:9;5851:23;5883:31;5908:5;5883:31;:::i;:::-;5933:5;5985:2;5970:18;;;;5957:32;;-1:-1:-1;;;5672:323:1:o;6000:184::-;6052:77;6049:1;6042:88;6149:4;6146:1;6139:15;6173:4;6170:1;6163:15;6189:184;6241:77;6238:1;6231:88;6338:4;6335:1;6328:15;6362:4;6359:1;6352:15;6378:752;6548:4;6596:2;6585:9;6581:18;6626:6;6615:9;6608:25;6652:2;6690;6685;6674:9;6670:18;6663:30;6713:6;6748;6742:13;6779:6;6771;6764:22;6817:2;6806:9;6802:18;6795:25;;6855:2;6847:6;6843:15;6829:29;;6876:1;6886:218;6900:6;6897:1;6894:13;6886:218;;;6965:13;;-1:-1:-1;;;;;6961:62:1;6949:75;;7079:15;;;;7044:12;;;;6922:1;6915:9;6886:218;;;-1:-1:-1;7121:3:1;;6378:752;-1:-1:-1;;;;;;;6378:752:1:o;7135:1164::-;7230:6;7261:2;7304;7292:9;7283:7;7279:23;7275:32;7272:52;;;7320:1;7317;7310:12;7272:52;7353:9;7347:16;7382:18;7423:2;7415:6;7412:14;7409:34;;;7439:1;7436;7429:12;7409:34;7477:6;7466:9;7462:22;7452:32;;7522:7;7515:4;7511:2;7507:13;7503:27;7493:55;;7544:1;7541;7534:12;7493:55;7573:2;7567:9;7595:2;7591;7588:10;7585:36;;;7601:18;;:::i;:::-;7647:2;7644:1;7640:10;7679:2;7673:9;-1:-1:-1;;7733:2:1;7729;7725:11;7721:84;7713:6;7709:97;7856:6;7844:10;7841:22;7836:2;7824:10;7821:18;7818:46;7815:72;;;7867:18;;:::i;:::-;7903:2;7896:22;7953:18;;;7987:15;;;;-1:-1:-1;8029:11:1;;;8025:20;;;8057:19;;;8054:39;;;8089:1;8086;8079:12;8054:39;8113:11;;;;8133:135;8149:6;8144:3;8141:15;8133:135;;;8215:10;;8203:23;;8166:12;;;;8246;;;;8133:135;;;8287:6;7135:1164;-1:-1:-1;;;;;;;;7135:1164:1:o;8665:184::-;8717:77;8714:1;8707:88;8814:4;8811:1;8804:15;8838:4;8835:1;8828:15;8854:184;8906:77;8903:1;8896:88;9003:4;9000:1;8993:15;9027:4;9024:1;9017:15;9043:195;9082:3;9113:66;9106:5;9103:77;9100:103;;;9183:18;;:::i;:::-;-1:-1:-1;9230:1:1;9219:13;;9043:195::o;9243:921::-;9474:6;9463:9;9456:25;9437:4;9500:2;9538:6;9533:2;9522:9;9518:18;9511:34;-1:-1:-1;;;;;9585:6:1;9581:55;9576:2;9565:9;9561:18;9554:83;9673:3;9668:2;9657:9;9653:18;9646:31;9706:6;9700:13;9750:6;9744:3;9733:9;9729:19;9722:35;9775:1;9785:141;9799:6;9796:1;9793:13;9785:141;;;9895:14;;;9891:23;;9885:30;9860:17;;;9879:3;9856:27;9849:67;9814:10;;9785:141;;;9944:6;9941:1;9938:13;9935:92;;;10015:1;10009:3;10000:6;9989:9;9985:22;9981:32;9974:43;9935:92;-1:-1:-1;10079:2:1;10067:15;-1:-1:-1;;10063:88:1;10048:104;;;;10154:3;10044:114;;9243:921;-1:-1:-1;;;;;;9243:921:1:o
Swarm Source
ipfs://a245d9f530a0b33c96a8f1edf8d371bfa4d064fd60d381a4f19ca0ff16b4176c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
AVAX | 86.20% | $48.93 | 0.2105 | $10.3 | |
CELO | 7.38% | $0.803568 | 1.0967 | $0.881296 | |
MOVR | 3.40% | $15.42 | 0.0263 | $0.405948 | |
SCROLL | 1.39% | $3,977.12 | 0.00004189 | $0.166614 | |
BASE | 1.03% | $3,969.62 | 0.00003107 | $0.123356 | |
POL | 0.30% | $0.588066 | 0.061 | $0.035899 | |
BSC | 0.30% | $718.27 | 0.0000494 | $0.035481 | |
GNO | <0.01% | $1 | 0.00003726 | $0.000037 | |
ARB | <0.01% | $3,977.12 | 0.000000000000000001 | <$0.000001 |
[ 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.