ETH Price: $2,002.41 (-0.06%)

Contract

0xdE268AF47bFB3658019F3D1b6eE77EbE8BE5eE2A
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Pool Balance111918832020-11-04 16:54:011971 days ago1604508841IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0014752353.35
Set Pool Balance111918762020-11-04 16:53:171971 days ago1604508797IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0014752353.35
Set Pool Balance111918672020-11-04 16:51:501971 days ago1604508710IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0007356953.35
Deposit By Gov111918642020-11-04 16:51:161971 days ago1604508676IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0044988453.35
Emergency Withdr...111918572020-11-04 16:50:161971 days ago1604508616IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0019194753.35
Set Pool Balance111102932020-10-23 4:10:421983 days ago1603426242IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0010231237
Set Pool Balance111102912020-10-23 4:10:121983 days ago1603426212IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0015776837
Deposit By Gov111102692020-10-23 4:04:141983 days ago1603425854IN
0xdE268AF4...E8BE5eE2A
0 ETH0.005328936
Withdraw By Gov111102562020-10-23 4:01:561983 days ago1603425716IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0041941737
Set Total Balanc...111045182020-10-22 7:01:131984 days ago1603350073IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0013146748
Set Pool Balance111045052020-10-22 6:58:201984 days ago1603349900IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0013549449
Set Pool Balance111044592020-10-22 6:49:141984 days ago1603349354IN
0xdE268AF4...E8BE5eE2A
0 ETH0.002133250
Deposit By Gov111044462020-10-22 6:46:381984 days ago1603349198IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0066021148
Deposit By Gov110989912020-10-21 10:35:161985 days ago1603276516IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0062175542
Withdraw By Gov110989872020-10-21 10:34:041985 days ago1603276444IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0046480841
Set Pool Preferr...110989592020-10-21 10:28:511985 days ago1603276131IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0017893444
Set Pool Preferr...110849772020-10-19 7:04:221987 days ago1603091062IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0013013432
Set Pool Preferr...110791712020-10-18 9:48:501988 days ago1603014530IN
0xdE268AF4...E8BE5eE2A
0 ETH0.000942221
Set Total Balanc...110791712020-10-18 9:48:501988 days ago1603014530IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0005754221
Set Pool Balance110791712020-10-18 9:48:501988 days ago1603014530IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0005804421
Set Pool Balance110791462020-10-18 9:41:231988 days ago1603014083IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0008831420.7
Deposit By Gov110791372020-10-18 9:39:581988 days ago1603013998IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0031861421
Deposit By Gov110791102020-10-18 9:34:491988 days ago1603013689IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0034059921
Withdraw By Gov110791032020-10-18 9:33:361988 days ago1603013616IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0062572722.627
Set Pool Info110790692020-10-18 9:24:481988 days ago1603013088IN
0xdE268AF4...E8BE5eE2A
0 ETH0.0038730319
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Univ2ETHUSDCMultiPoolStrategy

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-10-18
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IStrategyV2 {
    function approve(IERC20 _token) external;

    function approveForSpender(IERC20 _token, address spender) external;

    // Deposit tokens to a farm to yield more tokens.
    function deposit(uint256 _poolId, uint256 _amount) external;

    // Claim farming tokens
    function claim(uint256 _poolId) external;

    // The vault request to harvest the profit
    function harvest(uint256 _bankPoolId, uint256 _poolId) external;

    // Withdraw the principal from a farm.
    function withdraw(uint256 _poolId, uint256 _amount) external;

    // Set 0 to disable quota (no limit)
    function poolQuota(uint256 _poolId) external view returns (uint256);

    // Use when we want to switch between strategies
    function forwardToAnotherStrategy(address _dest, uint256 _amount) external returns (uint256);

    // Source LP token of this strategy
    function getLpToken() external view returns(address);

    // Target farming token of this strategy by vault
    function getTargetToken(uint256 _poolId) external view returns(address);

    function balanceOf(uint256 _poolId) external view returns (uint256);

    function pendingReward(uint256 _poolId) external view returns (uint256);

    // Helper function, Should never use it on-chain.
    // Return 1e18x of APY. _lpPairUsdcPrice = current lpPair price (1-wei in USDC-wei) multiple by 1e18
    function expectedAPY(uint256 _poolId, uint256 _lpPairUsdcPrice) external view returns (uint256);

    function governanceRescueToken(IERC20 _token) external returns (uint256);
}

/*
 * Here we have a list of constants. In order to get access to an address
 * managed by ValueVaultMaster, the calling contract should copy and define
 * some of these constants and use them as keys.
 * Keys themselves are immutable. Addresses can be immutable or mutable.
 *
 * Vault addresses are immutable once set, and the list may grow:
 * K_VAULT_WETH = 0;
 * K_VAULT_ETH_USDC_UNI_V2_LP = 1;
 * K_VAULT_ETH_WBTC_UNI_V2_LP = 2;
 *
 * Strategy addresses are mutable:
 * K_STRATEGY_WETH_SODA_POOL = 0;
 * K_STRATEGY_WETH_MULTI_POOL = 1;
 * K_STRATEGY_ETHUSDC_MULTIPOOL = 100;
 * K_STRATEGY_ETHWBTC_MULTIPOOL = 200;
 */
/*
 * ValueVaultMaster manages all the vaults and strategies of our Value Vaults system.
 */
contract ValueVaultMaster {
    address public governance;

    address public bank;
    address public minorPool;
    address public profitSharer;

    address public govToken; // VALUE
    address public yfv; // When harvesting, convert some parts to YFV for govVault
    address public usdc; // we only used USDC to estimate APY

    address public govVault; // YFV -> VALUE, vUSD, vETH and 6.7% profit from Value Vaults
    address public insuranceFund = 0xb7b2Ea8A1198368f950834875047aA7294A2bDAa; // set to Governance Multisig at start
    address public performanceReward = 0x7Be4D5A99c903C437EC77A20CB6d0688cBB73c7f; // set to deploy wallet at start

    uint256 public constant FEE_DENOMINATOR = 10000;
    uint256 public govVaultProfitShareFee = 670; // 6.7% | VIP-1 (https://yfv.finance/vip-vote/vip_1)
    uint256 public gasFee = 50; // 0.5% at start and can be set by governance decision

    uint256 public minStakeTimeToClaimVaultReward = 24 hours;

    mapping(address => bool) public isVault;
    mapping(uint256 => address) public vaultByKey;

    mapping(address => bool) public isStrategy;
    mapping(uint256 => address) public strategyByKey;
    mapping(address => uint256) public strategyQuota;

    constructor(address _govToken, address _yfv, address _usdc) public {
        govToken = _govToken;
        yfv = _yfv;
        usdc = _usdc;
        governance = tx.origin;
    }

    function setGovernance(address _governance) external {
        require(msg.sender == governance, "!governance");
        governance = _governance;
    }

    // Immutable once set.
    function setBank(address _bank) external {
        require(msg.sender == governance, "!governance");
        require(bank == address(0));
        bank = _bank;
    }

    // Mutable in case we want to upgrade the pool.
    function setMinorPool(address _minorPool) external {
        require(msg.sender == governance, "!governance");
        minorPool = _minorPool;
    }

    // Mutable in case we want to upgrade this module.
    function setProfitSharer(address _profitSharer) external {
        require(msg.sender == governance, "!governance");
        profitSharer = _profitSharer;
    }

    // Mutable, in case governance want to upgrade VALUE to new version
    function setGovToken(address _govToken) external {
        require(msg.sender == governance, "!governance");
        govToken = _govToken;
    }

    // Immutable once added, and you can always add more.
    function addVault(uint256 _key, address _vault) external {
        require(msg.sender == governance, "!governance");
        require(vaultByKey[_key] == address(0), "vault: key is taken");

        isVault[_vault] = true;
        vaultByKey[_key] = _vault;
    }

    // Mutable and removable.
    function addStrategy(uint256 _key, address _strategy) external {
        require(msg.sender == governance, "!governance");
        isStrategy[_strategy] = true;
        strategyByKey[_key] = _strategy;
    }

    // Set 0 to disable quota (no limit)
    function setStrategyQuota(address _strategy, uint256 _quota) external {
        require(msg.sender == governance, "!governance");
        strategyQuota[_strategy] = _quota;
    }

    function removeStrategy(uint256 _key) external {
        require(msg.sender == governance, "!governance");
        isStrategy[strategyByKey[_key]] = false;
        delete strategyByKey[_key];
    }

    function setGovVault(address _govVault) public {
        require(msg.sender == governance, "!governance");
        govVault = _govVault;
    }

    function setInsuranceFund(address _insuranceFund) public {
        require(msg.sender == governance, "!governance");
        insuranceFund = _insuranceFund;
    }

    function setPerformanceReward(address _performanceReward) public{
        require(msg.sender == governance, "!governance");
        performanceReward = _performanceReward;
    }

    function setGovVaultProfitShareFee(uint256 _govVaultProfitShareFee) public {
        require(msg.sender == governance, "!governance");
        govVaultProfitShareFee = _govVaultProfitShareFee;
    }

    function setGasFee(uint256 _gasFee) public {
        require(msg.sender == governance, "!governance");
        gasFee = _gasFee;
    }

    function setMinStakeTimeToClaimVaultReward(uint256 _minStakeTimeToClaimVaultReward) public {
        require(msg.sender == governance, "!governance");
        minStakeTimeToClaimVaultReward = _minStakeTimeToClaimVaultReward;
    }

    /**
     * This function allows governance to take unsupported tokens out of the contract.
     * This is in an effort to make someone whole, should they seriously mess up.
     * There is no guarantee governance will vote to return these.
     * It also allows for removal of airdropped tokens.
     */
    function governanceRecoverUnsupported(IERC20x _token, uint256 amount, address to) external {
        require(msg.sender == governance, "!governance");
        _token.transfer(to, amount);
    }
}

interface IERC20x {
    function transfer(address recipient, uint256 amount) external returns (bool);
}

interface IOneSplit {
    function getExpectedReturn(
        IERC20 fromToken,
        IERC20 destToken,
        uint256 amount,
        uint256 parts,
        uint256 flags // See constants in IOneSplit.sol
    ) external view returns(
        uint256 returnAmount,
        uint256[] memory distribution
    );
}

interface IUniswapRouter {
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
}

interface IValueLiquidPool {
    function swapExactAmountIn(address, uint, address, uint, uint) external returns (uint, uint);
    function swapExactAmountOut(address, uint, address, uint, uint) external returns (uint, uint);
    function calcInGivenOut(uint, uint, uint, uint, uint, uint) external pure returns (uint);
    function calcOutGivenIn(uint, uint, uint, uint, uint, uint) external pure returns (uint);
    function getDenormalizedWeight(address) external view returns (uint);
    function getBalance(address) external view returns (uint);
    function swapFee() external view returns (uint);
}

interface IStakingRewards {
    function lastTimeRewardApplicable() external view returns (uint256);
    function rewardPerToken() external view returns (uint256);
    function rewardRate() external view returns (uint256);
    function earned(address account) external view returns (uint256);
    function getRewardForDuration() external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);

    function stake(uint256 amount) external;
    function withdraw(uint256 amount) external;
    function getReward() external;
    function exit() external;
}

interface ISushiPool {
    function deposit(uint256 _poolId, uint256 _amount) external;
    function claim(uint256 _poolId) external;
    function withdraw(uint256 _poolId, uint256 _amount) external;
    function emergencyWithdraw(uint256 _poolId) external;
}

interface IProfitSharer {
    function shareProfit() external returns (uint256);
}

interface IValueVaultBank {
    function make_profit(uint256 _poolId, uint256 _amount) external;
}

// Deposit UNIv2ETHUSDC to a standard StakingRewards pool (eg. UNI Pool - https://app.uniswap.org/#/uni)
// Wait for Vault commands: deposit, withdraw, claim, harvest (can be called by public via Vault)
contract Univ2ETHUSDCMultiPoolStrategy is IStrategyV2 {
    using SafeMath for uint256;

    address public strategist;
    address public governance;

    uint256 public constant FEE_DENOMINATOR = 10000;

    IERC20 public weth = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    IOneSplit public onesplit = IOneSplit(0x50FDA034C0Ce7a8f7EFDAebDA7Aa7cA21CC1267e);
    IUniswapRouter public unirouter = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    ValueVaultMaster public valueVaultMaster;
    IERC20 public lpPair; // ETHUSDC_UNIv2
    IERC20 public lpPairTokenA; // USDC
    IERC20 public lpPairTokenB; // For this contract it will be always be WETH

    mapping(address => mapping(address => address[])) public uniswapPaths; // [input -> output] => uniswap_path
    mapping(address => mapping(address => address)) public liquidPools; // [input -> output] => value_liquid_pool (valueliquid.io)

    struct PoolInfo {
        address vault;
        IERC20 targetToken;
        address targetPool;
        uint256 targetPoolId; // poolId in soda/chicken pool (no use for IStakingRewards pool eg. golff.finance)
        uint256 minHarvestForTakeProfit;
        uint8 poolType; // 0: IStakingRewards, 1: ISushiPool, 2: ISodaPool
        uint256 poolQuota; // set 0 to disable quota (no limit)
        uint256 balance;
    }

    mapping(uint256 => PoolInfo) public poolMap; // poolIndex -> poolInfo
    uint256 public totalBalance;

    bool public aggressiveMode; // will try to stake all lpPair tokens available (be forwarded from bank or from another strategies)

    uint8[] public poolPreferredIds; // sorted by preference

    // lpPair: ETHUSDC_UNIv2 = 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
    // lpPairTokenA: USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
    // lpPairTokenB: WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
    constructor(ValueVaultMaster _valueVaultMaster,
                IERC20 _lpPair,
                IERC20 _lpPairTokenA,
                IERC20 _lpPairTokenB,
                bool _aggressiveMode) public {
        valueVaultMaster = _valueVaultMaster;
        lpPair = _lpPair;
        lpPairTokenA = _lpPairTokenA;
        lpPairTokenB = _lpPairTokenB;
        aggressiveMode = _aggressiveMode;
        governance = tx.origin;
        strategist = tx.origin;
        // Approve all
        lpPair.approve(valueVaultMaster.bank(), type(uint256).max);
        lpPairTokenA.approve(address(unirouter), type(uint256).max);
        lpPairTokenB.approve(address(unirouter), type(uint256).max);
    }

    // [0] targetToken: uniToken = 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984
    //     targetPool: ETHUSDCUniPool = 0x7fba4b8dc5e7616e59622806932dbea72537a56b
    // [1] targetToken: draculaToken = 0xb78B3320493a4EFaa1028130C5Ba26f0B6085Ef8
    //     targetPool: MasterVampire[32] = 0xD12d68Fd52b54908547ebC2Cd77Ec6EbbEfd3099
    //     targetPoolId = 32
    function setPoolInfo(uint256 _poolId, address _vault, IERC20 _targetToken, address _targetPool, uint256 _targetPoolId, uint256 _minHarvestForTakeProfit, uint8 _poolType, uint256 _poolQuota) external {
        require(msg.sender == governance, "!governance");
        poolMap[_poolId].vault = _vault;
        poolMap[_poolId].targetToken = _targetToken;
        poolMap[_poolId].targetPool = _targetPool;
        poolMap[_poolId].targetPoolId = _targetPoolId;
        poolMap[_poolId].minHarvestForTakeProfit = _minHarvestForTakeProfit;
        poolMap[_poolId].poolType = _poolType;
        poolMap[_poolId].poolQuota = _poolQuota;
        _targetToken.approve(address(unirouter), type(uint256).max);
        lpPair.approve(_vault, type(uint256).max);
        lpPair.approve(address(_targetPool), type(uint256).max);
    }

    function approve(IERC20 _token) external override {
        require(msg.sender == governance, "!governance");
        _token.approve(valueVaultMaster.bank(), type(uint256).max);
        _token.approve(address(unirouter), type(uint256).max);
    }

    function approveForSpender(IERC20 _token, address spender) external override {
        require(msg.sender == governance, "!governance");
        _token.approve(spender, type(uint256).max);
    }

    function setGovernance(address _governance) external {
        require(msg.sender == governance, "!governance");
        governance = _governance;
    }

    function setStrategist(address _strategist) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        strategist = _strategist;
    }

    function setPoolPreferredIds(uint8[] memory _poolPreferredIds) public {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        delete poolPreferredIds;
        for (uint8 i = 0; i < _poolPreferredIds.length; ++i) {
            poolPreferredIds.push(_poolPreferredIds[i]);
        }
    }

    function setMinHarvestForTakeProfit(uint256 _poolId, uint256 _minHarvestForTakeProfit) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        poolMap[_poolId].minHarvestForTakeProfit = _minHarvestForTakeProfit;
    }

    function setPoolQuota(uint256 _poolId, uint256 _poolQuota) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        poolMap[_poolId].poolQuota = _poolQuota;
    }

    // Sometime the balance could be slightly changed (due to the pool, or because we call xxxByGov methods)
    function setPoolBalance(uint256 _poolId, uint256 _balance) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        poolMap[_poolId].balance = _balance;
    }

    function setTotalBalance(uint256 _totalBalance) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        totalBalance = _totalBalance;
    }

    function setAggressiveMode(bool _aggressiveMode) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        aggressiveMode = _aggressiveMode;
    }

    function setWETH(IERC20 _weth) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        weth = _weth;
    }

    function setOnesplit(IOneSplit _onesplit) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        onesplit = _onesplit;
    }

    function setUnirouter(IUniswapRouter _unirouter) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        unirouter = _unirouter;
        lpPairTokenA.approve(address(unirouter), type(uint256).max);
        lpPairTokenB.approve(address(unirouter), type(uint256).max);
    }

    /**
     * @dev See {IStrategyV2-deposit}.
     */
    function deposit(uint256 _poolId, uint256 _amount) public override {
        PoolInfo storage pool = poolMap[_poolId];
        require(pool.vault == msg.sender, "sender not vault");
        if (aggressiveMode) {
            _amount = lpPair.balanceOf(address(this));
        }
        if (pool.poolType == 0) {
            IStakingRewards(pool.targetPool).stake(_amount);
        } else {
            ISushiPool(pool.targetPool).deposit(pool.targetPoolId, _amount);
        }
        pool.balance = pool.balance.add(_amount);
        totalBalance = totalBalance.add(_amount);
    }

    /**
     * @dev See {IStrategyV2-claim}.
     */
    function claim(uint256 _poolId) external override {
        require(poolMap[_poolId].vault == msg.sender, "sender not vault");
        _claim(_poolId);

    }

    function _claim(uint256 _poolId) internal {
        PoolInfo storage pool = poolMap[_poolId];
        if (pool.poolType == 0) {
            IStakingRewards(pool.targetPool).getReward();
        } else if (pool.poolType == 1) {
            ISushiPool(pool.targetPool).deposit(pool.targetPoolId, 0);
        } else {
            ISushiPool(pool.targetPool).claim(pool.targetPoolId);
        }
    }

    /**
     * @dev See {IStrategyV2-withdraw}.
     */
    function withdraw(uint256 _poolId, uint256 _amount) external override {
        PoolInfo storage pool = poolMap[_poolId];
        require(pool.vault == msg.sender, "sender not vault");
        if (pool.poolType == 0) {
            IStakingRewards(pool.targetPool).withdraw(_amount);
        } else {
            ISushiPool(pool.targetPool).withdraw(pool.targetPoolId, _amount);
        }
        if (pool.balance < _amount) {
            _amount = pool.balance;
        }
        pool.balance = pool.balance - _amount;
        if (totalBalance >= _amount) totalBalance = totalBalance - _amount;
    }

    function depositByGov(address pool, uint8 _poolType, uint256 _targetPoolId, uint256 _amount) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        if (_poolType == 0) {
            IStakingRewards(pool).stake(_amount);
        } else {
            ISushiPool(pool).deposit(_targetPoolId, _amount);
        }
    }

    function claimByGov(address pool, uint8 _poolType, uint256 _targetPoolId) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        if (_poolType == 0) {
            IStakingRewards(pool).getReward();
        } else if (_poolType == 1) {
            ISushiPool(pool).deposit(_targetPoolId, 0);
        } else {
            ISushiPool(pool).claim(_targetPoolId);
        }
    }

    function withdrawByGov(address pool, uint8 _poolType, uint256 _targetPoolId, uint256 _amount) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        if (_poolType == 0) {
            IStakingRewards(pool).withdraw(_amount);
        } else {
            ISushiPool(pool).withdraw(_targetPoolId, _amount);
        }
    }

    function emergencyWithdrawByGov(address pool, uint256 _targetPoolId) external {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        ISushiPool(pool).emergencyWithdraw(_targetPoolId);
    }

    /**
     * @dev See {IStrategyV2-poolQuota}.
     */
    function poolQuota(uint256 _poolId) external override view returns (uint256) {
        return poolMap[_poolId].poolQuota;
    }

    function forwardToAnotherStrategy(address _dest, uint256 _amount) external override returns (uint256 sent) {
        require(valueVaultMaster.isVault(msg.sender), "not vault");
        require(valueVaultMaster.isStrategy(_dest), "not strategy");
        require(IStrategyV2(_dest).getLpToken() == address(lpPair), "!lpPair");
        uint256 lpPairBal = lpPair.balanceOf(address(this));
        sent = (_amount < lpPairBal) ? _amount : lpPairBal;
        lpPair.transfer(_dest, sent);
    }

    function setUnirouterPath(address _input, address _output, address [] memory _path) public {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        uniswapPaths[_input][_output] = _path;
    }

    function setLiquidPool(address _input, address _output, address _pool) public {
        require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
        liquidPools[_input][_output] = _pool;
        IERC20(_input).approve(_pool, type(uint256).max);
    }

    function _swapTokens(address _input, address _output, uint256 _amount) internal {
        address _pool = liquidPools[_input][_output];
        if (_pool != address(0)) { // use ValueLiquid
            // swapExactAmountIn(tokenIn, tokenAmountIn, tokenOut, minAmountOut, maxPrice)
            IValueLiquidPool(_pool).swapExactAmountIn(_input, _amount, _output, 1, type(uint256).max);
        } else { // use Uniswap
            address[] memory path = uniswapPaths[_input][_output];
            if (path.length == 0) {
                // path: _input -> _output
                path = new address[](2);
                path[0] = _input;
                path[1] = _output;
            }
            // swapExactTokensForTokens(amountIn, amountOutMin, path, to, deadline)
            unirouter.swapExactTokensForTokens(_amount, 1, path, address(this), now.add(1800));
        }
    }

    function _addLiquidity() internal {
        // addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin, to, deadline)
        unirouter.addLiquidity(address(lpPairTokenA), address(lpPairTokenB), lpPairTokenA.balanceOf(address(this)), lpPairTokenB.balanceOf(address(this)), 1, 1, address(this), now.add(1800));
    }

    /**
     * @dev See {IStrategyV2-harvest}.
     */
    function harvest(uint256 _bankPoolId, uint256 _poolId) external override {
        address bank = valueVaultMaster.bank();
        address _vault = msg.sender;
        require(valueVaultMaster.isVault(_vault), "!vault"); // additional protection so we don't burn the funds

        PoolInfo storage pool = poolMap[_poolId];
        _claim(_poolId);

        IERC20 targetToken = pool.targetToken;
        uint256 targetTokenBal = targetToken.balanceOf(address(this));

        if (targetTokenBal < pool.minHarvestForTakeProfit) return;

        _swapTokens(address(targetToken), address(weth), targetTokenBal);
        uint256 wethBal = weth.balanceOf(address(this));

        if (wethBal > 0) {
            uint256 _reserved = 0;
            uint256 _gasFee = 0;
            uint256 _govVaultProfitShareFee = 0;

            if (valueVaultMaster.gasFee() > 0) {
                _gasFee = wethBal.mul(valueVaultMaster.gasFee()).div(FEE_DENOMINATOR);
                _reserved = _reserved.add(_gasFee);
            }

            if (valueVaultMaster.govVaultProfitShareFee() > 0) {
                _govVaultProfitShareFee = wethBal.mul(valueVaultMaster.govVaultProfitShareFee()).div(FEE_DENOMINATOR);
                _reserved = _reserved.add(_govVaultProfitShareFee);
            }

            uint256 wethToBuyTokenA = wethBal.sub(_reserved).div(2); // we have TokenB (WETH) already, so use 1/2 bal to buy TokenA (USDC)

            _swapTokens(address(weth), address(lpPairTokenA), wethToBuyTokenA);
            _addLiquidity();

            wethBal = weth.balanceOf(address(this));

            {
                address profitSharer = valueVaultMaster.profitSharer();
                address performanceReward = valueVaultMaster.performanceReward();

                if (_gasFee > 0 && performanceReward != address(0)) {
                    if (_gasFee.add(_govVaultProfitShareFee) < wethBal) {
                        _gasFee = wethBal.sub(_govVaultProfitShareFee);
                    }
                    weth.transfer(performanceReward, _gasFee);
                    wethBal = weth.balanceOf(address(this));
                }

                if (_govVaultProfitShareFee > 0 && profitSharer != address(0)) {
                    address govToken = valueVaultMaster.govToken();
                    _swapTokens(address(weth), govToken, wethBal);
                    IERC20(govToken).transfer(profitSharer, IERC20(govToken).balanceOf(address(this)));
                    IProfitSharer(profitSharer).shareProfit();
                }
            }

            uint256 balanceLeft = lpPair.balanceOf(address(this));
            if (balanceLeft > 0) {
                if (_bankPoolId == type(uint256).max) {
                    // this called by governance of vault, send directly to bank (dont make profit)
                    lpPair.transfer(bank, balanceLeft);
                } else {
                    if (lpPair.allowance(address(this), bank) < balanceLeft) {
                        lpPair.approve(bank, 0);
                        lpPair.approve(bank, balanceLeft);
                    }
                    IValueVaultBank(bank).make_profit(_bankPoolId, balanceLeft);
                }
            }
        }
    }

    /**
     * @dev See {IStrategyV2-getLpToken}.
     */
    function getLpToken() external view override returns(address) {
        return address(lpPair);
    }

    /**
     * @dev See {IStrategyV2-getTargetToken}.
     */
    function getTargetToken(uint256 _poolId) external override view returns(address) {
        return address(poolMap[_poolId].targetToken);
    }

    function balanceOf(uint256 _poolId) public override view returns (uint256) {
        return poolMap[_poolId].balance;
    }

    // Only support IStakingRewards pool
    function pendingReward(uint256 _poolId) public override view returns (uint256) {
        if (poolMap[_poolId].poolType != 0) return 0; // do not support other pool types
        return IStakingRewards(poolMap[_poolId].targetPool).earned(address(this));
    }

    // Helper function, Should never use it on-chain.
    // Return 1e18x of APY. _lpPairUsdcPrice = current lpPair price (1-wei in USDC-wei) multiple by 1e18
    function expectedAPY(uint256, uint256) public override view returns (uint256) {
        return 0; // not implemented
    }

    /**
     * @dev if there is any token stuck we will need governance support to rescue the fund
     */
    function governanceRescueToken(IERC20 _token) external override returns (uint256 balance) {
        address bank = valueVaultMaster.bank();
        require(bank == msg.sender, "sender not bank");

        balance = _token.balanceOf(address(this));
        _token.transfer(bank, balance);
    }

    event ExecuteTransaction(address indexed target, uint value, string signature, bytes data);

    function executeTransaction(address target, uint value, string memory signature, bytes memory data) public returns (bytes memory) {
        require(msg.sender == governance, "!governance");

        bytes memory callData;

        if (bytes(signature).length == 0) {
            callData = data;
        } else {
            callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data);
        }

        // solium-disable-next-line security/no-call-value
        (bool success, bytes memory returnData) = target.call{value: value}(callData);
        require(success, "Univ2ETHUSDCMultiPoolStrategy::executeTransaction: Transaction execution reverted.");

        emit ExecuteTransaction(target, value, signature, data);

        return returnData;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract ValueVaultMaster","name":"_valueVaultMaster","type":"address"},{"internalType":"contract IERC20","name":"_lpPair","type":"address"},{"internalType":"contract IERC20","name":"_lpPairTokenA","type":"address"},{"internalType":"contract IERC20","name":"_lpPairTokenB","type":"address"},{"internalType":"bool","name":"_aggressiveMode","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"ExecuteTransaction","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggressiveMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"approveForSpender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"}],"name":"claimByGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositByGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"}],"name":"emergencyWithdrawByGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"expectedAPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dest","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"forwardToAnotherStrategy","outputs":[{"internalType":"uint256","name":"sent","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLpToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getTargetToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"governanceRescueToken","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bankPoolId","type":"uint256"},{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPairTokenA","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPairTokenB","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onesplit","outputs":[{"internalType":"contract IOneSplit","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolMap","outputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"address","name":"targetPool","type":"address"},{"internalType":"uint256","name":"targetPoolId","type":"uint256"},{"internalType":"uint256","name":"minHarvestForTakeProfit","type":"uint256"},{"internalType":"uint8","name":"poolType","type":"uint8"},{"internalType":"uint256","name":"poolQuota","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolPreferredIds","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"poolQuota","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_aggressiveMode","type":"bool"}],"name":"setAggressiveMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_input","type":"address"},{"internalType":"address","name":"_output","type":"address"},{"internalType":"address","name":"_pool","type":"address"}],"name":"setLiquidPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_minHarvestForTakeProfit","type":"uint256"}],"name":"setMinHarvestForTakeProfit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOneSplit","name":"_onesplit","type":"address"}],"name":"setOnesplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"setPoolBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"contract IERC20","name":"_targetToken","type":"address"},{"internalType":"address","name":"_targetPool","type":"address"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"},{"internalType":"uint256","name":"_minHarvestForTakeProfit","type":"uint256"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_poolQuota","type":"uint256"}],"name":"setPoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_poolPreferredIds","type":"uint8[]"}],"name":"setPoolPreferredIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_poolQuota","type":"uint256"}],"name":"setPoolQuota","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalBalance","type":"uint256"}],"name":"setTotalBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapRouter","name":"_unirouter","type":"address"}],"name":"setUnirouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_input","type":"address"},{"internalType":"address","name":"_output","type":"address"},{"internalType":"address[]","name":"_path","type":"address[]"}],"name":"setUnirouterPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_weth","type":"address"}],"name":"setWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unirouter","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"uniswapPaths","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valueVaultMaster","outputs":[{"internalType":"contract ValueVaultMaster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawByGov","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600280546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179091556003805482167350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e17905560048054909116737a250d5630b4cf539739df2c5dacb4c659f2488d1790553480156200007757600080fd5b50604051620045d4380380620045d4833981810160405260a08110156200009d57600080fd5b5080516020808301516040808501516060860151608090960151600580546001600160a01b03199081166001600160a01b03808a1691909117928390556006805483168289161790819055600780548416838816179055600880548416838d16179055600d805460ff191686151517905560018054329085168117909155600080549094161790925585516376cdb03b60e01b8152955198999698949793959181169463095ea7b39493909116926376cdb03b9260048181019391829003018186803b1580156200016d57600080fd5b505afa15801562000182573d6000803e3d6000fd5b505050506040513d60208110156200019957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260001960248301525160448083019260209291908290030181600087803b158015620001eb57600080fd5b505af115801562000200573d6000803e3d6000fd5b505050506040513d60208110156200021757600080fd5b5050600754600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b1580156200027557600080fd5b505af11580156200028a573d6000803e3d6000fd5b505050506040513d6020811015620002a157600080fd5b5050600854600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b158015620002ff57600080fd5b505af115801562000314573d6000803e3d6000fd5b505050506040513d60208110156200032b57600080fd5b5050505050505061429280620003426000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c8063692c2f9011610182578063c7b9d530116100e9578063daea85c5116100a2578063f2faa1b91161007c578063f2faa1b914610b12578063f712adbb14610b82578063fb529b3314610b8a578063fd5ce85114610be2576102bb565b8063daea85c514610aa6578063e2bbb15814610acc578063e4a4b7b114610aef576102bb565b8063c7b9d530146109d4578063c9ed5008146109fa578063d374eb2714610a17578063d73792a914610a43578063d78683b914610a4b578063d92f3d7314610a80576102bb565b8063a06824271161013b578063a06824271461092b578063a22a33b714610951578063ab033ea91461097f578063ad7a672f146109a5578063ae511bf3146109ad578063be4ea1e4146109b5576102bb565b8063692c2f9014610886578063696513f01461088e57806372bf2ac4146108ab5780638214f5a4146108e357806389fa2b70146108eb5780639cc7f7081461090e576102bb565b80633fc8cef3116102265780635a677b7e116101df5780635a677b7e146107c45780635aa6e675146107e75780635b769f3c146107ef5780635c788211146108155780635fa6e5ef1461084357806367ad20fd14610869576102bb565b80633fc8cef31461071857806340e7e57114610720578063441a3e7014610743578063442dd5e714610766578063452ed4f114610789578063460247a614610791576102bb565b806320ffb4531161027857806320ffb453146104945780632224fa25146104cf578063257ae0de14610682578063359a3f731461068a57806335e94268146106c5578063379607f5146106fb576102bb565b806303da1b32146102c0578063115cce2b1461036357806312f7086c1461041d5780631c727de81461044c5780631fe4a686146104705780632088a7fa14610478575b600080fd5b610361600480360360208110156102d657600080fd5b810190602081018135600160201b8111156102f057600080fd5b82018360208201111561030257600080fd5b803590602001918460208302840111600160201b8311171561032357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c0e945050505050565b005b6103616004803603606081101561037957600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460208302840111600160201b831117156103df57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ce8945050505050565b61043a6004803603602081101561043357600080fd5b5035610d85565b60408051918252519081900360200190f35b610454610e31565b604080516001600160a01b039092168252519081900360200190f35b610454610e40565b610480610e4f565b604080519115158252519081900360200190f35b610361600480360360808110156104aa57600080fd5b506001600160a01b038135169060ff6020820135169060408101359060600135610e58565b61060d600480360360808110156104e557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561051457600080fd5b82018360208201111561052657600080fd5b803590602001918460018302840111600160201b8311171561054757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f91945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561064757818101518382015260200161062f565b50505050905090810190601f1680156106745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61045461127b565b610361600480360360808110156106a057600080fd5b506001600160a01b038135169060ff602082013516906040810135906060013561128a565b610454600480360360608110156106db57600080fd5b506001600160a01b03813581169160208101359091169060400135611388565b6103616004803603602081101561071157600080fd5b50356113ca565b610454611434565b6103616004803603604081101561073657600080fd5b5080359060200135611443565b6103616004803603604081101561075957600080fd5b50803590602001356114ba565b6103616004803603604081101561077c57600080fd5b508035906020013561163c565b6104546116b3565b6107ae600480360360208110156107a757600080fd5b50356116c2565b6040805160ff9092168252519081900360200190f35b61043a600480360360408110156107da57600080fd5b50803590602001356116f3565b6104546116fc565b6103616004803603602081101561080557600080fd5b50356001600160a01b031661170b565b6104546004803603604081101561082b57600080fd5b506001600160a01b038135811691602001351661178f565b6103616004803603602081101561085957600080fd5b50356001600160a01b03166117b5565b6104546004803603602081101561087f57600080fd5b5035611839565b610454611857565b61043a600480360360208110156108a457600080fd5b5035611866565b610361600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101358216916040909101351661187b565b61045461198b565b6103616004803603604081101561090157600080fd5b508035906020013561199a565b61043a6004803603602081101561092457600080fd5b5035611a11565b61043a6004803603602081101561094157600080fd5b50356001600160a01b0316611a26565b6103616004803603604081101561096757600080fd5b506001600160a01b0381358116916020013516611bef565b6103616004803603602081101561099557600080fd5b50356001600160a01b0316611cbf565b61043a611d2e565b610454611d34565b610361600480360360208110156109cb57600080fd5b50351515611d43565b610361600480360360208110156109ea57600080fd5b50356001600160a01b0316611db8565b61036160048036036020811015610a1057600080fd5b5035611e3c565b61043a60048036036040811015610a2d57600080fd5b506001600160a01b038135169060200135611ea3565b61043a6121dc565b61036160048036036060811015610a6157600080fd5b506001600160a01b038135169060ff60208201351690604001356121e2565b61036160048036036020811015610a9657600080fd5b50356001600160a01b0316612360565b61036160048036036020811015610abc57600080fd5b50356001600160a01b03166124e5565b61036160048036036040811015610ae257600080fd5b508035906020013561268e565b61036160048036036040811015610b0557600080fd5b5080359060200135612887565b610b2f60048036036020811015610b2857600080fd5b5035613501565b604080516001600160a01b03998a168152978916602089015295909716868601526060860193909352608085019190915260ff1660a084015260c083015260e08201929092529051908190036101000190f35b610454613556565b6103616004803603610100811015610ba157600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a08101359060ff60c0820135169060e00135613565565b61036160048036036040811015610bf857600080fd5b506001600160a01b0381351690602001356137b1565b6001546001600160a01b0316331480610c3157506000546001600160a01b031633145b610c70576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b610c7c600e600061410b565b60005b81518160ff161015610ce457600e828260ff1681518110610c9c57fe5b602090810291909101810151825460018181018555600094855293839020928104909201805460ff928316601f9094166101000a938402929093021990921617905501610c7f565b5050565b6001546001600160a01b0316331480610d0b57506000546001600160a01b031633145b610d4a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b03808416600090815260096020908152604080832093861683529281529190208251610d7f92840190614130565b50505050565b6000818152600b602052604081206005015460ff1615610da757506000610e2c565b6000828152600b60209081526040918290206002015482516246613160e11b815230600482015292516001600160a01b0390911692628cc262926024808301939192829003018186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6020811015610e2757600080fd5b505190505b919050565b6005546001600160a01b031681565b6000546001600160a01b031681565b600d5460ff1681565b6001546001600160a01b0316331480610e7b57506000546001600160a01b031633145b610eba576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff8316610f2557836001600160a01b031663a694fc3a826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050610d7f565b836001600160a01b031663e2bbb15883836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b5050505050505050565b6001546060906001600160a01b03163314610fe1576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6060835160001415610ff4575081611077565b83805190602001208360405160200180836001600160e01b031916815260040182805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060876001600160a01b031687846040518082805190602001908083835b602083106110b65780518252601f199092019160209182019101611097565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611118576040519150601f19603f3d011682016040523d82523d6000602084013e61111d565b606091505b50915091508161115e5760405162461bcd60e51b81526004018080602001828103825260528152602001806141ca6052913960600191505060405180910390fd5b876001600160a01b03167f88405ca50016c636e025868e263efe5a9f63bf11cc45404f7616394c7dc389d0888888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111d35781810151838201526020016111bb565b50505050905090810190601f1680156112005780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561123357818101518382015260200161121b565b50505050905090810190601f1680156112605780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2979650505050505050565b6004546001600160a01b031681565b6001546001600160a01b03163314806112ad57506000546001600160a01b031633145b6112ec576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff831661133a57836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b836001600160a01b031663441a3e7083836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b600960205282600052604060002060205281600052604060002081815481106113ad57fe5b6000918252602090912001546001600160a01b0316925083915050565b6000818152600b60205260409020546001600160a01b03163314611428576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b61143181613875565b50565b6002546001600160a01b031681565b6001546001600160a01b031633148061146657506000546001600160a01b031633145b6114a5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060040155565b6000828152600b6020526040902080546001600160a01b03163314611519576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600581015460ff1661159157600281015460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b50505050611605565b6002810154600382015460408051630441a3e760e41b8152600481019290925260248201859052516001600160a01b039092169163441a3e709160448082019260009290919082900301818387803b1580156115ec57600080fd5b505af1158015611600573d6000803e3d6000fd5b505050505b818160070154101561161957806007015491505b6007810180548390039055600c54821161163757600c805483900390555b505050565b6001546001600160a01b031633148061165f57506000546001600160a01b031633145b61169e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060070155565b6006546001600160a01b031681565b600e81815481106116cf57fe5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b60005b92915050565b6001546001600160a01b031681565b6001546001600160a01b031633148061172e57506000546001600160a01b031633145b61176d576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b03163314806117d857506000546001600160a01b031633145b611817576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600b60205260409020600101546001600160a01b031690565b6007546001600160a01b031681565b6000908152600b602052604090206006015490565b6001546001600160a01b031633148061189e57506000546001600160a01b031633145b6118dd576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b038381166000818152600a602090815260408083208786168452825280832080546001600160a01b0319169587169586179055805163095ea7b360e01b81526004810195909552600019602486015251929363095ea7b39360448083019491928390030190829087803b15801561195a57600080fd5b505af115801561196e573d6000803e3d6000fd5b505050506040513d602081101561198457600080fd5b5050505050565b6006546001600160a01b031690565b6001546001600160a01b03163314806119bd57506000546001600160a01b031633145b6119fc576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060060155565b6000908152600b602052604090206007015490565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7757600080fd5b505afa158015611a8b573d6000803e3d6000fd5b505050506040513d6020811015611aa157600080fd5b505190506001600160a01b0381163314611af4576040805162461bcd60e51b815260206004820152600f60248201526e73656e646572206e6f742062616e6b60881b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015611b3a57600080fd5b505afa158015611b4e573d6000803e3d6000fd5b505050506040513d6020811015611b6457600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905291519294509085169163a9059cbb916044808201926020929091908290030181600087803b158015611bbc57600080fd5b505af1158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b50919392505050565b6001546001600160a01b03163314611c3c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b816001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b505050506040513d6020811015610d7f57600080fd5b6001546001600160a01b03163314611d0c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b6008546001600160a01b031681565b6001546001600160a01b0316331480611d6657506000546001600160a01b031633145b611da5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6001546001600160a01b0316331480611ddb57506000546001600160a01b031633145b611e1a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480611e5f57506000546001600160a01b031633145b611e9e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600c55565b6005546040805163652b9b4160e01b815233600482015290516000926001600160a01b03169163652b9b41916024808301926020929190829003018186803b158015611eee57600080fd5b505afa158015611f02573d6000803e3d6000fd5b505050506040513d6020811015611f1857600080fd5b5051611f57576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081d985d5b1d60ba1b604482015290519081900360640190fd5b600554604080516317475d5760e11b81526001600160a01b03868116600483015291519190921691632e8ebaae916024808301926020929190829003018186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d6020811015611fce57600080fd5b5051612010576040805162461bcd60e51b815260206004820152600c60248201526b6e6f7420737472617465677960a01b604482015290519081900360640190fd5b600654604080516320853d6960e21b815290516001600160a01b0392831692861691638214f5a4916004808301926020929190829003018186803b15801561205757600080fd5b505afa15801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b50516001600160a01b0316146120c8576040805162461bcd60e51b815260206004820152600760248201526610b6382830b4b960c91b604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561211357600080fd5b505afa158015612127573d6000803e3d6000fd5b505050506040513d602081101561213d57600080fd5b5051905080831061214e5780612150565b825b6006546040805163a9059cbb60e01b81526001600160a01b03888116600483015260248201859052915193955091169163a9059cbb916044808201926020929091908290030181600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050506040513d60208110156121d257600080fd5b5091949350505050565b61271081565b6001546001600160a01b031633148061220557506000546001600160a01b031633145b612244576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff82166122a457826001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561228757600080fd5b505af115801561229b573d6000803e3d6000fd5b50505050611637565b8160ff16600114156122fd5760408051631c57762b60e31b81526004810183905260006024820181905291516001600160a01b0386169263e2bbb158926044808201939182900301818387803b15801561228757600080fd5b826001600160a01b031663379607f5826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561234357600080fd5b505af1158015612357573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633148061238357506000546001600160a01b031633145b6123c2576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03838116919091178083556007546040805163095ea7b360e01b81529284169483019490945260001960248301529251929091169163095ea7b3916044808201926020929091908290030181600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d602081101561245e57600080fd5b5050600854600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b1580156124bb57600080fd5b505af11580156124cf573d6000803e3d6000fd5b505050506040513d602081101561163757600080fd5b6001546001600160a01b03163314612532576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b806001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561258f57600080fd5b505afa1580156125a3573d6000803e3d6000fd5b505050506040513d60208110156125b957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260001960248301525160448083019260209291908290030181600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050506040513d602081101561263457600080fd5b5050600480546040805163095ea7b360e01b81526001600160a01b03928316938101939093526000196024840152519083169163095ea7b39160448083019260209291908290030181600087803b1580156124bb57600080fd5b6000828152600b6020526040902080546001600160a01b031633146126ed576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600d5460ff161561277257600654604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561274357600080fd5b505afa158015612757573d6000803e3d6000fd5b505050506040513d602081101561276d57600080fd5b505191505b600581015460ff166127ea5760028101546040805163534a7e1d60e11b81526004810185905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b5050505061285e565b6002810154600382015460408051631c57762b60e31b8152600481019290925260248201859052516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b505050505b600781015461286d90836139bc565b6007820155600c5461287f90836139bc565b600c55505050565b600554604080516376cdb03b60e01b815290516000926001600160a01b0316916376cdb03b916004808301926020929190829003018186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d60208110156128f657600080fd5b50516005546040805163652b9b4160e01b81523360048201819052915193945090926001600160a01b039092169163652b9b4191602480820192602092909190829003018186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b50516129b0576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b6000838152600b602052604090206129c784613875565b6001810154604080516370a0823160e01b815230600482015290516001600160a01b039092169160009183916370a0823191602480820192602092909190829003018186803b158015612a1957600080fd5b505afa158015612a2d573d6000803e3d6000fd5b505050506040513d6020811015612a4357600080fd5b50516004840154909150811015612a5e575050505050610ce4565b600254612a769083906001600160a01b031683613a1d565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612ac157600080fd5b505afa158015612ad5573d6000803e3d6000fd5b505050506040513d6020811015612aeb57600080fd5b505190508015610f8757600080600080600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4957600080fd5b505afa158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50511115612c1a57612c0b612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b505afa158015612be6573d6000803e3d6000fd5b505050506040513d6020811015612bfc57600080fd5b50518790613d70565b90613dc9565b9150612c1783836139bc565b92505b60055460408051632b5ca1bb60e21b815290516000926001600160a01b03169163ad7286ec916004808301926020929190829003018186803b158015612c5f57600080fd5b505afa158015612c73573d6000803e3d6000fd5b505050506040513d6020811015612c8957600080fd5b50511115612cf757612ce8612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663ad7286ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b9050612cf483826139bc565b92505b6000612d086002612c058787613e0b565b600254600754919250612d28916001600160a01b03918216911683613a1d565b612d30613e4d565b600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612d7b57600080fd5b505afa158015612d8f573d6000803e3d6000fd5b505050506040513d6020811015612da557600080fd5b505160055460408051638acc76fb60e01b815290519297506000926001600160a01b0390921691638acc76fb91600480820192602092909190829003018186803b158015612df257600080fd5b505afa158015612e06573d6000803e3d6000fd5b505050506040513d6020811015612e1c57600080fd5b5051600554604080516350773b5b60e11b815290519293506000926001600160a01b039092169163a0ee76b691600480820192602092909190829003018186803b158015612e6957600080fd5b505afa158015612e7d573d6000803e3d6000fd5b505050506040513d6020811015612e9357600080fd5b505190508415801590612eae57506001600160a01b03811615155b15612fcd5786612ebe86866139bc565b1015612ed157612ece8785613e0b565b94505b6002546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018990529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612f2757600080fd5b505af1158015612f3b573d6000803e3d6000fd5b505050506040513d6020811015612f5157600080fd5b5050600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612f9e57600080fd5b505afa158015612fb2573d6000803e3d6000fd5b505050506040513d6020811015612fc857600080fd5b505196505b600084118015612fe557506001600160a01b03821615155b156131e957600554604080516305268cff60e01b815290516000926001600160a01b0316916305268cff916004808301926020929190829003018186803b15801561302f57600080fd5b505afa158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b5051600254909150613075906001600160a01b0316828a613a1d565b806001600160a01b031663a9059cbb84836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156130d257600080fd5b505afa1580156130e6573d6000803e3d6000fd5b505050506040513d60208110156130fc57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b505050506040513d602081101561317757600080fd5b505060408051631dfc6d6560e11b815290516001600160a01b03851691633bf8daca9160048083019260209291908290030181600087803b1580156131bb57600080fd5b505af11580156131cf573d6000803e3d6000fd5b505050506040513d60208110156131e557600080fd5b5050505b5050600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561323657600080fd5b505afa15801561324a573d6000803e3d6000fd5b505050506040513d602081101561326057600080fd5b5051905080156134f2576000198d14156132fc576006546040805163a9059cbb60e01b81526001600160a01b038e81166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b505050506040513d60208110156132f457600080fd5b506134f29050565b60065460408051636eb1769f60e11b81523060048201526001600160a01b038e8116602483015291518493929092169163dd62ed3e91604480820192602092909190829003018186803b15801561335257600080fd5b505afa158015613366573d6000803e3d6000fd5b505050506040513d602081101561337c57600080fd5b5051101561348b576006546040805163095ea7b360e01b81526001600160a01b038e81166004830152600060248301819052925193169263095ea7b392604480840193602093929083900390910190829087803b1580156133dc57600080fd5b505af11580156133f0573d6000803e3d6000fd5b505050506040513d602081101561340657600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038e81166004830152602482018590529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561345e57600080fd5b505af1158015613472573d6000803e3d6000fd5b505050506040513d602081101561348857600080fd5b50505b8a6001600160a01b03166385c350f58e836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156134d957600080fd5b505af11580156134ed573d6000803e3d6000fd5b505050505b50505050505050505050505050565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b039687169795871696909416949293919260ff9091169188565b6003546001600160a01b031681565b6001546001600160a01b031633146135b2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6000888152600b6020908152604080832080546001600160a01b03199081166001600160a01b038d811691909117835560018301805483168d83169081179091556002840180549093168c831617909255600383018a905560048084018a905560058401805460ff191660ff8b1617905560069093018790558254845163095ea7b360e01b815291169281019290925260001960248301529151919363095ea7b39360448084019491939192918390030190829087803b15801561367557600080fd5b505af1158015613689573d6000803e3d6000fd5b505050506040513d602081101561369f57600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038a8116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156136f857600080fd5b505af115801561370c573d6000803e3d6000fd5b505050506040513d602081101561372257600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b03888116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561377b57600080fd5b505af115801561378f573d6000803e3d6000fd5b505050506040513d60208110156137a557600080fd5b50505050505050505050565b6001546001600160a01b03163314806137d457506000546001600160a01b031633145b613813576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b816001600160a01b0316635312ea8e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561385957600080fd5b505af115801561386d573d6000803e3d6000fd5b505050505050565b6000818152600b60205260409020600581015460ff166138fe578060020160009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138e157600080fd5b505af11580156138f5573d6000803e3d6000fd5b50505050610ce4565b600581015460ff1660011415613968576002810154600382015460408051631c57762b60e31b8152600481019290925260006024830181905290516001600160a01b039093169263e2bbb15892604480820193929182900301818387803b1580156138e157600080fd5b600281015460038201546040805163379607f560e01b81526004810192909252516001600160a01b039092169163379607f59160248082019260009290919082900301818387803b15801561385957600080fd5b600082820183811015613a16576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038084166000908152600a602090815260408083208685168452909152902054168015613ae25760408051638201aa3f60e01b81526001600160a01b038681166004830152602482018590528581166044830152600160648301526000196084830152825190841692638201aa3f9260a480820193918290030181600087803b158015613ab057600080fd5b505af1158015613ac4573d6000803e3d6000fd5b505050506040513d6040811015613ada57600080fd5b50610d7f9050565b6001600160a01b038085166000908152600960209081526040808320938716835292815290829020805483518184028101840190945280845260609392830182828015613b5857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613b3a575b50505050509050805160001415613be65760408051600280825260608201835290916020830190803683370190505090508481600081518110613b9757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613bc557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6004546001600160a01b03166338ed17398460018430613c08426107086139bc565b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613c78578181015183820152602001613c60565b505050509050019650505050505050600060405180830381600087803b158015613ca157600080fd5b505af1158015613cb5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cde57600080fd5b8101908080516040519392919084600160201b821115613cfd57600080fd5b908301906020820185811115613d1257600080fd5b82518660208202830111600160201b82111715613d2e57600080fd5b82525081516020918201928201910280838360005b83811015613d5b578181015183820152602001613d43565b50505050905001604052505050505050505050565b600082613d7f575060006116f6565b82820282848281613d8c57fe5b0414613a165760405162461bcd60e51b815260040180806020018281038252602181526020018061421c6021913960400191505060405180910390fd5b6000613a1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061400f565b6000613a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140b1565b60048054600754600854604080516370a0823160e01b81523095810195909552516001600160a01b039384169463e8e3370094938416939092169183916370a0823191602480820192602092909190829003018186803b158015613eb057600080fd5b505afa158015613ec4573d6000803e3d6000fd5b505050506040513d6020811015613eda57600080fd5b5051600854604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613f2757600080fd5b505afa158015613f3b573d6000803e3d6000fd5b505050506040513d6020811015613f5157600080fd5b505160018030613f63426107086139bc565b6040518963ffffffff1660e01b815260040180896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200198505050505050505050606060405180830381600087803b158015613fe557600080fd5b505af1158015613ff9573d6000803e3d6000fd5b505050506040513d6060811015610ce457600080fd5b6000818361409b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614060578181015183820152602001614048565b50505050905090810190601f16801561408d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140a757fe5b0495945050505050565b600081848411156141035760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614060578181015183820152602001614048565b505050900390565b50805460008255601f0160209004906000526020600020908101906114319190614195565b828054828255906000526020600020908101928215614185579160200282015b8281111561418557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614150565b506141919291506141aa565b5090565b5b808211156141915760008155600101614196565b5b808211156141915780546001600160a01b03191681556001016141ab56fe556e697632455448555344434d756c7469506f6f6c53747261746567793a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7721676f7665726e616e6365202626202173747261746567697374000000000000a264697066735822122094f2ae6747923d75b5d9886666473ab42a54e2436e1b3349d748f3d38ebe16d964736f6c634300060c0033000000000000000000000000aa8ecca0082c34ab8c30b4d896eb8eecc5004b28000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c8063692c2f9011610182578063c7b9d530116100e9578063daea85c5116100a2578063f2faa1b91161007c578063f2faa1b914610b12578063f712adbb14610b82578063fb529b3314610b8a578063fd5ce85114610be2576102bb565b8063daea85c514610aa6578063e2bbb15814610acc578063e4a4b7b114610aef576102bb565b8063c7b9d530146109d4578063c9ed5008146109fa578063d374eb2714610a17578063d73792a914610a43578063d78683b914610a4b578063d92f3d7314610a80576102bb565b8063a06824271161013b578063a06824271461092b578063a22a33b714610951578063ab033ea91461097f578063ad7a672f146109a5578063ae511bf3146109ad578063be4ea1e4146109b5576102bb565b8063692c2f9014610886578063696513f01461088e57806372bf2ac4146108ab5780638214f5a4146108e357806389fa2b70146108eb5780639cc7f7081461090e576102bb565b80633fc8cef3116102265780635a677b7e116101df5780635a677b7e146107c45780635aa6e675146107e75780635b769f3c146107ef5780635c788211146108155780635fa6e5ef1461084357806367ad20fd14610869576102bb565b80633fc8cef31461071857806340e7e57114610720578063441a3e7014610743578063442dd5e714610766578063452ed4f114610789578063460247a614610791576102bb565b806320ffb4531161027857806320ffb453146104945780632224fa25146104cf578063257ae0de14610682578063359a3f731461068a57806335e94268146106c5578063379607f5146106fb576102bb565b806303da1b32146102c0578063115cce2b1461036357806312f7086c1461041d5780631c727de81461044c5780631fe4a686146104705780632088a7fa14610478575b600080fd5b610361600480360360208110156102d657600080fd5b810190602081018135600160201b8111156102f057600080fd5b82018360208201111561030257600080fd5b803590602001918460208302840111600160201b8311171561032357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c0e945050505050565b005b6103616004803603606081101561037957600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460208302840111600160201b831117156103df57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ce8945050505050565b61043a6004803603602081101561043357600080fd5b5035610d85565b60408051918252519081900360200190f35b610454610e31565b604080516001600160a01b039092168252519081900360200190f35b610454610e40565b610480610e4f565b604080519115158252519081900360200190f35b610361600480360360808110156104aa57600080fd5b506001600160a01b038135169060ff6020820135169060408101359060600135610e58565b61060d600480360360808110156104e557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561051457600080fd5b82018360208201111561052657600080fd5b803590602001918460018302840111600160201b8311171561054757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f91945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561064757818101518382015260200161062f565b50505050905090810190601f1680156106745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61045461127b565b610361600480360360808110156106a057600080fd5b506001600160a01b038135169060ff602082013516906040810135906060013561128a565b610454600480360360608110156106db57600080fd5b506001600160a01b03813581169160208101359091169060400135611388565b6103616004803603602081101561071157600080fd5b50356113ca565b610454611434565b6103616004803603604081101561073657600080fd5b5080359060200135611443565b6103616004803603604081101561075957600080fd5b50803590602001356114ba565b6103616004803603604081101561077c57600080fd5b508035906020013561163c565b6104546116b3565b6107ae600480360360208110156107a757600080fd5b50356116c2565b6040805160ff9092168252519081900360200190f35b61043a600480360360408110156107da57600080fd5b50803590602001356116f3565b6104546116fc565b6103616004803603602081101561080557600080fd5b50356001600160a01b031661170b565b6104546004803603604081101561082b57600080fd5b506001600160a01b038135811691602001351661178f565b6103616004803603602081101561085957600080fd5b50356001600160a01b03166117b5565b6104546004803603602081101561087f57600080fd5b5035611839565b610454611857565b61043a600480360360208110156108a457600080fd5b5035611866565b610361600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101358216916040909101351661187b565b61045461198b565b6103616004803603604081101561090157600080fd5b508035906020013561199a565b61043a6004803603602081101561092457600080fd5b5035611a11565b61043a6004803603602081101561094157600080fd5b50356001600160a01b0316611a26565b6103616004803603604081101561096757600080fd5b506001600160a01b0381358116916020013516611bef565b6103616004803603602081101561099557600080fd5b50356001600160a01b0316611cbf565b61043a611d2e565b610454611d34565b610361600480360360208110156109cb57600080fd5b50351515611d43565b610361600480360360208110156109ea57600080fd5b50356001600160a01b0316611db8565b61036160048036036020811015610a1057600080fd5b5035611e3c565b61043a60048036036040811015610a2d57600080fd5b506001600160a01b038135169060200135611ea3565b61043a6121dc565b61036160048036036060811015610a6157600080fd5b506001600160a01b038135169060ff60208201351690604001356121e2565b61036160048036036020811015610a9657600080fd5b50356001600160a01b0316612360565b61036160048036036020811015610abc57600080fd5b50356001600160a01b03166124e5565b61036160048036036040811015610ae257600080fd5b508035906020013561268e565b61036160048036036040811015610b0557600080fd5b5080359060200135612887565b610b2f60048036036020811015610b2857600080fd5b5035613501565b604080516001600160a01b03998a168152978916602089015295909716868601526060860193909352608085019190915260ff1660a084015260c083015260e08201929092529051908190036101000190f35b610454613556565b6103616004803603610100811015610ba157600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a08101359060ff60c0820135169060e00135613565565b61036160048036036040811015610bf857600080fd5b506001600160a01b0381351690602001356137b1565b6001546001600160a01b0316331480610c3157506000546001600160a01b031633145b610c70576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b610c7c600e600061410b565b60005b81518160ff161015610ce457600e828260ff1681518110610c9c57fe5b602090810291909101810151825460018181018555600094855293839020928104909201805460ff928316601f9094166101000a938402929093021990921617905501610c7f565b5050565b6001546001600160a01b0316331480610d0b57506000546001600160a01b031633145b610d4a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b03808416600090815260096020908152604080832093861683529281529190208251610d7f92840190614130565b50505050565b6000818152600b602052604081206005015460ff1615610da757506000610e2c565b6000828152600b60209081526040918290206002015482516246613160e11b815230600482015292516001600160a01b0390911692628cc262926024808301939192829003018186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6020811015610e2757600080fd5b505190505b919050565b6005546001600160a01b031681565b6000546001600160a01b031681565b600d5460ff1681565b6001546001600160a01b0316331480610e7b57506000546001600160a01b031633145b610eba576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff8316610f2557836001600160a01b031663a694fc3a826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050610d7f565b836001600160a01b031663e2bbb15883836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b5050505050505050565b6001546060906001600160a01b03163314610fe1576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6060835160001415610ff4575081611077565b83805190602001208360405160200180836001600160e01b031916815260040182805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060876001600160a01b031687846040518082805190602001908083835b602083106110b65780518252601f199092019160209182019101611097565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611118576040519150601f19603f3d011682016040523d82523d6000602084013e61111d565b606091505b50915091508161115e5760405162461bcd60e51b81526004018080602001828103825260528152602001806141ca6052913960600191505060405180910390fd5b876001600160a01b03167f88405ca50016c636e025868e263efe5a9f63bf11cc45404f7616394c7dc389d0888888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111d35781810151838201526020016111bb565b50505050905090810190601f1680156112005780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561123357818101518382015260200161121b565b50505050905090810190601f1680156112605780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2979650505050505050565b6004546001600160a01b031681565b6001546001600160a01b03163314806112ad57506000546001600160a01b031633145b6112ec576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff831661133a57836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b836001600160a01b031663441a3e7083836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b600960205282600052604060002060205281600052604060002081815481106113ad57fe5b6000918252602090912001546001600160a01b0316925083915050565b6000818152600b60205260409020546001600160a01b03163314611428576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b61143181613875565b50565b6002546001600160a01b031681565b6001546001600160a01b031633148061146657506000546001600160a01b031633145b6114a5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060040155565b6000828152600b6020526040902080546001600160a01b03163314611519576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600581015460ff1661159157600281015460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b50505050611605565b6002810154600382015460408051630441a3e760e41b8152600481019290925260248201859052516001600160a01b039092169163441a3e709160448082019260009290919082900301818387803b1580156115ec57600080fd5b505af1158015611600573d6000803e3d6000fd5b505050505b818160070154101561161957806007015491505b6007810180548390039055600c54821161163757600c805483900390555b505050565b6001546001600160a01b031633148061165f57506000546001600160a01b031633145b61169e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060070155565b6006546001600160a01b031681565b600e81815481106116cf57fe5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b60005b92915050565b6001546001600160a01b031681565b6001546001600160a01b031633148061172e57506000546001600160a01b031633145b61176d576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b03163314806117d857506000546001600160a01b031633145b611817576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600b60205260409020600101546001600160a01b031690565b6007546001600160a01b031681565b6000908152600b602052604090206006015490565b6001546001600160a01b031633148061189e57506000546001600160a01b031633145b6118dd576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b038381166000818152600a602090815260408083208786168452825280832080546001600160a01b0319169587169586179055805163095ea7b360e01b81526004810195909552600019602486015251929363095ea7b39360448083019491928390030190829087803b15801561195a57600080fd5b505af115801561196e573d6000803e3d6000fd5b505050506040513d602081101561198457600080fd5b5050505050565b6006546001600160a01b031690565b6001546001600160a01b03163314806119bd57506000546001600160a01b031633145b6119fc576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060060155565b6000908152600b602052604090206007015490565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7757600080fd5b505afa158015611a8b573d6000803e3d6000fd5b505050506040513d6020811015611aa157600080fd5b505190506001600160a01b0381163314611af4576040805162461bcd60e51b815260206004820152600f60248201526e73656e646572206e6f742062616e6b60881b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015611b3a57600080fd5b505afa158015611b4e573d6000803e3d6000fd5b505050506040513d6020811015611b6457600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905291519294509085169163a9059cbb916044808201926020929091908290030181600087803b158015611bbc57600080fd5b505af1158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b50919392505050565b6001546001600160a01b03163314611c3c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b816001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b505050506040513d6020811015610d7f57600080fd5b6001546001600160a01b03163314611d0c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b6008546001600160a01b031681565b6001546001600160a01b0316331480611d6657506000546001600160a01b031633145b611da5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6001546001600160a01b0316331480611ddb57506000546001600160a01b031633145b611e1a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480611e5f57506000546001600160a01b031633145b611e9e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600c55565b6005546040805163652b9b4160e01b815233600482015290516000926001600160a01b03169163652b9b41916024808301926020929190829003018186803b158015611eee57600080fd5b505afa158015611f02573d6000803e3d6000fd5b505050506040513d6020811015611f1857600080fd5b5051611f57576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081d985d5b1d60ba1b604482015290519081900360640190fd5b600554604080516317475d5760e11b81526001600160a01b03868116600483015291519190921691632e8ebaae916024808301926020929190829003018186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d6020811015611fce57600080fd5b5051612010576040805162461bcd60e51b815260206004820152600c60248201526b6e6f7420737472617465677960a01b604482015290519081900360640190fd5b600654604080516320853d6960e21b815290516001600160a01b0392831692861691638214f5a4916004808301926020929190829003018186803b15801561205757600080fd5b505afa15801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b50516001600160a01b0316146120c8576040805162461bcd60e51b815260206004820152600760248201526610b6382830b4b960c91b604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561211357600080fd5b505afa158015612127573d6000803e3d6000fd5b505050506040513d602081101561213d57600080fd5b5051905080831061214e5780612150565b825b6006546040805163a9059cbb60e01b81526001600160a01b03888116600483015260248201859052915193955091169163a9059cbb916044808201926020929091908290030181600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050506040513d60208110156121d257600080fd5b5091949350505050565b61271081565b6001546001600160a01b031633148061220557506000546001600160a01b031633145b612244576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff82166122a457826001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561228757600080fd5b505af115801561229b573d6000803e3d6000fd5b50505050611637565b8160ff16600114156122fd5760408051631c57762b60e31b81526004810183905260006024820181905291516001600160a01b0386169263e2bbb158926044808201939182900301818387803b15801561228757600080fd5b826001600160a01b031663379607f5826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561234357600080fd5b505af1158015612357573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633148061238357506000546001600160a01b031633145b6123c2576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03838116919091178083556007546040805163095ea7b360e01b81529284169483019490945260001960248301529251929091169163095ea7b3916044808201926020929091908290030181600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d602081101561245e57600080fd5b5050600854600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b1580156124bb57600080fd5b505af11580156124cf573d6000803e3d6000fd5b505050506040513d602081101561163757600080fd5b6001546001600160a01b03163314612532576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b806001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561258f57600080fd5b505afa1580156125a3573d6000803e3d6000fd5b505050506040513d60208110156125b957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260001960248301525160448083019260209291908290030181600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050506040513d602081101561263457600080fd5b5050600480546040805163095ea7b360e01b81526001600160a01b03928316938101939093526000196024840152519083169163095ea7b39160448083019260209291908290030181600087803b1580156124bb57600080fd5b6000828152600b6020526040902080546001600160a01b031633146126ed576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600d5460ff161561277257600654604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561274357600080fd5b505afa158015612757573d6000803e3d6000fd5b505050506040513d602081101561276d57600080fd5b505191505b600581015460ff166127ea5760028101546040805163534a7e1d60e11b81526004810185905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b5050505061285e565b6002810154600382015460408051631c57762b60e31b8152600481019290925260248201859052516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b505050505b600781015461286d90836139bc565b6007820155600c5461287f90836139bc565b600c55505050565b600554604080516376cdb03b60e01b815290516000926001600160a01b0316916376cdb03b916004808301926020929190829003018186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d60208110156128f657600080fd5b50516005546040805163652b9b4160e01b81523360048201819052915193945090926001600160a01b039092169163652b9b4191602480820192602092909190829003018186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b50516129b0576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b6000838152600b602052604090206129c784613875565b6001810154604080516370a0823160e01b815230600482015290516001600160a01b039092169160009183916370a0823191602480820192602092909190829003018186803b158015612a1957600080fd5b505afa158015612a2d573d6000803e3d6000fd5b505050506040513d6020811015612a4357600080fd5b50516004840154909150811015612a5e575050505050610ce4565b600254612a769083906001600160a01b031683613a1d565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612ac157600080fd5b505afa158015612ad5573d6000803e3d6000fd5b505050506040513d6020811015612aeb57600080fd5b505190508015610f8757600080600080600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4957600080fd5b505afa158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50511115612c1a57612c0b612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b505afa158015612be6573d6000803e3d6000fd5b505050506040513d6020811015612bfc57600080fd5b50518790613d70565b90613dc9565b9150612c1783836139bc565b92505b60055460408051632b5ca1bb60e21b815290516000926001600160a01b03169163ad7286ec916004808301926020929190829003018186803b158015612c5f57600080fd5b505afa158015612c73573d6000803e3d6000fd5b505050506040513d6020811015612c8957600080fd5b50511115612cf757612ce8612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663ad7286ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b9050612cf483826139bc565b92505b6000612d086002612c058787613e0b565b600254600754919250612d28916001600160a01b03918216911683613a1d565b612d30613e4d565b600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612d7b57600080fd5b505afa158015612d8f573d6000803e3d6000fd5b505050506040513d6020811015612da557600080fd5b505160055460408051638acc76fb60e01b815290519297506000926001600160a01b0390921691638acc76fb91600480820192602092909190829003018186803b158015612df257600080fd5b505afa158015612e06573d6000803e3d6000fd5b505050506040513d6020811015612e1c57600080fd5b5051600554604080516350773b5b60e11b815290519293506000926001600160a01b039092169163a0ee76b691600480820192602092909190829003018186803b158015612e6957600080fd5b505afa158015612e7d573d6000803e3d6000fd5b505050506040513d6020811015612e9357600080fd5b505190508415801590612eae57506001600160a01b03811615155b15612fcd5786612ebe86866139bc565b1015612ed157612ece8785613e0b565b94505b6002546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018990529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612f2757600080fd5b505af1158015612f3b573d6000803e3d6000fd5b505050506040513d6020811015612f5157600080fd5b5050600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612f9e57600080fd5b505afa158015612fb2573d6000803e3d6000fd5b505050506040513d6020811015612fc857600080fd5b505196505b600084118015612fe557506001600160a01b03821615155b156131e957600554604080516305268cff60e01b815290516000926001600160a01b0316916305268cff916004808301926020929190829003018186803b15801561302f57600080fd5b505afa158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b5051600254909150613075906001600160a01b0316828a613a1d565b806001600160a01b031663a9059cbb84836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156130d257600080fd5b505afa1580156130e6573d6000803e3d6000fd5b505050506040513d60208110156130fc57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b505050506040513d602081101561317757600080fd5b505060408051631dfc6d6560e11b815290516001600160a01b03851691633bf8daca9160048083019260209291908290030181600087803b1580156131bb57600080fd5b505af11580156131cf573d6000803e3d6000fd5b505050506040513d60208110156131e557600080fd5b5050505b5050600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561323657600080fd5b505afa15801561324a573d6000803e3d6000fd5b505050506040513d602081101561326057600080fd5b5051905080156134f2576000198d14156132fc576006546040805163a9059cbb60e01b81526001600160a01b038e81166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b505050506040513d60208110156132f457600080fd5b506134f29050565b60065460408051636eb1769f60e11b81523060048201526001600160a01b038e8116602483015291518493929092169163dd62ed3e91604480820192602092909190829003018186803b15801561335257600080fd5b505afa158015613366573d6000803e3d6000fd5b505050506040513d602081101561337c57600080fd5b5051101561348b576006546040805163095ea7b360e01b81526001600160a01b038e81166004830152600060248301819052925193169263095ea7b392604480840193602093929083900390910190829087803b1580156133dc57600080fd5b505af11580156133f0573d6000803e3d6000fd5b505050506040513d602081101561340657600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038e81166004830152602482018590529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561345e57600080fd5b505af1158015613472573d6000803e3d6000fd5b505050506040513d602081101561348857600080fd5b50505b8a6001600160a01b03166385c350f58e836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156134d957600080fd5b505af11580156134ed573d6000803e3d6000fd5b505050505b50505050505050505050505050565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b039687169795871696909416949293919260ff9091169188565b6003546001600160a01b031681565b6001546001600160a01b031633146135b2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6000888152600b6020908152604080832080546001600160a01b03199081166001600160a01b038d811691909117835560018301805483168d83169081179091556002840180549093168c831617909255600383018a905560048084018a905560058401805460ff191660ff8b1617905560069093018790558254845163095ea7b360e01b815291169281019290925260001960248301529151919363095ea7b39360448084019491939192918390030190829087803b15801561367557600080fd5b505af1158015613689573d6000803e3d6000fd5b505050506040513d602081101561369f57600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038a8116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156136f857600080fd5b505af115801561370c573d6000803e3d6000fd5b505050506040513d602081101561372257600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b03888116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561377b57600080fd5b505af115801561378f573d6000803e3d6000fd5b505050506040513d60208110156137a557600080fd5b50505050505050505050565b6001546001600160a01b03163314806137d457506000546001600160a01b031633145b613813576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b816001600160a01b0316635312ea8e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561385957600080fd5b505af115801561386d573d6000803e3d6000fd5b505050505050565b6000818152600b60205260409020600581015460ff166138fe578060020160009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138e157600080fd5b505af11580156138f5573d6000803e3d6000fd5b50505050610ce4565b600581015460ff1660011415613968576002810154600382015460408051631c57762b60e31b8152600481019290925260006024830181905290516001600160a01b039093169263e2bbb15892604480820193929182900301818387803b1580156138e157600080fd5b600281015460038201546040805163379607f560e01b81526004810192909252516001600160a01b039092169163379607f59160248082019260009290919082900301818387803b15801561385957600080fd5b600082820183811015613a16576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038084166000908152600a602090815260408083208685168452909152902054168015613ae25760408051638201aa3f60e01b81526001600160a01b038681166004830152602482018590528581166044830152600160648301526000196084830152825190841692638201aa3f9260a480820193918290030181600087803b158015613ab057600080fd5b505af1158015613ac4573d6000803e3d6000fd5b505050506040513d6040811015613ada57600080fd5b50610d7f9050565b6001600160a01b038085166000908152600960209081526040808320938716835292815290829020805483518184028101840190945280845260609392830182828015613b5857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613b3a575b50505050509050805160001415613be65760408051600280825260608201835290916020830190803683370190505090508481600081518110613b9757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613bc557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6004546001600160a01b03166338ed17398460018430613c08426107086139bc565b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613c78578181015183820152602001613c60565b505050509050019650505050505050600060405180830381600087803b158015613ca157600080fd5b505af1158015613cb5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cde57600080fd5b8101908080516040519392919084600160201b821115613cfd57600080fd5b908301906020820185811115613d1257600080fd5b82518660208202830111600160201b82111715613d2e57600080fd5b82525081516020918201928201910280838360005b83811015613d5b578181015183820152602001613d43565b50505050905001604052505050505050505050565b600082613d7f575060006116f6565b82820282848281613d8c57fe5b0414613a165760405162461bcd60e51b815260040180806020018281038252602181526020018061421c6021913960400191505060405180910390fd5b6000613a1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061400f565b6000613a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140b1565b60048054600754600854604080516370a0823160e01b81523095810195909552516001600160a01b039384169463e8e3370094938416939092169183916370a0823191602480820192602092909190829003018186803b158015613eb057600080fd5b505afa158015613ec4573d6000803e3d6000fd5b505050506040513d6020811015613eda57600080fd5b5051600854604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613f2757600080fd5b505afa158015613f3b573d6000803e3d6000fd5b505050506040513d6020811015613f5157600080fd5b505160018030613f63426107086139bc565b6040518963ffffffff1660e01b815260040180896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200198505050505050505050606060405180830381600087803b158015613fe557600080fd5b505af1158015613ff9573d6000803e3d6000fd5b505050506040513d6060811015610ce457600080fd5b6000818361409b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614060578181015183820152602001614048565b50505050905090810190601f16801561408d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140a757fe5b0495945050505050565b600081848411156141035760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614060578181015183820152602001614048565b505050900390565b50805460008255601f0160209004906000526020600020908101906114319190614195565b828054828255906000526020600020908101928215614185579160200282015b8281111561418557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614150565b506141919291506141aa565b5090565b5b808211156141915760008155600101614196565b5b808211156141915780546001600160a01b03191681556001016141ab56fe556e697632455448555344434d756c7469506f6f6c53747261746567793a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7721676f7665726e616e6365202626202173747261746567697374000000000000a264697066735822122094f2ae6747923d75b5d9886666473ab42a54e2436e1b3349d748f3d38ebe16d964736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000aa8ecca0082c34ab8c30b4d896eb8eecc5004b28000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : _valueVaultMaster (address): 0xAa8ECCa0082c34Ab8c30B4D896eB8eEcC5004b28
Arg [1] : _lpPair (address): 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc
Arg [2] : _lpPairTokenA (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [3] : _lpPairTokenB (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [4] : _aggressiveMode (bool): True

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000aa8ecca0082c34ab8c30b4d896eb8eecc5004b28
Arg [1] : 000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc
Arg [2] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed Bytecode Sourcemap

18501:18853:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23166:347;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23166:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23166:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23166:347:0;;-1:-1:-1;23166:347:0;;-1:-1:-1;;;;;23166:347:0:i;:::-;;29740:249;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29740:249:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29740:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29740:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29740:249:0;;-1:-1:-1;29740:249:0;;-1:-1:-1;;;;;29740:249:0:i;35490:261::-;;;;;;;;;;;;;;;;-1:-1:-1;35490:261:0;;:::i;:::-;;;;;;;;;;;;;;;;18986:40;;;:::i;:::-;;;;-1:-1:-1;;;;;18986:40:0;;;;;;;;;;;;;;18597:25;;;:::i;19995:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;27533:386;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27533:386:0;;;;;;;;;;;;;;;;;;;;:::i;36568:783::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36568:783:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36568:783:0;;;;;;;;-1:-1:-1;36568:783:0;;-1:-1:-1;;;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36568:783:0;;-1:-1:-1;36568:783:0;;-1:-1:-1;;;;;36568:783:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18885:92;;;:::i;28383:391::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28383:391:0;;;;;;;;;;;;;;;;;;;;:::i;19200:69::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19200:69:0;;;;;;;;;;;;;;;;;:::i;26270:162::-;;;;;;;;;;;;;;;;-1:-1:-1;26270:162:0;;:::i;18719:71::-;;;:::i;23521:284::-;;;;;;;;;;;;;;;;-1:-1:-1;23521:284:0;;;;;;;:::i;26912:613::-;;;;;;;;;;;;;;;;-1:-1:-1;26912:613:0;;;;;;;:::i;24159:224::-;;;;;;;;;;;;;;;;-1:-1:-1;24159:224:0;;;;;;;:::i;19033:20::-;;;:::i;20131:31::-;;;;;;;;;;;;;;;;-1:-1:-1;20131:31:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;35920:124;;;;;;;;;;;;;;;;-1:-1:-1;35920:124:0;;;;;;;:::i;18629:25::-;;;:::i;24824:173::-;;;;;;;;;;;;;;;;-1:-1:-1;24824:173:0;-1:-1:-1;;;;;24824:173:0;;:::i;19313:66::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19313:66:0;;;;;;;;;;:::i;25005:192::-;;;;;;;;;;;;;;;;-1:-1:-1;25005:192:0;-1:-1:-1;;;;;25005:192:0;;:::i;35163:144::-;;;;;;;;;;;;;;;;-1:-1:-1;35163:144:0;;:::i;19077:26::-;;;:::i;29098:129::-;;;;;;;;;;;;;;;;-1:-1:-1;29098:129:0;;:::i;29997:294::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29997:294:0;;;;;;;;;;;;;;;;;;;:::i;34987:103::-;;;:::i;23813:228::-;;;;;;;;;;;;;;;;-1:-1:-1;23813:228:0;;;;;;;:::i;35315:125::-;;;;;;;;;;;;;;;;-1:-1:-1;35315:125:0;;:::i;36162:299::-;;;;;;;;;;;;;;;;-1:-1:-1;36162:299:0;-1:-1:-1;;;;;36162:299:0;;:::i;22592:197::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22592:197:0;;;;;;;;;;:::i;22797:155::-;;;;;;;;;;;;;;;;-1:-1:-1;22797:155:0;-1:-1:-1;;;;;22797:155:0;;:::i;19959:27::-;;;:::i;19118:26::-;;;:::i;24605:211::-;;;;;;;;;;;;;;;;-1:-1:-1;24605:211:0;;;;:::i;22960:198::-;;;;;;;;;;;;;;;;-1:-1:-1;22960:198:0;-1:-1:-1;;;;;22960:198:0;;:::i;24391:206::-;;;;;;;;;;;;;;;;-1:-1:-1;24391:206:0;;:::i;29235:497::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29235:497:0;;;;;;;;:::i;18663:47::-;;;:::i;27927:448::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27927:448:0;;;;;;;;;;;;;;;:::i;25205:341::-;;;;;;;;;;;;;;;;-1:-1:-1;25205:341:0;-1:-1:-1;;;;;25205:341:0;;:::i;22334:250::-;;;;;;;;;;;;;;;;-1:-1:-1;22334:250:0;-1:-1:-1;;;;;22334:250:0;;:::i;25612:594::-;;;;;;;;;;;;;;;;-1:-1:-1;25612:594:0;;;;;;;:::i;31616:3302::-;;;;;;;;;;;;;;;;-1:-1:-1;31616:3302:0;;;;;;;:::i;19884:43::-;;;;;;;;;;;;;;;;-1:-1:-1;19884:43:0;;:::i;:::-;;;;-1:-1:-1;;;;;19884:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18797:81;;;:::i;21492:834::-;;;;;;;;;;;;;;;;-1:-1:-1;21492:834:0;;;-1:-1:-1;;;;;21492:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28782:248::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28782:248:0;;;;;;;;:::i;23166:347::-;23269:10;;-1:-1:-1;;;;;23269:10:0;23255;:24;;:52;;-1:-1:-1;23297:10:0;;-1:-1:-1;;;;;23297:10:0;23283;:24;23255:52;23247:91;;;;;-1:-1:-1;;;23247:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23247:91:0;;;;;;;;;;;;;;;23349:23;23356:16;;23349:23;:::i;:::-;23388:7;23383:123;23405:17;:24;23401:1;:28;;;23383:123;;;23451:16;23473:17;23491:1;23473:20;;;;;;;;;;;;;;;;;;;;;23451:43;;;;;;;;-1:-1:-1;23451:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23431:3;23383:123;;;;23166:347;:::o;29740:249::-;29864:10;;-1:-1:-1;;;;;29864:10:0;29850;:24;;:52;;-1:-1:-1;29892:10:0;;-1:-1:-1;;;;;29892:10:0;29878;:24;29850:52;29842:91;;;;;-1:-1:-1;;;29842:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29842:91:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29944:20:0;;;;;;;:12;:20;;;;;;;;:29;;;;;;;;;;;:37;;;;;;;;:::i;:::-;;29740:249;;;:::o;35490:261::-;35560:7;35584:16;;;:7;:16;;;;;:25;;;;;:30;35580:44;;-1:-1:-1;35623:1:0;35616:8;;35580:44;35693:16;;;;:7;:16;;;;;;;;;:27;;;35677:66;;-1:-1:-1;;;35677:66:0;;35737:4;35677:66;;;;;;-1:-1:-1;;;;;35693:27:0;;;;35677:51;;:66;;;;;35693:16;;35677:66;;;;;35693:27;35677:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35677:66:0;;-1:-1:-1;35490:261:0;;;;:::o;18986:40::-;;;-1:-1:-1;;;;;18986:40:0;;:::o;18597:25::-;;;-1:-1:-1;;;;;18597:25:0;;:::o;19995:26::-;;;;;;:::o;27533:386::-;27668:10;;-1:-1:-1;;;;;27668:10:0;27654;:24;;:52;;-1:-1:-1;27696:10:0;;-1:-1:-1;;;;;27696:10:0;27682;:24;27654:52;27646:91;;;;;-1:-1:-1;;;27646:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27646:91:0;;;;;;;;;;;;;;;27752:14;;;27748:164;;27799:4;-1:-1:-1;;;;;27783:27:0;;27811:7;27783:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27748:164;;;27863:4;-1:-1:-1;;;;;27852:24:0;;27877:13;27892:7;27852:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27533:386;;;;:::o;36568:783::-;36731:10;;36684:12;;-1:-1:-1;;;;;36731:10:0;36717;:24;36709:48;;;;;-1:-1:-1;;;36709:48:0;;;;;;;;;;;;-1:-1:-1;;;36709:48:0;;;;;;;;;;;;;;;36770:21;36814:9;36808:23;36835:1;36808:28;36804:179;;;-1:-1:-1;36864:4:0;36804:179;;;36952:9;36936:27;;;;;;36966:4;36912:59;;;;;;-1:-1:-1;;;;;36912:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36912:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36901:70;;36804:179;37056:12;37070:23;37097:6;-1:-1:-1;;;;;37097:11:0;37116:5;37123:8;37097:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37097:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37055:77;;;;37151:7;37143:102;;;;-1:-1:-1;;;37143:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37282:6;-1:-1:-1;;;;;37263:50:0;;37290:5;37297:9;37308:4;37263:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37263:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37333:10;36568:783;-1:-1:-1;;;;;;;36568:783:0:o;18885:92::-;;;-1:-1:-1;;;;;18885:92:0;;:::o;28383:391::-;28519:10;;-1:-1:-1;;;;;28519:10:0;28505;:24;;:52;;-1:-1:-1;28547:10:0;;-1:-1:-1;;;;;28547:10:0;28533;:24;28505:52;28497:91;;;;;-1:-1:-1;;;28497:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28497:91:0;;;;;;;;;;;;;;;28603:14;;;28599:168;;28650:4;-1:-1:-1;;;;;28634:30:0;;28665:7;28634:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28599:168;28717:4;-1:-1:-1;;;;;28706:25:0;;28732:13;28747:7;28706:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19200:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19200:69:0;;-1:-1:-1;19200:69:0;;-1:-1:-1;;19200:69:0:o;26270:162::-;26339:16;;;;:7;:16;;;;;:22;-1:-1:-1;;;;;26339:22:0;26365:10;26339:36;26331:65;;;;;-1:-1:-1;;;26331:65:0;;;;;;;;;;;;-1:-1:-1;;;26331:65:0;;;;;;;;;;;;;;;26407:15;26414:7;26407:6;:15::i;:::-;26270:162;:::o;18719:71::-;;;-1:-1:-1;;;;;18719:71:0;;:::o;23521:284::-;23650:10;;-1:-1:-1;;;;;23650:10:0;23636;:24;;:52;;-1:-1:-1;23678:10:0;;-1:-1:-1;;;;;23678:10:0;23664;:24;23636:52;23628:91;;;;;-1:-1:-1;;;23628:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23628:91:0;;;;;;;;;;;;;;;23730:16;;;;:7;:16;;;;;;:40;;:67;23521:284::o;26912:613::-;26993:21;27017:16;;;:7;:16;;;;;27052:10;;-1:-1:-1;;;;;27052:10:0;27066;27052:24;27044:53;;;;;-1:-1:-1;;;27044:53:0;;;;;;;;;;;;-1:-1:-1;;;27044:53:0;;;;;;;;;;;;;;;27112:13;;;;;;27108:198;;27163:15;;;;27147:50;;;-1:-1:-1;;;27147:50:0;;;;;;;;;;-1:-1:-1;;;;;27163:15:0;;;;27147:41;;:50;;;;;27163:15;;27147:50;;;;;;;;27163:15;;27147:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27108:198;;;27241:15;;;;27267:17;;;;27230:64;;;-1:-1:-1;;;27230:64:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27241:15:0;;;;27230:36;;:64;;;;;27241:15;;27230:64;;;;;;;;27241:15;;27230:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27108:198;27335:7;27320:4;:12;;;:22;27316:77;;;27369:4;:12;;;27359:22;;27316:77;27418:12;;;;;:22;;;27403:37;;27455:12;;:23;-1:-1:-1;27451:66:0;;27495:12;;;:22;;;27480:37;;27451:66;26912:613;;;:::o;24159:224::-;24260:10;;-1:-1:-1;;;;;24260:10:0;24246;:24;;:52;;-1:-1:-1;24288:10:0;;-1:-1:-1;;;;;24288:10:0;24274;:24;24246:52;24238:91;;;;;-1:-1:-1;;;24238:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24238:91:0;;;;;;;;;;;;;;;24340:16;;;;:7;:16;;;;;;:24;;:35;24159:224::o;19033:20::-;;;-1:-1:-1;;;;;19033:20:0;;:::o;20131:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35920:124::-;35989:7;35920:124;;;;;:::o;18629:25::-;;;-1:-1:-1;;;;;18629:25:0;;:::o;24824:173::-;24897:10;;-1:-1:-1;;;;;24897:10:0;24883;:24;;:52;;-1:-1:-1;24925:10:0;;-1:-1:-1;;;;;24925:10:0;24911;:24;24883:52;24875:91;;;;;-1:-1:-1;;;24875:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24875:91:0;;;;;;;;;;;;;;;24977:4;:12;;-1:-1:-1;;;;;;24977:12:0;-1:-1:-1;;;;;24977:12:0;;;;;;;;;;24824:173::o;19313:66::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19313:66:0;;:::o;25005:192::-;25089:10;;-1:-1:-1;;;;;25089:10:0;25075;:24;;:52;;-1:-1:-1;25117:10:0;;-1:-1:-1;;;;;25117:10:0;25103;:24;25075:52;25067:91;;;;;-1:-1:-1;;;25067:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25067:91:0;;;;;;;;;;;;;;;25169:8;:20;;-1:-1:-1;;;;;;25169:20:0;-1:-1:-1;;;;;25169:20:0;;;;;;;;;;25005:192::o;35163:144::-;35235:7;35270:16;;;:7;:16;;;;;:28;;;-1:-1:-1;;;;;35270:28:0;;35163:144::o;19077:26::-;;;-1:-1:-1;;;;;19077:26:0;;:::o;29098:129::-;29166:7;29193:16;;;:7;:16;;;;;:26;;;;29098:129::o;29997:294::-;30108:10;;-1:-1:-1;;;;;30108:10:0;30094;:24;;:52;;-1:-1:-1;30136:10:0;;-1:-1:-1;;;;;30136:10:0;30122;:24;30094:52;30086:91;;;;;-1:-1:-1;;;30086:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30086:91:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30188:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;:36;;-1:-1:-1;;;;;;30188:36:0;;;;;;;;;30235:48;;-1:-1:-1;;;30235:48:0;;;;;;;;;-1:-1:-1;;30235:48:0;;;;;30188:19;;30235:22;;:48;;;;;;;;;;;;;;30188:19;30235:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29997:294:0:o;34987:103::-;35075:6;;-1:-1:-1;;;;;35075:6:0;34987:103;:::o;23813:228::-;23914:10;;-1:-1:-1;;;;;23914:10:0;23900;:24;;:52;;-1:-1:-1;23942:10:0;;-1:-1:-1;;;;;23942:10:0;23928;:24;23900:52;23892:91;;;;;-1:-1:-1;;;23892:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23892:91:0;;;;;;;;;;;;;;;23994:16;;;;:7;:16;;;;;;:26;;:39;23813:228::o;35315:125::-;35381:7;35408:16;;;:7;:16;;;;;:24;;;;35315:125::o;36162:299::-;36235:15;36263:12;36278:16;;;;;;;;;-1:-1:-1;;;;;36278:16:0;-1:-1:-1;;;;;36278:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36278:23:0;;-1:-1:-1;;;;;;36320:18:0;;36328:10;36320:18;36312:46;;;;;-1:-1:-1;;;36312:46:0;;;;;;;;;;;;-1:-1:-1;;;36312:46:0;;;;;;;;;;;;;;;36381:31;;;-1:-1:-1;;;36381:31:0;;36406:4;36381:31;;;;;;-1:-1:-1;;;;;36381:16:0;;;;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36381:31:0;36423:30;;;-1:-1:-1;;;36423:30:0;;-1:-1:-1;;;;;36423:30:0;;;;;;;;;;;;;;;36381:31;;-1:-1:-1;36423:15:0;;;;;;:30;;;;;36381:31;;36423:30;;;;;;;;-1:-1:-1;36423:15:0;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36162:299:0;;;-1:-1:-1;;;36162:299:0:o;22592:197::-;22702:10;;-1:-1:-1;;;;;22702:10:0;22688;:24;22680:48;;;;;-1:-1:-1;;;22680:48:0;;;;;;;;;;;;-1:-1:-1;;;22680:48:0;;;;;;;;;;;;;;;22739:6;-1:-1:-1;;;;;22739:14:0;;22754:7;-1:-1:-1;;22739:42:0;;;;;;;;;;;;;-1:-1:-1;;;;;22739:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22797:155;22883:10;;-1:-1:-1;;;;;22883:10:0;22869;:24;22861:48;;;;;-1:-1:-1;;;22861:48:0;;;;;;;;;;;;-1:-1:-1;;;22861:48:0;;;;;;;;;;;;;;;22920:10;:24;;-1:-1:-1;;;;;;22920:24:0;-1:-1:-1;;;;;22920:24:0;;;;;;;;;;22797:155::o;19959:27::-;;;;:::o;19118:26::-;;;-1:-1:-1;;;;;19118:26:0;;:::o;24605:211::-;24696:10;;-1:-1:-1;;;;;24696:10:0;24682;:24;;:52;;-1:-1:-1;24724:10:0;;-1:-1:-1;;;;;24724:10:0;24710;:24;24682:52;24674:91;;;;;-1:-1:-1;;;24674:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24674:91:0;;;;;;;;;;;;;;;24776:14;:32;;-1:-1:-1;;24776:32:0;;;;;;;;;;24605:211::o;22960:198::-;23046:10;;-1:-1:-1;;;;;23046:10:0;23032;:24;;:52;;-1:-1:-1;23074:10:0;;-1:-1:-1;;;;;23074:10:0;23060;:24;23032:52;23024:91;;;;;-1:-1:-1;;;23024:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23024:91:0;;;;;;;;;;;;;;;23126:10;:24;;-1:-1:-1;;;;;;23126:24:0;-1:-1:-1;;;;;23126:24:0;;;;;;;;;;22960:198::o;24391:206::-;24481:10;;-1:-1:-1;;;;;24481:10:0;24467;:24;;:52;;-1:-1:-1;24509:10:0;;-1:-1:-1;;;;;24509:10:0;24495;:24;24467:52;24459:91;;;;;-1:-1:-1;;;24459:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24459:91:0;;;;;;;;;;;;;;;24561:12;:28;24391:206::o;29235:497::-;29361:16;;:36;;;-1:-1:-1;;;29361:36:0;;29386:10;29361:36;;;;;;29328:12;;-1:-1:-1;;;;;29361:16:0;;:24;;:36;;;;;;;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29361:36:0;29353:58;;;;;-1:-1:-1;;;29353:58:0;;;;;;;;;;;;-1:-1:-1;;;29353:58:0;;;;;;;;;;;;;;;29430:16;;:34;;;-1:-1:-1;;;29430:34:0;;-1:-1:-1;;;;;29430:34:0;;;;;;;;;:16;;;;;:27;;:34;;;;;;;;;;;;;;:16;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29430:34:0;29422:59;;;;;-1:-1:-1;;;29422:59:0;;;;;;;;;;;;-1:-1:-1;;;29422:59:0;;;;;;;;;;;;;;;29543:6;;29500:31;;;-1:-1:-1;;;29500:31:0;;;;-1:-1:-1;;;;;29543:6:0;;;;29500:29;;;;;:31;;;;;;;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29500:31:0;-1:-1:-1;;;;;29500:50:0;;29492:70;;;;;-1:-1:-1;;;29492:70:0;;;;;;;;;;;;-1:-1:-1;;;29492:70:0;;;;;;;;;;;;;;;29593:6;;:31;;;-1:-1:-1;;;29593:31:0;;29618:4;29593:31;;;;;;29573:17;;-1:-1:-1;;;;;29593:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29593:31:0;;-1:-1:-1;29643:19:0;;;29642:43;;29676:9;29642:43;;;29666:7;29642:43;29696:6;;:28;;;-1:-1:-1;;;29696:28:0;;-1:-1:-1;;;;;29696:28:0;;;;;;;;;;;;;;;29635:50;;-1:-1:-1;29696:6:0;;;:15;;:28;;;;;;;;;;;;;;;:6;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29235:497:0;;;-1:-1:-1;;;;29235:497:0:o;18663:47::-;18705:5;18663:47;:::o;27927:448::-;28043:10;;-1:-1:-1;;;;;28043:10:0;28029;:24;;:52;;-1:-1:-1;28071:10:0;;-1:-1:-1;;;;;28071:10:0;28057;:24;28029:52;28021:91;;;;;-1:-1:-1;;;28021:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28021:91:0;;;;;;;;;;;;;;;28127:14;;;28123:245;;28174:4;-1:-1:-1;;;;;28158:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28123:245;;;28213:9;:14;;28226:1;28213:14;28209:159;;;28244:42;;;-1:-1:-1;;;28244:42:0;;;;;;;;28284:1;28244:42;;;;;;;;-1:-1:-1;;;;;28244:24:0;;;;;:42;;;;;;;;;;;28284:1;28244:24;:42;;;;;;;;;;28209:159;28330:4;-1:-1:-1;;;;;28319:22:0;;28342:13;28319:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27927:448;;;:::o;25205:341::-;25296:10;;-1:-1:-1;;;;;25296:10:0;25282;:24;;:52;;-1:-1:-1;25324:10:0;;-1:-1:-1;;;;;25324:10:0;25310;:24;25282:52;25274:91;;;;;-1:-1:-1;;;25274:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25274:91:0;;;;;;;;;;;;;;;25376:9;:22;;-1:-1:-1;;;;;;25376:22:0;-1:-1:-1;;;;;25376:22:0;;;;;;;;;;25409:12;;:59;;;-1:-1:-1;;;25409:59:0;;25438:9;;;25409:59;;;;;;;-1:-1:-1;;25409:59:0;;;;;;:12;;;;;:20;;:59;;;;;;;;;;;;;;;-1:-1:-1;25409:12:0;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25479:12:0;;25508:9;;;25479:59;;;-1:-1:-1;;;25479:59:0;;-1:-1:-1;;;;;25508:9:0;;;25479:59;;;;;;;-1:-1:-1;;25479:59:0;;;;;:12;;;:20;;:59;;;;;25409;;25479;;;;;;;;:12;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22334:250;22417:10;;-1:-1:-1;;;;;22417:10:0;22403;:24;22395:48;;;;;-1:-1:-1;;;22395:48:0;;;;;;;;;;;;-1:-1:-1;;;22395:48:0;;;;;;;;;;;;;;;22454:6;-1:-1:-1;;;;;22454:14:0;;22469:16;;;;;;;;;-1:-1:-1;;;;;22469:16:0;-1:-1:-1;;;;;22469:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22469:23:0;22454:58;;;-1:-1:-1;;;;;;22454:58:0;;;;;;;-1:-1:-1;;;;;22454:58:0;;;;;;;-1:-1:-1;;22454:58:0;;;;;;;;;;22469:23;;22454:58;;;;;;;-1:-1:-1;22454:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22546:9:0;;;22523:53;;;-1:-1:-1;;;22523:53:0;;-1:-1:-1;;;;;22546:9:0;;;22523:53;;;;;;;-1:-1:-1;;22523:53:0;;;;;:14;;;;;;:53;;;;;22454:58;;22523:53;;;;;;;22546:9;22523:14;:53;;;;;;;;;;25612:594;25690:21;25714:16;;;:7;:16;;;;;25749:10;;-1:-1:-1;;;;;25749:10:0;25763;25749:24;25741:53;;;;;-1:-1:-1;;;25741:53:0;;;;;;;;;;;;-1:-1:-1;;;25741:53:0;;;;;;;;;;;;;;;25809:14;;;;25805:88;;;25850:6;;:31;;;-1:-1:-1;;;25850:31:0;;25875:4;25850:31;;;;;;-1:-1:-1;;;;;25850:6:0;;;;:16;;:31;;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25850:31:0;;-1:-1:-1;25805:88:0;25907:13;;;;;;25903:194;;25958:15;;;;25942:47;;;-1:-1:-1;;;25942:47:0;;;;;;;;;;-1:-1:-1;;;;;25958:15:0;;;;25942:38;;:47;;;;;25958:15;;25942:47;;;;;;;;25958:15;;25942:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25903:194;;;26033:15;;;;26058:17;;;;26022:63;;;-1:-1:-1;;;26022:63:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26033:15:0;;;;26022:35;;:63;;;;;26033:15;;26022:63;;;;;;;;26033:15;;26022:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25903:194;26122:12;;;;:25;;26139:7;26122:16;:25::i;:::-;26107:12;;;:40;26173:12;;:25;;26190:7;26173:16;:25::i;:::-;26158:12;:40;-1:-1:-1;;;25612:594:0:o;31616:3302::-;31715:16;;:23;;;-1:-1:-1;;;31715:23:0;;;;31700:12;;-1:-1:-1;;;;;31715:16:0;;:21;;:23;;;;;;;;;;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31715:23:0;31795:16;;:32;;;-1:-1:-1;;;31795:32:0;;31766:10;31795:32;;;;;;;;31715:23;;-1:-1:-1;31766:10:0;;-1:-1:-1;;;;;31795:16:0;;;;:24;;:32;;;;;31715:23;;31795:32;;;;;;;;:16;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31795:32:0;31787:51;;;;;-1:-1:-1;;;31787:51:0;;;;;;;;;;;;-1:-1:-1;;;31787:51:0;;;;;;;;;;;;;;;31903:21;31927:16;;;:7;:16;;;;;31954:15;31935:7;31954:6;:15::i;:::-;32003:16;;;;32055:36;;;-1:-1:-1;;;32055:36:0;;32085:4;32055:36;;;;;;-1:-1:-1;;;;;32003:16:0;;;;31982:18;;32003:16;;32055:21;;:36;;;;;;;;;;;;;;;32003:16;32055:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32055:36:0;32125:28;;;;32055:36;;-1:-1:-1;32108:45:0;;32104:58;;;32155:7;;;;;;;32104:58;32216:4;;32174:64;;32194:11;;-1:-1:-1;;;;;32216:4:0;32223:14;32174:11;:64::i;:::-;32267:4;;:29;;;-1:-1:-1;;;32267:29:0;;32290:4;32267:29;;;;;;32249:15;;-1:-1:-1;;;;;32267:4:0;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32267:29:0;;-1:-1:-1;32313:11:0;;32309:2602;;32341:17;32377:15;32411:31;32495:1;32467:16;;;;;;;;;-1:-1:-1;;;;;32467:16:0;-1:-1:-1;;;;;32467:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32467:25:0;:29;32463:192;;;32527:59;18705:5;32527:38;32539:16;;;;;;;;;-1:-1:-1;;;;;32539:16:0;-1:-1:-1;;;;;32539:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32539:25:0;32527:7;;:11;:38::i;:::-;:42;;:59::i;:::-;32517:69;-1:-1:-1;32617:22:0;:9;32517:69;32617:13;:22::i;:::-;32605:34;;32463:192;32675:16;;:41;;;-1:-1:-1;;;32675:41:0;;;;32719:1;;-1:-1:-1;;;;;32675:16:0;;:39;;:41;;;;;;;;;;;;;;:16;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32675:41:0;:45;32671:256;;;32767:75;18705:5;32767:54;32779:16;;;;;;;;;-1:-1:-1;;;;;32779:16:0;-1:-1:-1;;;;;32779:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32767:75;32741:101;-1:-1:-1;32873:38:0;:9;32741:101;32873:13;:38::i;:::-;32861:50;;32671:256;32943:23;32969:29;32996:1;32969:22;:7;32981:9;32969:11;:22::i;:29::-;33105:4;;33120:12;;32943:55;;-1:-1:-1;33085:66:0;;-1:-1:-1;;;;;33105:4:0;;;;33120:12;32943:55;33085:11;:66::i;:::-;33166:15;:13;:15::i;:::-;33208:4;;:29;;;-1:-1:-1;;;33208:29:0;;33231:4;33208:29;;;;;;-1:-1:-1;;;;;33208:4:0;;;;:14;;:29;;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33208:29:0;33296:16;;:31;;;-1:-1:-1;;;33296:31:0;;;;33208:29;;-1:-1:-1;33273:20:0;;-1:-1:-1;;;;;33296:16:0;;;;:29;;:31;;;;;33208:29;;33296:31;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33296:31:0;33374:16;;:36;;;-1:-1:-1;;;33374:36:0;;;;33296:31;;-1:-1:-1;33346:25:0;;-1:-1:-1;;;;;33374:16:0;;;;:34;;:36;;;;;33296:31;;33374:36;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33374:36:0;;-1:-1:-1;33435:11:0;;;;;:46;;-1:-1:-1;;;;;;33450:31:0;;;;33435:46;33431:369;;;33549:7;33510:36;:7;33522:23;33510:11;:36::i;:::-;:46;33506:149;;;33595:36;:7;33607:23;33595:11;:36::i;:::-;33585:46;;33506:149;33677:4;;:41;;;-1:-1:-1;;;33677:41:0;;-1:-1:-1;;;;;33677:41:0;;;;;;;;;;;;;;;:4;;;;;:13;;:41;;;;;;;;;;;;;;:4;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33751:4:0;;:29;;;-1:-1:-1;;;33751:29:0;;33774:4;33751:29;;;;;;-1:-1:-1;;;;;33751:4:0;;;;:14;;:29;;;;;33677:41;;33751:29;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33751:29:0;;-1:-1:-1;33431:369:0;33850:1;33824:23;:27;:57;;;;-1:-1:-1;;;;;;33855:26:0;;;;33824:57;33820:389;;;33925:16;;:27;;;-1:-1:-1;;;33925:27:0;;;;33906:16;;-1:-1:-1;;;;;33925:16:0;;:25;;:27;;;;;;;;;;;;;;:16;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33925:27:0;33995:4;;33925:27;;-1:-1:-1;33975:45:0;;-1:-1:-1;;;;;33995:4:0;33925:27;34012:7;33975:11;:45::i;:::-;34050:8;-1:-1:-1;;;;;34043:25:0;;34069:12;34090:8;-1:-1:-1;;;;;34083:26:0;;34118:4;34083:41;;;;;;;;;;;;;-1:-1:-1;;;;;34083:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34083:41:0;34043:82;;;-1:-1:-1;;;;;;34043:82:0;;;;;;;-1:-1:-1;;;;;34043:82:0;;;;;;;;;;;;;;;;;;;;34083:41;;34043:82;;;;;;;-1:-1:-1;34043:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34148:41:0;;;-1:-1:-1;;;34148:41:0;;;;-1:-1:-1;;;;;34148:39:0;;;;;:41;;;;;34043:82;;34148:41;;;;;;;;:39;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33820:389:0;-1:-1:-1;;34262:6:0;;:31;;;-1:-1:-1;;;34262:31:0;;34287:4;34262:31;;;;;;34240:19;;-1:-1:-1;;;;;34262:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34262:31:0;;-1:-1:-1;34312:15:0;;34308:592;;-1:-1:-1;;34352:11:0;:32;34348:537;;;34510:6;;:34;;;-1:-1:-1;;;34510:34:0;;-1:-1:-1;;;;;34510:34:0;;;;;;;;;;;;;;;:6;;;;;:15;;:34;;;;;;;;;;;;;;:6;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34348:537:0;;-1:-1:-1;34348:537:0;;34597:6;;:37;;;-1:-1:-1;;;34597:37:0;;34622:4;34597:37;;;;-1:-1:-1;;;;;34597:37:0;;;;;;;;;34637:11;;34597:6;;;;;:16;;:37;;;;;;;;;;;;;;;:6;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34597:37:0;:51;34593:191;;;34677:6;;:23;;;-1:-1:-1;;;34677:23:0;;-1:-1:-1;;;;;34677:23:0;;;;;;;:6;:23;;;;;;;;:6;;;:14;;:23;;;;;;;;;;;;;;;;;;:6;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34727:6:0;;:33;;;-1:-1:-1;;;34727:33:0;;-1:-1:-1;;;;;34727:33:0;;;;;;;;;;;;;;;:6;;;;;:14;;:33;;;;;34677:23;;34727:33;;;;;;;:6;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34593:191:0;34822:4;-1:-1:-1;;;;;34806:33:0;;34840:11;34853;34806:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34348:537;32309:2602;;;;;31616:3302;;;;;;;;:::o;19884:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19884:43:0;;;;;;;;;;;;;;;;;;;;;;:::o;18797:81::-;;;-1:-1:-1;;;;;18797:81:0;;:::o;21492:834::-;21724:10;;-1:-1:-1;;;;;21724:10:0;21710;:24;21702:48;;;;;-1:-1:-1;;;21702:48:0;;;;;;;;;;;;-1:-1:-1;;;21702:48:0;;;;;;;;;;;;;;;21761:16;;;;:7;:16;;;;;;;;:31;;-1:-1:-1;;;;;;21761:31:0;;;-1:-1:-1;;;;;21761:31:0;;;;;;;;;-1:-1:-1;21803:28:0;;:43;;;;;;;;;;;;;21857:27;;;:41;;;;;;;;;;;;21909:29;;;:45;;;21965:40;;;;:67;;;22043:25;;;:37;;-1:-1:-1;;22043:37:0;;;;;;;22091:26;;;;:39;;;22170:9;;22141:59;;-1:-1:-1;;;22141:59:0;;22170:9;;22141:59;;;;;;;-1:-1:-1;;22141:59:0;;;;;;21803:43;;22141:20;;:59;;;;;21761:16;;22141:59;;;;;;;;;;21803:43;22141:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22211:6:0;;:41;;;-1:-1:-1;;;22211:41:0;;-1:-1:-1;;;;;22211:41:0;;;;;;;-1:-1:-1;;22211:41:0;;;;;;:6;;;;;:14;;:41;;;;;22141:59;;22211:41;;;;;;;:6;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22263:6:0;;:55;;;-1:-1:-1;;;22263:55:0;;-1:-1:-1;;;;;22263:55:0;;;;;;;-1:-1:-1;;22263:55:0;;;;;;:6;;;;;:14;;:55;;;;;22211:41;;22263:55;;;;;;;:6;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;21492:834:0:o;28782:248::-;28893:10;;-1:-1:-1;;;;;28893:10:0;28879;:24;;:52;;-1:-1:-1;28921:10:0;;-1:-1:-1;;;;;28921:10:0;28907;:24;28879:52;28871:91;;;;;-1:-1:-1;;;28871:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28871:91:0;;;;;;;;;;;;;;;28984:4;-1:-1:-1;;;;;28973:34:0;;29008:13;28973:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28782:248;;:::o;26440:405::-;26493:21;26517:16;;;:7;:16;;;;;26548:13;;;;;;26544:294;;26599:4;:15;;;;;;;;;;-1:-1:-1;;;;;26599:15:0;-1:-1:-1;;;;;26583:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26544:294;;;26649:13;;;;;;;:18;26645:193;;;26695:15;;;;26720:17;;;;26684:57;;;-1:-1:-1;;;26684:57:0;;;;;;;;;26695:15;26684:57;;;;;;;;-1:-1:-1;;;;;26695:15:0;;;;26684:35;;:57;;;;;26695:15;26684:57;;;;;;26695:15;;26684:57;;;;;;;;;;26645:193;26785:15;;;;26808:17;;;;26774:52;;;-1:-1:-1;;;26774:52:0;;;;;;;;;;-1:-1:-1;;;;;26785:15:0;;;;26774:33;;:52;;;;;26785:15;;26774:52;;;;;;;;26785:15;;26774:52;;;;;;;;;;902:181;960:7;992:5;;;1016:6;;;;1008:46;;;;;-1:-1:-1;;;1008:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1074:1;902:181;-1:-1:-1;;;902:181:0:o;30299:897::-;-1:-1:-1;;;;;30406:19:0;;;30390:13;30406:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;30449:19;;30445:744;;30596:89;;;-1:-1:-1;;;30596:89:0;;-1:-1:-1;;;;;30596:89:0;;;;;;;;;;;;;;;;;;;;30664:1;30596:89;;;;-1:-1:-1;;30596:89:0;;;;;;:41;;;;;;:89;;;;;;;;;;;-1:-1:-1;30596:41:0;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30445:744:0;;-1:-1:-1;30445:744:0;;-1:-1:-1;;;;;30757:20:0;;;;;;;:12;:20;;;;;;;;:29;;;;;;;;;;;;30733:53;;;;;;;;;;;;;;;;;:21;;:53;;;30757:29;30733:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30733:53:0;;;;;;;;;;;;;;;;;;;;;;;30805:4;:11;30820:1;30805:16;30801:195;;;30893:16;;;30907:1;30893:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30893:16:0;30886:23;;30938:6;30928:4;30933:1;30928:7;;;;;;;;;;;;;:16;-1:-1:-1;;;;;30928:16:0;;;-1:-1:-1;;;;;30928:16:0;;;;;30973:7;30963:4;30968:1;30963:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;30963:17:0;;;-1:-1:-1;;;;;30963:17:0;;;;;30801:195;31095:9;;-1:-1:-1;;;;;31095:9:0;:34;31130:7;31095:9;31142:4;31156;31163:13;:3;31171:4;31163:7;:13::i;:::-;31095:82;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31095:82:0;;;;;;;;;;;;-1:-1:-1;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30445:744;30299:897;;;;:::o;2256:471::-;2314:7;2559:6;2555:47;;-1:-1:-1;2589:1:0;2582:8;;2555:47;2626:5;;;2630:1;2626;:5;:1;2650:5;;;;;:10;2642:56;;;;-1:-1:-1;;;2642:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3203:132;3261:7;3288:39;3292:1;3295;3288:39;;;;;;;;;;;;;;;;;:3;:39::i;1366:136::-;1424:7;1451:43;1455:1;1458;1451:43;;;;;;;;;;;;;;;;;:3;:43::i;31204:346::-;31360:9;;;31391:12;;31414;;31429:37;;;-1:-1:-1;;;31429:37:0;;31460:4;31429:37;;;;;;;;-1:-1:-1;;;;;31360:9:0;;;;:22;;31391:12;;;;31414;;;;31391;;31429:22;;:37;;;;;;;;;;;;;;;31391:12;31429:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31429:37:0;31468:12;;:37;;;-1:-1:-1;;;31468:37:0;;31499:4;31468:37;;;;;;-1:-1:-1;;;;;31468:12:0;;;;:22;;:37;;;;;31429;;31468;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31468:37:0;31507:1;;31521:4;31528:13;:3;31536:4;31528:7;:13::i;:::-;31360:182;;;;;;;;;;;;;-1:-1:-1;;;;;31360:182:0;;;;;;-1:-1:-1;;;;;31360:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31360:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3831:278;3917:7;3952:12;3945:5;3937:28;;;;-1:-1:-1;;;3937:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3976:9;3992:1;3988;:5;;;;;;;3831:278;-1:-1:-1;;;;;3831:278:0:o;1805:192::-;1891:7;1927:12;1919:6;;;;1911:29;;;;-1:-1:-1;;;1911:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1963:5:0;;;1805:192::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://94f2ae6747923d75b5d9886666473ab42a54e2436e1b3349d748f3d38ebe16d9

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.