ETH Price: $3,941.71 (+1.77%)

Token

ERC20 ***
 

Overview

Max Total Supply

5,037.701748 ERC20 ***

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
0.000066 ERC20 ***

Value
$0.00
0xB2E89a8F93CEdcFAE23304A3615A64FeB0e02514
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
yUSDT

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-28
*/

pragma solidity 0.5.17;
pragma experimental ABIEncoderV2;

interface IUniswap {
  // To convert DAI to ETH
  function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
  // To convert ETH to YELD and burn it
  function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract Context {
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address payable private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address payable) {
        return _owner;
    }
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address payable newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address payable newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 _totalSupply;
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract ReentrancyGuard {
    uint256 private _guardCounter;

    constructor () internal {
        _guardCounter = 1;
    }

    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface Compound {
    function mint ( uint256 mintAmount ) external returns ( uint256 );
    function redeem(uint256 redeemTokens) external returns (uint256);
    function exchangeRateStored() external view returns (uint);
}

interface Fulcrum {
    function mint(address receiver, uint256 amount) external payable returns (uint256 mintAmount);
    function burn(address receiver, uint256 burnAmount) external returns (uint256 loanAmountPaid);
    function assetBalanceOf(address _owner) external view returns (uint256 balance);
}

interface ILendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
}

interface Aave {
    function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external;
}

interface AToken {
    function redeem(uint256 amount) external;
}

interface IIEarnManager {
    function recommend(address _token) external view returns (
      string memory choice,
      uint256 capr,
      uint256 iapr,
      uint256 aapr,
      uint256 dapr
    );
}

contract Structs {
    struct Val {
        uint256 value;
    }

    enum ActionType {
        Deposit,   // supply tokens
        Withdraw  // borrow tokens
    }

    enum AssetDenomination {
        Wei // the amount is denominated in wei
    }

    enum AssetReference {
        Delta // the amount is given as a delta from the current value
    }

    struct AssetAmount {
        bool sign; // true if positive
        AssetDenomination denomination;
        AssetReference ref;
        uint256 value;
    }

    struct ActionArgs {
        ActionType actionType;
        uint256 accountId;
        AssetAmount amount;
        uint256 primaryMarketId;
        uint256 secondaryMarketId;
        address otherAddress;
        uint256 otherAccountId;
        bytes data;
    }

    struct Info {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }
}

contract DyDx is Structs {
    function getAccountWei(Info memory account, uint256 marketId) public view returns (Wei memory);
    function operate(Info[] memory, ActionArgs[] memory) public;
}

interface LendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
    function getLendingPoolCore() external view returns (address);
}

contract yUSDT is ERC20, ERC20Detailed, ReentrancyGuard, Ownable, Structs {
  using SafeERC20 for IERC20;
  using Address for address;
  using SafeMath for uint256;

  uint256 public pool;
  address public token;
  address public compound;
  address public fulcrum;
  address public aave;
  address public aaveToken;
  address public dydx;
  uint256 public dToken;
  address public apr;

  // Yeld
  mapping(address => uint256) public depositBlockStarts;
  address public uniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
  address public usdt = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
  address public weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
  address payable public retirementYeldTreasury;
  IERC20 public yeldToken;
  uint256 public maximumTokensToBurn = 50000 * 1e18;
  uint256 public constant oneDayInBlocks = 6500;
  uint256 public yeldToRewardPerDay = 50e18; // 100 YELD per day per 1 million stablecoins padded with 18 zeroes to have that flexibility
  uint256 public constant oneMillion = 1e6;
  // Yeld

  enum Lender {
      NONE,
      DYDX,
      COMPOUND,
      AAVE,
      FULCRUM
  }

  Lender public provider = Lender.NONE;

  constructor (address _yeldToken, address payable _retirementYeldTreasury) public ERC20Detailed("yeld USDT", "yUSDT", 6) {
    token = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);
    apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    fulcrum = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f);
    aaveToken = address(0x71fc860F7D3A592A4a98740e39dB31d25db65ae8);
    compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    dToken = 0;
    yeldToken = IERC20(_yeldToken);
    retirementYeldTreasury = _retirementYeldTreasury;
    approveToken();
  }

  // Yeld
  // To receive ETH after converting it from USDT
  function () external payable {}
  function setRetirementYeldTreasury(address payable _treasury) public onlyOwner {
    retirementYeldTreasury = _treasury;
  }
  // In case a new uniswap router version is released
  function setUniswapRouter(address _uniswapRouter) public onlyOwner {
    uniswapRouter = _uniswapRouter;
  }
  function extractTokensIfStuck(address _token, uint256 _amount) public onlyOwner {
    IERC20(_token).transfer(msg.sender, _amount);
  }
  function extractETHIfStuck() public onlyOwner {
    owner().transfer(address(this).balance);
  }
  function changeYeldToRewardPerDay(uint256 _amount) public onlyOwner {
    yeldToRewardPerDay = _amount;
  }
  function getGeneratedYelds() public view returns(uint256) {
    uint256 blocksPassed;
    if (depositBlockStarts[msg.sender] > 0) {
      blocksPassed = block.number.sub(depositBlockStarts[msg.sender]);
    } else {
      return 0;
    }
    uint256 ibalance = balanceOf(msg.sender); // Balance of yTokens
    uint256 accomulatedStablecoins;
    if (_totalSupply <= 0) {
      accomulatedStablecoins = 0;
    } else {
      accomulatedStablecoins = (calcPoolValueInToken().mul(ibalance)).div(_totalSupply);
    }
    uint256 generatedYelds = accomulatedStablecoins.mul(1e12).div(oneMillion).mul(yeldToRewardPerDay).div(1e18).mul(blocksPassed).div(oneDayInBlocks);
    return generatedYelds;
  }
  // Converts USDT to ETH and returns how much ETH has been received from Uniswap
  function usdtToETH(uint256 _amount) internal returns(uint256) {
      IERC20(usdt).safeApprove(uniswapRouter, 0);
      IERC20(usdt).safeApprove(uniswapRouter, _amount);
      address[] memory path = new address[](2);
      path[0] = usdt;
      path[1] = weth;
      // swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
      // 'amounts' is an array where [0] is input USDT amount and [1] is the resulting ETH after the conversion
      // even tho we've specified the WETH address, we'll receive ETH since that's how it works on uniswap
      // https://uniswap.org/docs/v2/smart-contracts/router02/#swapexacttokensforeth
      uint[] memory amounts = IUniswap(uniswapRouter).swapExactTokensForETH(_amount, uint(0), path, address(this), now.add(1800));
      return amounts[1];
  }
  function buyNBurn(uint256 _ethToSwap) internal returns(uint256) {
    address[] memory path = new address[](2);
    path[0] = weth;
    path[1] = address(yeldToken);
    // Burns the tokens by taking them out of circulation, sending them to the 0x0 address
    uint[] memory amounts = IUniswap(uniswapRouter).swapExactETHForTokens.value(_ethToSwap)(uint(0), path, address(0), now.add(1800));
    return amounts[1];
  }
  // Yeld


  // Quick swap low gas method for pool swaps
  function deposit(uint256 _amount)
      external
      nonReentrant
  {
      require(_amount > 0, "deposit must be greater than 0");
      pool = _calcPoolValueInToken();
      IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);
        
      // Yeld
      depositBlockStarts[msg.sender] = block.number;
      // Yeld

      // Calculate pool shares
      uint256 shares = 0;
      if (pool == 0) {
        shares = _amount;
        pool = _amount;
      } else {
        shares = (_amount.mul(_totalSupply)).div(pool);
      }
      pool = _calcPoolValueInToken();
      _mint(msg.sender, shares);
      rebalance();
  }

  // No rebalance implementation for lower fees and faster swaps
  function withdraw(uint256 _shares)
      external
      nonReentrant
  {
      require(_shares > 0, "withdraw must be greater than 0");
      uint256 ibalance = balanceOf(msg.sender);
      require(_shares <= ibalance, "insufficient balance");
      pool = _calcPoolValueInToken();
      // Yeld
      uint256 generatedYelds = getGeneratedYelds();
      // Yeld
      uint256 stablecoinsToWithdraw = (pool.mul(_shares)).div(_totalSupply);
      _balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance");
      _totalSupply = _totalSupply.sub(_shares);
      emit Transfer(msg.sender, address(0), _shares);
      uint256 b = IERC20(token).balanceOf(address(this));
      if (b < stablecoinsToWithdraw) {
        _withdrawSome(stablecoinsToWithdraw.sub(b));
      }

            // Yeld
      // Take 1% of the amount to withdraw
      uint256 onePercent = stablecoinsToWithdraw.div(100);
      depositBlockStarts[msg.sender] = block.number;
      yeldToken.transfer(msg.sender, generatedYelds);

      // Take a portion of the profits for the buy and burn and retirement yeld
      // Convert half the USDT earned into ETH for the protocol algorithms
      uint256 stakingProfits = usdtToETH(onePercent);
      uint256 tokensAlreadyBurned = yeldToken.balanceOf(address(0));
      if (tokensAlreadyBurned < maximumTokensToBurn) {
        // 98% is the 49% doubled since we already took the 50%
        uint256 ethToSwap = stakingProfits.mul(98).div(100);
        // Buy and burn only applies up to 50k tokens burned
        buyNBurn(ethToSwap);
        // 1% for the Retirement Yield
        uint256 retirementYeld = stakingProfits.mul(2).div(100);
        // Send to the treasury
        retirementYeldTreasury.transfer(retirementYeld);
      } else {
        // If we've reached the maximum burn point, send half the profits to the treasury to reward holders
        uint256 retirementYeld = stakingProfits;
        // Send to the treasury
        retirementYeldTreasury.transfer(retirementYeld);
      }
      IERC20(token).safeTransfer(msg.sender, stablecoinsToWithdraw.sub(onePercent));
      // Yeld

      pool = _calcPoolValueInToken();
      rebalance();
  }

  // Ownable setters incase of support in future for these systems
  function set_new_APR(address _new_APR) public onlyOwner {
      apr = _new_APR;
  }
  function set_new_FULCRUM(address _new_FULCRUM) public onlyOwner {
      fulcrum = _new_FULCRUM;
  }
  function set_new_COMPOUND(address _new_COMPOUND) public onlyOwner {
      compound = _new_COMPOUND;
  }
  function set_new_DTOKEN(uint256 _new_DTOKEN) public onlyOwner {
      dToken = _new_DTOKEN;
  }

  function recommend() public view returns (Lender) {
    (,uint256 capr,uint256 iapr,uint256 aapr,uint256 dapr) = IIEarnManager(apr).recommend(token);
    uint256 max = 0;
    if (capr > max) {
      max = capr;
    }
    if (iapr > max) {
      max = iapr;
    }
    if (aapr > max) {
      max = aapr;
    }
    if (dapr > max) {
      max = dapr;
    }

    Lender newProvider = Lender.NONE;
    if (max == capr) {
      newProvider = Lender.COMPOUND;
    } else if (max == iapr) {
      newProvider = Lender.FULCRUM;
    } else if (max == aapr) {
      newProvider = Lender.AAVE;
    } else if (max == dapr) {
      newProvider = Lender.DYDX;
    }
    return newProvider;
  }

  function supplyDydx(uint256 amount) public returns(uint) {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(true, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Deposit;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function _withdrawDydx(uint256 amount) internal {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(false, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Withdraw;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function getAave() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPool();
  }
  function getAaveCore() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPoolCore();
  }

  function approveToken() public {
      IERC20(token).safeApprove(compound, uint(-1)); //also add to constructor
      IERC20(token).safeApprove(dydx, uint(-1));
      IERC20(token).safeApprove(getAaveCore(), uint(-1));
      IERC20(token).safeApprove(fulcrum, uint(-1));
  }

  function balance() public view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }

  function balanceDydx() public view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function balanceCompound() public view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function balanceCompoundInToken() public view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function balanceFulcrumInToken() public view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function balanceFulcrum() public view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function balanceAave() public view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function _balance() internal view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }

  function _balanceDydx() internal view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function _balanceCompound() internal view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function _balanceCompoundInToken() internal view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function _balanceFulcrumInToken() internal view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function _balanceFulcrum() internal view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function _balanceAave() internal view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function _withdrawAll() internal {
    uint256 amount = _balanceCompound();
    if (amount > 0) {
      _withdrawCompound(amount);
    }
    amount = _balanceDydx();
    if (amount > 0) {
      _withdrawDydx(amount);
    }
    amount = _balanceFulcrum();
    if (amount > 0) {
      _withdrawFulcrum(amount);
    }
    amount = _balanceAave();
    if (amount > 0) {
      _withdrawAave(amount);
    }
  }

  function _withdrawSomeCompound(uint256 _amount) internal {
    uint256 b = balanceCompound();
    uint256 bT = balanceCompoundInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawCompound(amount);
  }

  // 1999999614570950845
  function _withdrawSomeFulcrum(uint256 _amount) internal {
    // Balance of fulcrum tokens, 1 iDAI = 1.00x DAI
    uint256 b = balanceFulcrum(); // 1970469086655766652
    // Balance of token in fulcrum
    uint256 bT = balanceFulcrumInToken(); // 2000000803224344406
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawFulcrum(amount);
  }

  function _withdrawSome(uint256 _amount) internal {
    if (provider == Lender.COMPOUND) {
      _withdrawSomeCompound(_amount);
    }
    if (provider == Lender.AAVE) {
      require(balanceAave() >= _amount, "insufficient funds");
      _withdrawAave(_amount);
    }
    if (provider == Lender.DYDX) {
      require(balanceDydx() >= _amount, "insufficient funds");
      _withdrawDydx(_amount);
    }
    if (provider == Lender.FULCRUM) {
      _withdrawSomeFulcrum(_amount);
    }
  }

  function rebalance() public {
    Lender newProvider = recommend();

    if (newProvider != provider) {
      _withdrawAll();
    }

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        supplyDydx(balance());
      } else if (newProvider == Lender.FULCRUM) {
        supplyFulcrum(balance());
      } else if (newProvider == Lender.COMPOUND) {
        supplyCompound(balance());
      } else if (newProvider == Lender.AAVE) {
        supplyAave(balance());
      }
    }

    provider = newProvider;
  }

  // Internal only rebalance for better gas in redeem
  function _rebalance(Lender newProvider) internal {
    if (_balance() > 0) {
      if (newProvider == Lender.DYDX) {
        supplyDydx(_balance());
      } else if (newProvider == Lender.FULCRUM) {
        supplyFulcrum(_balance());
      } else if (newProvider == Lender.COMPOUND) {
        supplyCompound(_balance());
      } else if (newProvider == Lender.AAVE) {
        supplyAave(_balance());
      }
    }
    provider = newProvider;
  }

  function supplyAave(uint amount) public {
      Aave(getAave()).deposit(token, amount, 0);
  }
  function supplyFulcrum(uint amount) public {
      require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed");
  }
  function supplyCompound(uint amount) public {
      require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed");
  }
  function _withdrawAave(uint amount) internal {
      AToken(aaveToken).redeem(amount);
  }
  function _withdrawFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed");
  }
  function _withdrawCompound(uint amount) internal {
      require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed");
  }

  function _calcPoolValueInToken() internal view returns (uint) {
    return _balanceCompoundInToken()
      .add(_balanceFulcrumInToken())
      .add(_balanceDydx())
      .add(_balanceAave())
      .add(_balance());
  }

  function calcPoolValueInToken() public view returns (uint) {
    return balanceCompoundInToken()
      .add(balanceFulcrumInToken())
      .add(balanceDydx())
      .add(balanceAave())
      .add(balance());
  }

  function getPricePerFullShare() public view returns (uint) {
    uint _pool = calcPoolValueInToken();
    return _pool.mul(1e18).div(_totalSupply);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_yeldToken","type":"address"},{"internalType":"address payable","name":"_retirementYeldTreasury","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeYeldToRewardPerDay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositBlockStarts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"extractETHIfStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"extractTokensIfStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGeneratedYelds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumTokensToBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oneDayInBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oneMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yUSDT.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yUSDT.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retirementYeldTreasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"}],"name":"setRetirementYeldTreasury","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_uniswapRouter","type":"address"}],"name":"setUniswapRouter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_APR","type":"address"}],"name":"set_new_APR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_COMPOUND","type":"address"}],"name":"set_new_COMPOUND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_DTOKEN","type":"uint256"}],"name":"set_new_DTOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_FULCRUM","type":"address"}],"name":"set_new_FULCRUM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yeldToRewardPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"yeldToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

6080604052601280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560138054821673dac17f958d2ee523a2206206994597c13d831ec71790556014805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055690a968163f0a57b4000006017556802b5e3af16b18800006018556019805460ff191690553480156200009c57600080fd5b5060405162004cb538038062004cb5833981016040819052620000bf9162000759565b60408051808201825260098152681e595b19081554d11560ba1b6020808301918252835180850190945260058452641e5554d11560da1b90840152815191929160069162000111916003919062000669565b5081516200012790600490602085019062000669565b506005805460ff191660ff92909216919091179055505060016006556200014d620002bd565b600780546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600980546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec71790915560108054821673dd6d648c991f7d47454354f4ef326b04025a48a8179055600e80548216731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e179055600c805482167324a42fd28c976a61df5d00d0599c34c4f90748c8179055600b8054821673f013406a0b1d544238083df0b93ad0d2cbe0f65f179055600d805482167371fc860f7d3a592a4a98740e39db31d25db65ae8179055600a805482167339aa39c021dfbae8fac545936693ac917d5e75631790556000600f55601680546001600160a01b03858116918416919091179091556015805491841691909216179055620002b56001600160e01b03620002c216565b505062000a7a565b335b90565b600a54600954620002ef916001600160a01b03918216911660001962000384602090811b6200290517901c565b600e546009546200031c916001600160a01b03918216911660001962000384602090811b6200290517901c565b62000355620003336001600160e01b036200049e16565b6009546001600160a01b03169060001962000384602090811b6200290517901c565b600b5460095462000382916001600160a01b03918216911660001962000384602090811b6200290517901c565b565b801580620004135750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90620003bd903090869060040162000965565b60206040518083038186803b158015620003d657600080fd5b505afa158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620004119190810190620007b9565b155b6200043b5760405162461bcd60e51b81526004016200043290620009c7565b60405180910390fd5b6040516200049990849063095ea7b360e01b9062000460908690869060240162000984565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b03938416179052906200052416565b505050565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b158015620004e457600080fd5b505afa158015620004f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200051f919081019062000738565b905090565b62000543826001600160a01b03166200062c60201b62002ffe1760201c565b620005625760405162461bcd60e51b81526004016200043290620009d9565b60006060836001600160a01b03168360405162000580919062000950565b6000604051808303816000865af19150503d8060008114620005bf576040519150601f19603f3d011682016040523d82523d6000602084013e620005c4565b606091505b509150915081620005e95760405162461bcd60e51b81526004016200043290620009a3565b80511562000626578080602001905162000607919081019062000798565b620006265760405162461bcd60e51b81526004016200043290620009b5565b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590620006615750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006ac57805160ff1916838001178555620006dc565b82800160010185558215620006dc579182015b82811115620006dc578251825591602001919060010190620006bf565b50620006ea929150620006ee565b5090565b620002bf91905b80821115620006ea5760008155600101620006f5565b8051620007188162000a4a565b92915050565b8051620007188162000a64565b8051620007188162000a6f565b6000602082840312156200074b57600080fd5b60006200066184846200070b565b600080604083850312156200076d57600080fd5b60006200077b85856200070b565b92505060206200078e858286016200070b565b9150509250929050565b600060208284031215620007ab57600080fd5b60006200066184846200071e565b600060208284031215620007cc57600080fd5b60006200066184846200072b565b620007e581620009fd565b82525050565b6000620007f882620009eb565b620008048185620009ef565b93506200081681856020860162000a1b565b9290920192915050565b60006200082f602083620009f4565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006200086a602a83620009f4565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000620008b8603683620009f4565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015260400192915050565b600062000919601f83620009f4565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b620007e581620002bf565b60006200095e8284620007eb565b9392505050565b60408101620009758285620007da565b6200095e6020830184620007da565b60408101620009948285620007da565b6200095e602083018462000945565b60208082528101620007188162000820565b6020808252810162000718816200085b565b602080825281016200071881620008a9565b6020808252810162000718816200090a565b5190565b919050565b90815260200190565b6000620007188262000a0f565b151590565b6001600160a01b031690565b60005b8381101562000a3857818101518382015260200162000a1e565b83811115620006265750506000910152565b62000a5581620009fd565b811462000a6157600080fd5b50565b62000a558162000a0a565b62000a5581620002bf565b61422b8062000a8a6000396000f3fe6080604052600436106103ce5760003560e01c80637f50d4d8116101fd578063bbf3164411610118578063f2978d98116100ab578063f5ff19161161007a578063f5ff191614610a12578063f69e204614610a32578063f7c1ec7714610a47578063f82ce27d14610a5c578063fc0c546a14610a71576103ce565b8063f2978d98146109b3578063f29e15a2146109c8578063f2fde38b146109dd578063f5a41dea146109fd576103ce565b8063dd62ed3e116100e7578063dd62ed3e1461093e578063e849d6591461095e578063ebc511601461097e578063f02fbd4a14610993576103ce565b8063bbf31644146108d4578063bea9849e146108f4578063cf8ca42614610914578063d9d7858a14610929576103ce565b80639ff011b911610190578063a9059cbb1161015f578063a9059cbb1461085f578063a9a1015a1461087f578063b69ef8a81461089f578063b6b55f25146108b4576103ce565b80639ff011b9146107f5578063a160176d14610815578063a457c2d71461082a578063a72879711461084a576103ce565b80638e4ec6ef116101cc5780638e4ec6ef146107a15780638f32d59b146107b657806395d89b41146107cb57806399b71d5c146107e0576103ce565b80637f50d4d8146107355780638124955c14610757578063819faf7b146107775780638da5cb5b1461078c576103ce565b80633fc8cef3116102ed5780636ff2bf0811610280578063735de9f71161024f578063735de9f7146106d657806377c7b8fc146106eb5780637b82784c146107005780637d7c2a1c14610720576103ce565b80636ff2bf081461067757806370a082311461068c5780637137ef99146106ac578063715018a6146106c1576103ce565b806357ded9c9116102bc57806357ded9c91461061857806358782c211461062d57806361c1ec551461064257806365aab74914610657576103ce565b80633fc8cef3146105b9578063413e920d146105ce57806346357473146105e35780634fe4112914610603576103ce565b806323b872dd116103655780632f48ab7d116103345780632f48ab7d1461054d578063313ce56714610562578063395093511461058457806339c0a7e1146105a4576103ce565b806323b872dd146104d85780632622678c146104f85780632e1a7d4d1461050d5780632eb4520a1461052d576103ce565b8063095ea7b3116103a1578063095ea7b31461046c5780630eb2a2671461049957806316f0115b146104ae57806318160ddd146104c3576103ce565b806306636c1c146103d057806306a3fe591461040657806306fdde0314610428578063085d48831461044a575b005b3480156103dc57600080fd5b506103f06103eb366004613408565b610a86565b6040516103fd9190613f48565b60405180910390f35b34801561041257600080fd5b5061041b610c0a565b6040516103fd9190613cbd565b34801561043457600080fd5b5061043d610c19565b6040516103fd9190613dbc565b34801561045657600080fd5b5061045f610cb0565b6040516103fd9190613dae565b34801561047857600080fd5b5061048c6104873660046132db565b610cb9565b6040516103fd9190613d92565b3480156104a557600080fd5b506103f0610cd7565b3480156104ba57600080fd5b506103f0610d5d565b3480156104cf57600080fd5b506103f0610d63565b3480156104e457600080fd5b5061048c6104f336600461328e565b610d69565b34801561050457600080fd5b5061041b610df7565b34801561051957600080fd5b506103ce610528366004613408565b610e06565b34801561053957600080fd5b506103ce610548366004613218565b611274565b34801561055957600080fd5b5061041b6112ba565b34801561056e57600080fd5b506105776112c9565b6040516103fd9190613fe5565b34801561059057600080fd5b5061048c61059f3660046132db565b6112d2565b3480156105b057600080fd5b506103f0611326565b3480156105c557600080fd5b5061041b6113cd565b3480156105da57600080fd5b506103f06113dc565b3480156105ef57600080fd5b506103ce6105fe366004613218565b6113e3565b34801561060f57600080fd5b506103ce611429565b34801561062457600080fd5b5061041b611490565b34801561063957600080fd5b5061041b61149f565b34801561064e57600080fd5b506103f06114ae565b34801561066357600080fd5b506103ce610672366004613408565b6114df565b34801561068357600080fd5b506103f0611552565b34801561069857600080fd5b506103f06106a7366004613218565b611622565b3480156106b857600080fd5b506103f0611641565b3480156106cd57600080fd5b506103ce611683565b3480156106e257600080fd5b5061041b6116f1565b3480156106f757600080fd5b506103f0611700565b34801561070c57600080fd5b506103f061071b366004613218565b611733565b34801561072c57600080fd5b506103ce611745565b34801561074157600080fd5b5061074a611834565b6040516103fd9190613da0565b34801561076357600080fd5b506103ce610772366004613408565b611843565b34801561078357600080fd5b5061041b6118e5565b34801561079857600080fd5b5061041b6118f4565b3480156107ad57600080fd5b5061041b611903565b3480156107c257600080fd5b5061048c611912565b3480156107d757600080fd5b5061043d611938565b3480156107ec57600080fd5b506103ce611999565b34801561080157600080fd5b506103ce610810366004613408565b611a30565b34801561082157600080fd5b5061045f611a59565b34801561083657600080fd5b5061048c6108453660046132db565b611b6b565b34801561085657600080fd5b506103f0611bd9565b34801561086b57600080fd5b5061048c61087a3660046132db565b611c8e565b34801561088b57600080fd5b506103ce61089a3660046132db565b611ca2565b3480156108ab57600080fd5b506103f0611d4b565b3480156108c057600080fd5b506103ce6108cf366004613408565b611d7c565b3480156108e057600080fd5b506103ce6108ef366004613218565b611e4f565b34801561090057600080fd5b506103ce61090f366004613218565b611e95565b34801561092057600080fd5b506103f0611edb565b34801561093557600080fd5b506103f0611f0c565b34801561094a57600080fd5b506103f0610959366004613254565b611f12565b34801561096a57600080fd5b506103ce610979366004613408565b611f3d565b34801561098a57600080fd5b506103f0611fdc565b34801561099f57600080fd5b506103ce6109ae366004613408565b611fe2565b3480156109bf57600080fd5b506103f061200b565b3480156109d457600080fd5b506103f0612011565b3480156109e957600080fd5b506103ce6109f8366004613218565b612017565b348015610a0957600080fd5b506103f0612044565b348015610a1e57600080fd5b506103ce610a2d366004613218565b6120d7565b348015610a3e57600080fd5b5061041b61211d565b348015610a5357600080fd5b5061041b61212c565b348015610a6857600080fd5b5061041b6121a9565b348015610a7d57600080fd5b5061041b6121ee565b60408051600180825281830190925260009160609190816020015b610aa961303a565b815260200190600190039081610aa15790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110610aea57fe5b6020026020010181905250610afd613051565b6040805160808101909152600181526020810160008152602001600081526020018590529050610b2b61307a565b60008181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b610b6f61307a565b815260200190600190039081610b675790505090508181600081518110610b9257fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a4590610bcf9087908590600401613d6d565b600060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b5050505050505050919050565b600d546001600160a01b031681565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b505050505090505b90565b60195460ff1681565b6000610ccd610cc66121fd565b8484612201565b5060015b92915050565b600b546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b60206040518083038186803b158015610d2057600080fd5b505afa158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d589190810190613426565b905090565b60085481565b60025490565b6000610d768484846122b5565b610dec84610d826121fd565b610de78560405180606001604052806028815260200161419c602891396001600160a01b038a16600090815260016020526040812090610dc06121fd565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6123cb16565b612201565b5060015b9392505050565b6015546001600160a01b031681565b600680546001019081905581610e375760405162461bcd60e51b8152600401610e2e90613e7d565b60405180910390fd5b6000610e4233611622565b905080831115610e645760405162461bcd60e51b8152600401610e2e90613e6d565b610e6c611641565b6008556000610e79611552565b90506000610ea4600254610e98876008546123f790919063ffffffff16565b9063ffffffff61243116565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250610eff9190879063ffffffff6123cb16565b33600090815260208190526040902055600254610f22908663ffffffff61247316565b60025560405160009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f5a908990613f48565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610f93903090600401613ccb565b60206040518083038186803b158015610fab57600080fd5b505afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fe39190810190613426565b90508181101561100557611005611000838363ffffffff61247316565b6124b5565b600061101883606463ffffffff61243116565b3360008181526011602052604090819020439055601654905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb9161105c918890600401613cd9565b602060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110ae9190810190613340565b5060006110ba8261258b565b6016546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906110f0908490600401613ccb565b60206040518083038186803b15801561110857600080fd5b505afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111409190810190613426565b90506017548110156111cb5760006111646064610e9885606263ffffffff6123f716565b905061116f81612708565b5060006111886064610e9886600263ffffffff6123f716565b6015546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156111c3573d6000803e3d6000fd5b505050611208565b60155460405183916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611205573d6000803e3d6000fd5b50505b6112353361121c878663ffffffff61247316565b6009546001600160a01b0316919063ffffffff61282116565b61123d611641565b600855611248611745565b5050505050505060065481146112705760405162461bcd60e51b8152600401610e2e90613eed565b5050565b61127c611912565b6112985760405162461bcd60e51b8152600401610e2e90613e5d565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6013546001600160a01b031681565b60055460ff1690565b6000610ccd6112df6121fd565b84610de785600160006112f06121fd565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61287a16565b600061133061303a565b600e5460408051808201825230815260006020820152600f54915163306430bb60e21b81526001600160a01b039093169263c190c2ec926113749291600401613f2d565b604080518083038186803b15801561138b57600080fd5b505afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113c391908101906133ea565b6020015191505090565b6014546001600160a01b031681565b620f424081565b6113eb611912565b6114075760405162461bcd60e51b8152600401610e2e90613e5d565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b611431611912565b61144d5760405162461bcd60e51b8152600401610e2e90613e5d565b6114556118f4565b6001600160a01b03166108fc479081150290604051600060405180830381858888f1935050505015801561148d573d6000803e3d6000fd5b50565b6010546001600160a01b031681565b600b546001600160a01b031681565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b6114e761212c565b600954604051636968703360e11b81526001600160a01b039283169263d2d0e0669261151d929116908590600090600401613d45565b600060405180830381600087803b15801561153757600080fd5b505af115801561154b573d6000803e3d6000fd5b5050505050565b33600090815260116020526040812054819015611591573360009081526011602052604090205461158a90439063ffffffff61247316565b905061159b565b6000915050610cad565b60006115a633611622565b9050600080600254116115bb575060006115dc565b6115d9600254610e98846115cd611641565b9063ffffffff6123f716565b90505b6000611619611964610e98866115cd670de0b6b3a7640000610e986018546115cd620f4240610e9864e8d4a510008d6123f790919063ffffffff16565b94505050505090565b6001600160a01b0381166000908152602081905260409020545b919050565b6000610d5861164e611d4b565b611677611659611edb565b611677611664611326565b61167761166f612044565b611677611bd9565b9063ffffffff61287a16565b61168b611912565b6116a75760405162461bcd60e51b8152600401610e2e90613e5d565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6012546001600160a01b031681565b60008061170b611641565b60025490915061172d90610e9883670de0b6b3a764000063ffffffff6123f716565b91505090565b60116020526000908152604090205481565b600061174f611a59565b60195490915060ff16600481111561176357fe5b81600481111561176f57fe5b1461177c5761177c61289f565b6000611786611d4b565b111561181357600181600481111561179a57fe5b14156117b1576117ab6103eb611d4b565b50611813565b60048160048111156117bf57fe5b14156117d5576117d0610772611d4b565b611813565b60028160048111156117e357fe5b14156117f4576117d0610979611d4b565b600381600481111561180257fe5b141561181357611813610672611d4b565b6019805482919060ff1916600183600481111561182c57fe5b021790555050565b6016546001600160a01b031681565b600b546040516340c10f1960e01b81526000916001600160a01b0316906340c10f19906118769030908690600401613cd9565b602060405180830381600087803b15801561189057600080fd5b505af11580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118c89190810190613426565b1161148d5760405162461bcd60e51b8152600401610e2e90613ecd565b600c546001600160a01b031681565b6007546001600160a01b031690565b600e546001600160a01b031681565b6007546000906001600160a01b03166119296121fd565b6001600160a01b031614905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b600a546009546119be916001600160a01b03918216911660001963ffffffff61290516565b600e546009546119e3916001600160a01b03918216911660001963ffffffff61290516565b611a096119ee6121a9565b6009546001600160a01b03169060001963ffffffff61290516565b600b54600954611a2e916001600160a01b03918216911660001963ffffffff61290516565b565b611a38611912565b611a545760405162461bcd60e51b8152600401610e2e90613e5d565b600f55565b6010546009546040516303622f8f60e61b815260009283928392839283926001600160a01b039182169263d88be3c092611a97921690600401613cbd565b60006040518083038186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aeb919081019061335e565b92975090955093509150600090508415611b025750835b80841115611b0d5750825b80831115611b185750815b80821115611b235750805b600081861415611b3557506002611b61565b84821415611b4557506004611b61565b83821415611b5557506003611b61565b82821415611b61575060015b9550505050505090565b6000610ccd611b786121fd565b84610de7856040518060600160405280602581526020016141c46025913960016000611ba26121fd565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6123cb16565b600080611be46114ae565b90508015610d5857610cd1670de0b6b3a7640000610e98600a60009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4957600080fd5b505afa158015611c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c819190810190613426565b849063ffffffff6123f716565b6000610ccd611c9b6121fd565b84846122b5565b611caa611912565b611cc65760405162461bcd60e51b8152600401610e2e90613e5d565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611cf49033908590600401613cd9565b602060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d469190810190613340565b505050565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b600680546001019081905581611da45760405162461bcd60e51b8152600401610e2e90613ebd565b611dac611641565b600855600954611dcd906001600160a01b031633308563ffffffff6129cb16565b336000908152601160205260408120439055600854611df25750600882905581611e10565b611e0d600854610e98600254866123f790919063ffffffff16565b90505b611e18611641565b600855611e2533826129f5565b611e2d611745565b5060065481146112705760405162461bcd60e51b8152600401610e2e90613eed565b611e57611912565b611e735760405162461bcd60e51b8152600401610e2e90613e5d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b611e9d611912565b611eb95760405162461bcd60e51b8152600401610e2e90613e5d565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b600f5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a5460405163140e25ad60e31b81526001600160a01b039091169063a0712d6890611f6d908490600401613f48565b602060405180830381600087803b158015611f8757600080fd5b505af1158015611f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611fbf9190810190613426565b1561148d5760405162461bcd60e51b8152600401610e2e90613e0d565b60185481565b611fea611912565b6120065760405162461bcd60e51b8152600401610e2e90613e5d565b601855565b61196481565b60175481565b61201f611912565b61203b5760405162461bcd60e51b8152600401610e2e90613e5d565b61148d81612ab5565b60008061204f610cd7565b90508015610d5857600b54604051630359f7eb60e11b81526001600160a01b03909116906306b3efd690612087903090600401613ccb565b60206040518083038186803b15801561209f57600080fd5b505afa1580156120b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cd19190810190613426565b6120df611912565b6120fb5760405162461bcd60e51b8152600401610e2e90613e5d565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b600c5460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b916004808301926020929190829003018186803b15801561217157600080fd5b505afa158015612185573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d589190810190613236565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b15801561217157600080fd5b6009546001600160a01b031681565b3390565b6001600160a01b0383166122275760405162461bcd60e51b8152600401610e2e90613ead565b6001600160a01b03821661224d5760405162461bcd60e51b8152600401610e2e90613dfd565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906122a8908590613f48565b60405180910390a3505050565b6001600160a01b0383166122db5760405162461bcd60e51b8152600401610e2e90613e8d565b6001600160a01b0382166123015760405162461bcd60e51b8152600401610e2e90613dcd565b61234481604051806060016040528060268152602001614176602691396001600160a01b038616600090815260208190526040902054919063ffffffff6123cb16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612379908263ffffffff61287a16565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122a8908590613f48565b600081848411156123ef5760405162461bcd60e51b8152600401610e2e9190613dbc565b505050900390565b60008261240657506000610cd1565b8282028284828161241357fe5b0414610df05760405162461bcd60e51b8152600401610e2e90613e3d565b6000610df083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b37565b6000610df083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123cb565b600260195460ff1660048111156124c857fe5b14156124d7576124d781612b6e565b600360195460ff1660048111156124ea57fe5b141561252057806124f9611edb565b10156125175760405162461bcd60e51b8152600401610e2e90613e9d565b61252081612bcc565b600160195460ff16600481111561253357fe5b14156125695780612542611326565b10156125605760405162461bcd60e51b8152600401610e2e90613e9d565b61256981612bfc565b600460195460ff16600481111561257c57fe5b141561148d5761148d81612d7a565b6012546013546000916125b1916001600160a01b0390811691168363ffffffff61290516565b6012546013546125d4916001600160a01b0391821691168463ffffffff61290516565b6040805160028082526060808301845292602083019080388339505060135482519293506001600160a01b03169183915060009061260e57fe5b6001600160a01b03928316602091820292909201015260145482519116908290600190811061263957fe5b6001600160a01b039283166020918202929092010152601254606091166318cbafe585600085306126724261070863ffffffff61287a16565b6040518663ffffffff1660e01b8152600401612692959493929190613f92565b600060405180830381600087803b1580156126ac57600080fd5b505af11580156126c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126e8919081019061330b565b9050806001815181106126f757fe5b602002602001015192505050919050565b6040805160028082526060808301845260009390929190602083019080388339505060145482519293506001600160a01b03169183915060009061274857fe5b6001600160a01b03928316602091820292909201015260165482519116908290600190811061277357fe5b6001600160a01b03928316602091820292909201015260125460609116637ff36ab585600085816127ac4261070863ffffffff61287a16565b6040518663ffffffff1660e01b81526004016127cb9493929190613f56565b6000604051808303818588803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526126e8919081019061330b565b604051611d4690849063a9059cbb60e01b906128439086908690602401613d37565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612dd8565b600082820183811015610df05760405162461bcd60e51b8152600401610e2e90613e1d565b60006128a96114ae565b905080156128ba576128ba81612ebd565b6128c2611326565b905080156128d3576128d381612bfc565b6128db610cd7565b905080156128ec576128ec81612f5c565b6128f4611edb565b9050801561148d5761148d81612bcc565b80158061298d5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061293b9030908690600401613cf4565b60206040518083038186803b15801561295357600080fd5b505afa158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061298b9190810190613426565b155b6129a95760405162461bcd60e51b8152600401610e2e90613efd565b604051611d4690849063095ea7b360e01b906128439086908690602401613d37565b6040516129ef9085906323b872dd60e01b9061284390879087908790602401613d0f565b50505050565b6001600160a01b038216612a1b5760405162461bcd60e51b8152600401610e2e90613f1d565b600254612a2e908263ffffffff61287a16565b6002556001600160a01b038216600090815260208190526040902054612a5a908263ffffffff61287a16565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612aa9908590613f48565b60405180910390a35050565b6001600160a01b038116612adb5760405162461bcd60e51b8152600401610e2e90613ded565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60008183612b585760405162461bcd60e51b8152600401610e2e9190613dbc565b506000838581612b6457fe5b0495945050505050565b6000612b786114ae565b90506000612b84611bd9565b905082811015612ba65760405162461bcd60e51b8152600401610e2e90613e9d565b6000612bc1600161167784610e98878963ffffffff6123f716565b90506129ef81612ebd565b600d5460405163db006a7560e01b81526001600160a01b039091169063db006a759061151d908490600401613f48565b604080516001808252818301909252606091816020015b612c1b61303a565b815260200190600190039081612c135790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110612c5c57fe5b6020026020010181905250612c6f613051565b6040805160808101909152600080825260208201908152602001600081526020018490529050612c9d61307a565b60018181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b612ce161307a565b815260200190600190039081612cd95790505090508181600081518110612d0457fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a4590612d419087908590600401613d6d565b600060405180830381600087803b158015612d5b57600080fd5b505af1158015612d6f573d6000803e3d6000fd5b505050505050505050565b6000612d84610cd7565b90506000612d90612044565b905082811015612db25760405162461bcd60e51b8152600401610e2e90613e9d565b6000612dcd600161167784610e98878963ffffffff6123f716565b90506129ef81612f5c565b612dea826001600160a01b0316612ffe565b612e065760405162461bcd60e51b8152600401610e2e90613f0d565b60006060836001600160a01b031683604051612e229190613cb1565b6000604051808303816000865af19150503d8060008114612e5f576040519150601f19603f3d011682016040523d82523d6000602084013e612e64565b606091505b509150915081612e865760405162461bcd60e51b8152600401610e2e90613e2d565b8051156129ef5780806020019051612ea19190810190613340565b6129ef5760405162461bcd60e51b8152600401610e2e90613edd565b600a5460405163db006a7560e01b81526001600160a01b039091169063db006a7590612eed908490600401613f48565b602060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f3f9190810190613426565b1561148d5760405162461bcd60e51b8152600401610e2e90613ddd565b600b54604051632770a7eb60e21b81526000916001600160a01b031690639dc29fac90612f8f9030908690600401613cd9565b602060405180830381600087803b158015612fa957600080fd5b505af1158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612fe19190810190613426565b1161148d5760405162461bcd60e51b8152600401610e2e90613e4d565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906130325750808214155b949350505050565b604080518082019091526000808252602082015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b60408051610100810182526000808252602082015290810161309a613051565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b8035610cd18161414f565b8051610cd18161414f565b600082601f8301126130f357600080fd5b81516131066131018261401a565b613ff3565b9150818183526020840193506020810190508385602084028201111561312b57600080fd5b60005b838110156131575781613141888261320d565b845250602092830192919091019060010161312e565b5050505092915050565b8051610cd181614163565b600082601f83011261317d57600080fd5b815161318b6131018261403b565b915080825260208301602083018583830111156131a757600080fd5b6131b28382846140fb565b50505092915050565b6000604082840312156131cd57600080fd5b6131d76040613ff3565b905060006131e58484613161565b82525060206131f68484830161320d565b60208301525092915050565b8035610cd18161416c565b8051610cd18161416c565b60006020828403121561322a57600080fd5b600061303284846130cc565b60006020828403121561324857600080fd5b600061303284846130d7565b6000806040838503121561326757600080fd5b600061327385856130cc565b9250506020613284858286016130cc565b9150509250929050565b6000806000606084860312156132a357600080fd5b60006132af86866130cc565b93505060206132c0868287016130cc565b92505060406132d186828701613202565b9150509250925092565b600080604083850312156132ee57600080fd5b60006132fa85856130cc565b925050602061328485828601613202565b60006020828403121561331d57600080fd5b815167ffffffffffffffff81111561333457600080fd5b613032848285016130e2565b60006020828403121561335257600080fd5b60006130328484613161565b600080600080600060a0868803121561337657600080fd5b855167ffffffffffffffff81111561338d57600080fd5b6133998882890161316c565b95505060206133aa8882890161320d565b94505060406133bb8882890161320d565b93505060606133cc8882890161320d565b92505060806133dd8882890161320d565b9150509295509295909350565b6000604082840312156133fc57600080fd5b600061303284846131bb565b60006020828403121561341a57600080fd5b60006130328484613202565b60006020828403121561343857600080fd5b6000613032848461320d565b60006134508383613487565b505060200190565b6000610df08383613b8a565b60006134708383613c7f565b505060400190565b613481816140bd565b82525050565b61348181614076565b600061349b82614069565b6134a5818561406d565b93506134b083614063565b8060005b838110156134de5781516134c88882613444565b97506134d383614063565b9250506001016134b4565b509495945050505050565b60006134f482614069565b6134fe818561406d565b93508360208202850161351085614063565b8060005b8581101561354a578484038952815161352d8582613458565b945061353883614063565b60209a909a0199925050600101613514565b5091979650505050505050565b600061356282614069565b61356c818561406d565b935061357783614063565b8060005b838110156134de57815161358f8882613464565b975061359a83614063565b92505060010161357b565b61348181614081565b60006135b982614069565b6135c3818561163c565b93506135d38185602086016140fb565b9290920192915050565b60006135e882614069565b6135f2818561406d565b93506136028185602086016140fb565b61360b81614127565b9093019392505050565b613481816140c4565b613481816140cf565b613481816140da565b613481816140e5565b613481816140f0565b600061364f60238361406d565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b600061369460198361406d565b7f434f4d504f554e443a207769746864726177206661696c656400000000000000815260200192915050565b60006136cd60268361406d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061371560228361406d565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b600061375960178361406d565b7f434f4d504f554e443a20737570706c79206661696c6564000000000000000000815260200192915050565b6000613792601b8361406d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006137cb60208361406d565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600061380460218361406d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061384760188361406d565b7f46554c4352554d3a207769746864726177206661696c65640000000000000000815260200192915050565b600061388060208361406d565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006138b960148361406d565b73696e73756666696369656e742062616c616e636560601b815260200192915050565b60006138e9601f8361406d565b7f7769746864726177206d7573742062652067726561746572207468616e203000815260200192915050565b600061392260258361406d565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b600061396960128361406d565b71696e73756666696369656e742066756e647360701b815260200192915050565b600061399760248361406d565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b60006139dd601e8361406d565b7f6465706f736974206d7573742062652067726561746572207468616e20300000815260200192915050565b6000613a1660168361406d565b7511955310d495534e881cdd5c1c1b1e4819985a5b195960521b815260200192915050565b6000613a48602a8361406d565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000613a94601f8361406d565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613acd60368361406d565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000613b25601f8361406d565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000613b5e601f8361406d565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051600090610160840190613b9f858261361e565b506020830151613bb26020860182613c9f565b506040830151613bc56040860182613c35565b506060830151613bd860c0860182613c9f565b506080830151613beb60e0860182613c9f565b5060a0830151613bff610100860182613487565b5060c0830151613c13610120860182613c9f565b5060e0830151848203610140860152613c2c82826135dd565b95945050505050565b80516080830190613c4684826135a5565b506020820151613c596020850182613627565b506040820151613c6c6040850182613627565b5060608201516129ef6060850182613c9f565b80516040830190613c908482613487565b5060208201516129ef60208501825b61348181610cad565b613481816140b7565b6000610df082846135ae565b60208101610cd18284613487565b60208101610cd18284613478565b60408101613ce78285613478565b610df06020830184613c9f565b60408101613d028285613487565b610df06020830184613487565b60608101613d1d8286613487565b613d2a6020830185613487565b6130326040830184613c9f565b60408101613ce78285613487565b60608101613d538286613487565b613d606020830185613c9f565b6130326040830184613639565b60408082528101613d7e8185613557565b9050818103602083015261303281846134e9565b60208101610cd182846135a5565b60208101610cd18284613615565b60208101610cd18284613630565b60208082528101610df081846135dd565b60208082528101610cd181613642565b60208082528101610cd181613687565b60208082528101610cd1816136c0565b60208082528101610cd181613708565b60208082528101610cd18161374c565b60208082528101610cd181613785565b60208082528101610cd1816137be565b60208082528101610cd1816137f7565b60208082528101610cd18161383a565b60208082528101610cd181613873565b60208082528101610cd1816138ac565b60208082528101610cd1816138dc565b60208082528101610cd181613915565b60208082528101610cd18161395c565b60208082528101610cd18161398a565b60208082528101610cd1816139d0565b60208082528101610cd181613a09565b60208082528101610cd181613a3b565b60208082528101610cd181613a87565b60208082528101610cd181613ac0565b60208082528101610cd181613b18565b60208082528101610cd181613b51565b60608101613f3b8285613c7f565b610df06040830184613c9f565b60208101610cd18284613c9f565b60808101613f648287613c9f565b8181036020830152613f768186613490565b9050613f856040830185613478565b613c2c6060830184613c9f565b60a08101613fa08288613c9f565b613fad6020830187613c9f565b8181036040830152613fbf8186613490565b9050613fce6060830185613478565b613fdb6080830184613c9f565b9695505050505050565b60208101610cd18284613ca8565b60405181810167ffffffffffffffff8111828210171561401257600080fd5b604052919050565b600067ffffffffffffffff82111561403157600080fd5b5060209081020190565b600067ffffffffffffffff82111561405257600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610cd1826140ab565b151590565b8061163c81614131565b8061163c8161413b565b8061163c81614145565b61ffff1690565b6001600160a01b031690565b60ff1690565b6000610cd1825b6000610cd182614076565b6000610cd182614086565b6000610cd182614090565b6000610cd18261409a565b6000610cd1826140a4565b60005b838110156141165781810151838201526020016140fe565b838111156129ef5750506000910152565b601f01601f191690565b6002811061148d57fe5b6001811061148d57fe5b6005811061148d57fe5b61415881614076565b811461148d57600080fd5b61415881614081565b61415881610cad56fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158201e24a5151ed3c336a1131d727482973f156997db1969581c2730f06c9152a7086c6578706572696d656e74616cf564736f6c63430005110040000000000000000000000000468ab3b1f63a1c14b361bc367c3cc92277588da1000000000000000000000000f572096bbb414c6cc0c8915e9bf9e77c89eff2bd

Deployed Bytecode

0x6080604052600436106103ce5760003560e01c80637f50d4d8116101fd578063bbf3164411610118578063f2978d98116100ab578063f5ff19161161007a578063f5ff191614610a12578063f69e204614610a32578063f7c1ec7714610a47578063f82ce27d14610a5c578063fc0c546a14610a71576103ce565b8063f2978d98146109b3578063f29e15a2146109c8578063f2fde38b146109dd578063f5a41dea146109fd576103ce565b8063dd62ed3e116100e7578063dd62ed3e1461093e578063e849d6591461095e578063ebc511601461097e578063f02fbd4a14610993576103ce565b8063bbf31644146108d4578063bea9849e146108f4578063cf8ca42614610914578063d9d7858a14610929576103ce565b80639ff011b911610190578063a9059cbb1161015f578063a9059cbb1461085f578063a9a1015a1461087f578063b69ef8a81461089f578063b6b55f25146108b4576103ce565b80639ff011b9146107f5578063a160176d14610815578063a457c2d71461082a578063a72879711461084a576103ce565b80638e4ec6ef116101cc5780638e4ec6ef146107a15780638f32d59b146107b657806395d89b41146107cb57806399b71d5c146107e0576103ce565b80637f50d4d8146107355780638124955c14610757578063819faf7b146107775780638da5cb5b1461078c576103ce565b80633fc8cef3116102ed5780636ff2bf0811610280578063735de9f71161024f578063735de9f7146106d657806377c7b8fc146106eb5780637b82784c146107005780637d7c2a1c14610720576103ce565b80636ff2bf081461067757806370a082311461068c5780637137ef99146106ac578063715018a6146106c1576103ce565b806357ded9c9116102bc57806357ded9c91461061857806358782c211461062d57806361c1ec551461064257806365aab74914610657576103ce565b80633fc8cef3146105b9578063413e920d146105ce57806346357473146105e35780634fe4112914610603576103ce565b806323b872dd116103655780632f48ab7d116103345780632f48ab7d1461054d578063313ce56714610562578063395093511461058457806339c0a7e1146105a4576103ce565b806323b872dd146104d85780632622678c146104f85780632e1a7d4d1461050d5780632eb4520a1461052d576103ce565b8063095ea7b3116103a1578063095ea7b31461046c5780630eb2a2671461049957806316f0115b146104ae57806318160ddd146104c3576103ce565b806306636c1c146103d057806306a3fe591461040657806306fdde0314610428578063085d48831461044a575b005b3480156103dc57600080fd5b506103f06103eb366004613408565b610a86565b6040516103fd9190613f48565b60405180910390f35b34801561041257600080fd5b5061041b610c0a565b6040516103fd9190613cbd565b34801561043457600080fd5b5061043d610c19565b6040516103fd9190613dbc565b34801561045657600080fd5b5061045f610cb0565b6040516103fd9190613dae565b34801561047857600080fd5b5061048c6104873660046132db565b610cb9565b6040516103fd9190613d92565b3480156104a557600080fd5b506103f0610cd7565b3480156104ba57600080fd5b506103f0610d5d565b3480156104cf57600080fd5b506103f0610d63565b3480156104e457600080fd5b5061048c6104f336600461328e565b610d69565b34801561050457600080fd5b5061041b610df7565b34801561051957600080fd5b506103ce610528366004613408565b610e06565b34801561053957600080fd5b506103ce610548366004613218565b611274565b34801561055957600080fd5b5061041b6112ba565b34801561056e57600080fd5b506105776112c9565b6040516103fd9190613fe5565b34801561059057600080fd5b5061048c61059f3660046132db565b6112d2565b3480156105b057600080fd5b506103f0611326565b3480156105c557600080fd5b5061041b6113cd565b3480156105da57600080fd5b506103f06113dc565b3480156105ef57600080fd5b506103ce6105fe366004613218565b6113e3565b34801561060f57600080fd5b506103ce611429565b34801561062457600080fd5b5061041b611490565b34801561063957600080fd5b5061041b61149f565b34801561064e57600080fd5b506103f06114ae565b34801561066357600080fd5b506103ce610672366004613408565b6114df565b34801561068357600080fd5b506103f0611552565b34801561069857600080fd5b506103f06106a7366004613218565b611622565b3480156106b857600080fd5b506103f0611641565b3480156106cd57600080fd5b506103ce611683565b3480156106e257600080fd5b5061041b6116f1565b3480156106f757600080fd5b506103f0611700565b34801561070c57600080fd5b506103f061071b366004613218565b611733565b34801561072c57600080fd5b506103ce611745565b34801561074157600080fd5b5061074a611834565b6040516103fd9190613da0565b34801561076357600080fd5b506103ce610772366004613408565b611843565b34801561078357600080fd5b5061041b6118e5565b34801561079857600080fd5b5061041b6118f4565b3480156107ad57600080fd5b5061041b611903565b3480156107c257600080fd5b5061048c611912565b3480156107d757600080fd5b5061043d611938565b3480156107ec57600080fd5b506103ce611999565b34801561080157600080fd5b506103ce610810366004613408565b611a30565b34801561082157600080fd5b5061045f611a59565b34801561083657600080fd5b5061048c6108453660046132db565b611b6b565b34801561085657600080fd5b506103f0611bd9565b34801561086b57600080fd5b5061048c61087a3660046132db565b611c8e565b34801561088b57600080fd5b506103ce61089a3660046132db565b611ca2565b3480156108ab57600080fd5b506103f0611d4b565b3480156108c057600080fd5b506103ce6108cf366004613408565b611d7c565b3480156108e057600080fd5b506103ce6108ef366004613218565b611e4f565b34801561090057600080fd5b506103ce61090f366004613218565b611e95565b34801561092057600080fd5b506103f0611edb565b34801561093557600080fd5b506103f0611f0c565b34801561094a57600080fd5b506103f0610959366004613254565b611f12565b34801561096a57600080fd5b506103ce610979366004613408565b611f3d565b34801561098a57600080fd5b506103f0611fdc565b34801561099f57600080fd5b506103ce6109ae366004613408565b611fe2565b3480156109bf57600080fd5b506103f061200b565b3480156109d457600080fd5b506103f0612011565b3480156109e957600080fd5b506103ce6109f8366004613218565b612017565b348015610a0957600080fd5b506103f0612044565b348015610a1e57600080fd5b506103ce610a2d366004613218565b6120d7565b348015610a3e57600080fd5b5061041b61211d565b348015610a5357600080fd5b5061041b61212c565b348015610a6857600080fd5b5061041b6121a9565b348015610a7d57600080fd5b5061041b6121ee565b60408051600180825281830190925260009160609190816020015b610aa961303a565b815260200190600190039081610aa15790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110610aea57fe5b6020026020010181905250610afd613051565b6040805160808101909152600181526020810160008152602001600081526020018590529050610b2b61307a565b60008181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b610b6f61307a565b815260200190600190039081610b675790505090508181600081518110610b9257fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a4590610bcf9087908590600401613d6d565b600060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b5050505050505050919050565b600d546001600160a01b031681565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b505050505090505b90565b60195460ff1681565b6000610ccd610cc66121fd565b8484612201565b5060015b92915050565b600b546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b60206040518083038186803b158015610d2057600080fd5b505afa158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d589190810190613426565b905090565b60085481565b60025490565b6000610d768484846122b5565b610dec84610d826121fd565b610de78560405180606001604052806028815260200161419c602891396001600160a01b038a16600090815260016020526040812090610dc06121fd565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6123cb16565b612201565b5060015b9392505050565b6015546001600160a01b031681565b600680546001019081905581610e375760405162461bcd60e51b8152600401610e2e90613e7d565b60405180910390fd5b6000610e4233611622565b905080831115610e645760405162461bcd60e51b8152600401610e2e90613e6d565b610e6c611641565b6008556000610e79611552565b90506000610ea4600254610e98876008546123f790919063ffffffff16565b9063ffffffff61243116565b604080518082018252601d81527f72656465656d20616d6f756e7420657863656564732062616c616e6365000000602080830191909152336000908152908190529190912054919250610eff9190879063ffffffff6123cb16565b33600090815260208190526040902055600254610f22908663ffffffff61247316565b60025560405160009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f5a908990613f48565b60405180910390a36009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610f93903090600401613ccb565b60206040518083038186803b158015610fab57600080fd5b505afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fe39190810190613426565b90508181101561100557611005611000838363ffffffff61247316565b6124b5565b600061101883606463ffffffff61243116565b3360008181526011602052604090819020439055601654905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb9161105c918890600401613cd9565b602060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110ae9190810190613340565b5060006110ba8261258b565b6016546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906110f0908490600401613ccb565b60206040518083038186803b15801561110857600080fd5b505afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111409190810190613426565b90506017548110156111cb5760006111646064610e9885606263ffffffff6123f716565b905061116f81612708565b5060006111886064610e9886600263ffffffff6123f716565b6015546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156111c3573d6000803e3d6000fd5b505050611208565b60155460405183916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611205573d6000803e3d6000fd5b50505b6112353361121c878663ffffffff61247316565b6009546001600160a01b0316919063ffffffff61282116565b61123d611641565b600855611248611745565b5050505050505060065481146112705760405162461bcd60e51b8152600401610e2e90613eed565b5050565b61127c611912565b6112985760405162461bcd60e51b8152600401610e2e90613e5d565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6013546001600160a01b031681565b60055460ff1690565b6000610ccd6112df6121fd565b84610de785600160006112f06121fd565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61287a16565b600061133061303a565b600e5460408051808201825230815260006020820152600f54915163306430bb60e21b81526001600160a01b039093169263c190c2ec926113749291600401613f2d565b604080518083038186803b15801561138b57600080fd5b505afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113c391908101906133ea565b6020015191505090565b6014546001600160a01b031681565b620f424081565b6113eb611912565b6114075760405162461bcd60e51b8152600401610e2e90613e5d565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b611431611912565b61144d5760405162461bcd60e51b8152600401610e2e90613e5d565b6114556118f4565b6001600160a01b03166108fc479081150290604051600060405180830381858888f1935050505015801561148d573d6000803e3d6000fd5b50565b6010546001600160a01b031681565b600b546001600160a01b031681565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b6114e761212c565b600954604051636968703360e11b81526001600160a01b039283169263d2d0e0669261151d929116908590600090600401613d45565b600060405180830381600087803b15801561153757600080fd5b505af115801561154b573d6000803e3d6000fd5b5050505050565b33600090815260116020526040812054819015611591573360009081526011602052604090205461158a90439063ffffffff61247316565b905061159b565b6000915050610cad565b60006115a633611622565b9050600080600254116115bb575060006115dc565b6115d9600254610e98846115cd611641565b9063ffffffff6123f716565b90505b6000611619611964610e98866115cd670de0b6b3a7640000610e986018546115cd620f4240610e9864e8d4a510008d6123f790919063ffffffff16565b94505050505090565b6001600160a01b0381166000908152602081905260409020545b919050565b6000610d5861164e611d4b565b611677611659611edb565b611677611664611326565b61167761166f612044565b611677611bd9565b9063ffffffff61287a16565b61168b611912565b6116a75760405162461bcd60e51b8152600401610e2e90613e5d565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6012546001600160a01b031681565b60008061170b611641565b60025490915061172d90610e9883670de0b6b3a764000063ffffffff6123f716565b91505090565b60116020526000908152604090205481565b600061174f611a59565b60195490915060ff16600481111561176357fe5b81600481111561176f57fe5b1461177c5761177c61289f565b6000611786611d4b565b111561181357600181600481111561179a57fe5b14156117b1576117ab6103eb611d4b565b50611813565b60048160048111156117bf57fe5b14156117d5576117d0610772611d4b565b611813565b60028160048111156117e357fe5b14156117f4576117d0610979611d4b565b600381600481111561180257fe5b141561181357611813610672611d4b565b6019805482919060ff1916600183600481111561182c57fe5b021790555050565b6016546001600160a01b031681565b600b546040516340c10f1960e01b81526000916001600160a01b0316906340c10f19906118769030908690600401613cd9565b602060405180830381600087803b15801561189057600080fd5b505af11580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118c89190810190613426565b1161148d5760405162461bcd60e51b8152600401610e2e90613ecd565b600c546001600160a01b031681565b6007546001600160a01b031690565b600e546001600160a01b031681565b6007546000906001600160a01b03166119296121fd565b6001600160a01b031614905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b600a546009546119be916001600160a01b03918216911660001963ffffffff61290516565b600e546009546119e3916001600160a01b03918216911660001963ffffffff61290516565b611a096119ee6121a9565b6009546001600160a01b03169060001963ffffffff61290516565b600b54600954611a2e916001600160a01b03918216911660001963ffffffff61290516565b565b611a38611912565b611a545760405162461bcd60e51b8152600401610e2e90613e5d565b600f55565b6010546009546040516303622f8f60e61b815260009283928392839283926001600160a01b039182169263d88be3c092611a97921690600401613cbd565b60006040518083038186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aeb919081019061335e565b92975090955093509150600090508415611b025750835b80841115611b0d5750825b80831115611b185750815b80821115611b235750805b600081861415611b3557506002611b61565b84821415611b4557506004611b61565b83821415611b5557506003611b61565b82821415611b61575060015b9550505050505090565b6000610ccd611b786121fd565b84610de7856040518060600160405280602581526020016141c46025913960016000611ba26121fd565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6123cb16565b600080611be46114ae565b90508015610d5857610cd1670de0b6b3a7640000610e98600a60009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4957600080fd5b505afa158015611c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c819190810190613426565b849063ffffffff6123f716565b6000610ccd611c9b6121fd565b84846122b5565b611caa611912565b611cc65760405162461bcd60e51b8152600401610e2e90613e5d565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611cf49033908590600401613cd9565b602060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d469190810190613340565b505050565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b600680546001019081905581611da45760405162461bcd60e51b8152600401610e2e90613ebd565b611dac611641565b600855600954611dcd906001600160a01b031633308563ffffffff6129cb16565b336000908152601160205260408120439055600854611df25750600882905581611e10565b611e0d600854610e98600254866123f790919063ffffffff16565b90505b611e18611641565b600855611e2533826129f5565b611e2d611745565b5060065481146112705760405162461bcd60e51b8152600401610e2e90613eed565b611e57611912565b611e735760405162461bcd60e51b8152600401610e2e90613e5d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b611e9d611912565b611eb95760405162461bcd60e51b8152600401610e2e90613e5d565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d08903090600401613ccb565b600f5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a5460405163140e25ad60e31b81526001600160a01b039091169063a0712d6890611f6d908490600401613f48565b602060405180830381600087803b158015611f8757600080fd5b505af1158015611f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611fbf9190810190613426565b1561148d5760405162461bcd60e51b8152600401610e2e90613e0d565b60185481565b611fea611912565b6120065760405162461bcd60e51b8152600401610e2e90613e5d565b601855565b61196481565b60175481565b61201f611912565b61203b5760405162461bcd60e51b8152600401610e2e90613e5d565b61148d81612ab5565b60008061204f610cd7565b90508015610d5857600b54604051630359f7eb60e11b81526001600160a01b03909116906306b3efd690612087903090600401613ccb565b60206040518083038186803b15801561209f57600080fd5b505afa1580156120b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cd19190810190613426565b6120df611912565b6120fb5760405162461bcd60e51b8152600401610e2e90613e5d565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b600c5460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b916004808301926020929190829003018186803b15801561217157600080fd5b505afa158015612185573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d589190810190613236565b600c546040805163076b7fbb60e51b815290516000926001600160a01b03169163ed6ff760916004808301926020929190829003018186803b15801561217157600080fd5b6009546001600160a01b031681565b3390565b6001600160a01b0383166122275760405162461bcd60e51b8152600401610e2e90613ead565b6001600160a01b03821661224d5760405162461bcd60e51b8152600401610e2e90613dfd565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906122a8908590613f48565b60405180910390a3505050565b6001600160a01b0383166122db5760405162461bcd60e51b8152600401610e2e90613e8d565b6001600160a01b0382166123015760405162461bcd60e51b8152600401610e2e90613dcd565b61234481604051806060016040528060268152602001614176602691396001600160a01b038616600090815260208190526040902054919063ffffffff6123cb16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612379908263ffffffff61287a16565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122a8908590613f48565b600081848411156123ef5760405162461bcd60e51b8152600401610e2e9190613dbc565b505050900390565b60008261240657506000610cd1565b8282028284828161241357fe5b0414610df05760405162461bcd60e51b8152600401610e2e90613e3d565b6000610df083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b37565b6000610df083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123cb565b600260195460ff1660048111156124c857fe5b14156124d7576124d781612b6e565b600360195460ff1660048111156124ea57fe5b141561252057806124f9611edb565b10156125175760405162461bcd60e51b8152600401610e2e90613e9d565b61252081612bcc565b600160195460ff16600481111561253357fe5b14156125695780612542611326565b10156125605760405162461bcd60e51b8152600401610e2e90613e9d565b61256981612bfc565b600460195460ff16600481111561257c57fe5b141561148d5761148d81612d7a565b6012546013546000916125b1916001600160a01b0390811691168363ffffffff61290516565b6012546013546125d4916001600160a01b0391821691168463ffffffff61290516565b6040805160028082526060808301845292602083019080388339505060135482519293506001600160a01b03169183915060009061260e57fe5b6001600160a01b03928316602091820292909201015260145482519116908290600190811061263957fe5b6001600160a01b039283166020918202929092010152601254606091166318cbafe585600085306126724261070863ffffffff61287a16565b6040518663ffffffff1660e01b8152600401612692959493929190613f92565b600060405180830381600087803b1580156126ac57600080fd5b505af11580156126c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126e8919081019061330b565b9050806001815181106126f757fe5b602002602001015192505050919050565b6040805160028082526060808301845260009390929190602083019080388339505060145482519293506001600160a01b03169183915060009061274857fe5b6001600160a01b03928316602091820292909201015260165482519116908290600190811061277357fe5b6001600160a01b03928316602091820292909201015260125460609116637ff36ab585600085816127ac4261070863ffffffff61287a16565b6040518663ffffffff1660e01b81526004016127cb9493929190613f56565b6000604051808303818588803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526126e8919081019061330b565b604051611d4690849063a9059cbb60e01b906128439086908690602401613d37565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612dd8565b600082820183811015610df05760405162461bcd60e51b8152600401610e2e90613e1d565b60006128a96114ae565b905080156128ba576128ba81612ebd565b6128c2611326565b905080156128d3576128d381612bfc565b6128db610cd7565b905080156128ec576128ec81612f5c565b6128f4611edb565b9050801561148d5761148d81612bcc565b80158061298d5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061293b9030908690600401613cf4565b60206040518083038186803b15801561295357600080fd5b505afa158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061298b9190810190613426565b155b6129a95760405162461bcd60e51b8152600401610e2e90613efd565b604051611d4690849063095ea7b360e01b906128439086908690602401613d37565b6040516129ef9085906323b872dd60e01b9061284390879087908790602401613d0f565b50505050565b6001600160a01b038216612a1b5760405162461bcd60e51b8152600401610e2e90613f1d565b600254612a2e908263ffffffff61287a16565b6002556001600160a01b038216600090815260208190526040902054612a5a908263ffffffff61287a16565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612aa9908590613f48565b60405180910390a35050565b6001600160a01b038116612adb5760405162461bcd60e51b8152600401610e2e90613ded565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60008183612b585760405162461bcd60e51b8152600401610e2e9190613dbc565b506000838581612b6457fe5b0495945050505050565b6000612b786114ae565b90506000612b84611bd9565b905082811015612ba65760405162461bcd60e51b8152600401610e2e90613e9d565b6000612bc1600161167784610e98878963ffffffff6123f716565b90506129ef81612ebd565b600d5460405163db006a7560e01b81526001600160a01b039091169063db006a759061151d908490600401613f48565b604080516001808252818301909252606091816020015b612c1b61303a565b815260200190600190039081612c135790505090506040518060400160405280306001600160a01b03168152602001600081525081600081518110612c5c57fe5b6020026020010181905250612c6f613051565b6040805160808101909152600080825260208201908152602001600081526020018490529050612c9d61307a565b60018181905250600060208201526040808201839052600f546060808401919091523060a0840152815160018082528184019093529091816020015b612ce161307a565b815260200190600190039081612cd95790505090508181600081518110612d0457fe5b6020908102919091010152600e5460405163a67a6a4560e01b81526001600160a01b039091169063a67a6a4590612d419087908590600401613d6d565b600060405180830381600087803b158015612d5b57600080fd5b505af1158015612d6f573d6000803e3d6000fd5b505050505050505050565b6000612d84610cd7565b90506000612d90612044565b905082811015612db25760405162461bcd60e51b8152600401610e2e90613e9d565b6000612dcd600161167784610e98878963ffffffff6123f716565b90506129ef81612f5c565b612dea826001600160a01b0316612ffe565b612e065760405162461bcd60e51b8152600401610e2e90613f0d565b60006060836001600160a01b031683604051612e229190613cb1565b6000604051808303816000865af19150503d8060008114612e5f576040519150601f19603f3d011682016040523d82523d6000602084013e612e64565b606091505b509150915081612e865760405162461bcd60e51b8152600401610e2e90613e2d565b8051156129ef5780806020019051612ea19190810190613340565b6129ef5760405162461bcd60e51b8152600401610e2e90613edd565b600a5460405163db006a7560e01b81526001600160a01b039091169063db006a7590612eed908490600401613f48565b602060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f3f9190810190613426565b1561148d5760405162461bcd60e51b8152600401610e2e90613ddd565b600b54604051632770a7eb60e21b81526000916001600160a01b031690639dc29fac90612f8f9030908690600401613cd9565b602060405180830381600087803b158015612fa957600080fd5b505af1158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612fe19190810190613426565b1161148d5760405162461bcd60e51b8152600401610e2e90613e4d565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906130325750808214155b949350505050565b604080518082019091526000808252602082015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b60408051610100810182526000808252602082015290810161309a613051565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b8035610cd18161414f565b8051610cd18161414f565b600082601f8301126130f357600080fd5b81516131066131018261401a565b613ff3565b9150818183526020840193506020810190508385602084028201111561312b57600080fd5b60005b838110156131575781613141888261320d565b845250602092830192919091019060010161312e565b5050505092915050565b8051610cd181614163565b600082601f83011261317d57600080fd5b815161318b6131018261403b565b915080825260208301602083018583830111156131a757600080fd5b6131b28382846140fb565b50505092915050565b6000604082840312156131cd57600080fd5b6131d76040613ff3565b905060006131e58484613161565b82525060206131f68484830161320d565b60208301525092915050565b8035610cd18161416c565b8051610cd18161416c565b60006020828403121561322a57600080fd5b600061303284846130cc565b60006020828403121561324857600080fd5b600061303284846130d7565b6000806040838503121561326757600080fd5b600061327385856130cc565b9250506020613284858286016130cc565b9150509250929050565b6000806000606084860312156132a357600080fd5b60006132af86866130cc565b93505060206132c0868287016130cc565b92505060406132d186828701613202565b9150509250925092565b600080604083850312156132ee57600080fd5b60006132fa85856130cc565b925050602061328485828601613202565b60006020828403121561331d57600080fd5b815167ffffffffffffffff81111561333457600080fd5b613032848285016130e2565b60006020828403121561335257600080fd5b60006130328484613161565b600080600080600060a0868803121561337657600080fd5b855167ffffffffffffffff81111561338d57600080fd5b6133998882890161316c565b95505060206133aa8882890161320d565b94505060406133bb8882890161320d565b93505060606133cc8882890161320d565b92505060806133dd8882890161320d565b9150509295509295909350565b6000604082840312156133fc57600080fd5b600061303284846131bb565b60006020828403121561341a57600080fd5b60006130328484613202565b60006020828403121561343857600080fd5b6000613032848461320d565b60006134508383613487565b505060200190565b6000610df08383613b8a565b60006134708383613c7f565b505060400190565b613481816140bd565b82525050565b61348181614076565b600061349b82614069565b6134a5818561406d565b93506134b083614063565b8060005b838110156134de5781516134c88882613444565b97506134d383614063565b9250506001016134b4565b509495945050505050565b60006134f482614069565b6134fe818561406d565b93508360208202850161351085614063565b8060005b8581101561354a578484038952815161352d8582613458565b945061353883614063565b60209a909a0199925050600101613514565b5091979650505050505050565b600061356282614069565b61356c818561406d565b935061357783614063565b8060005b838110156134de57815161358f8882613464565b975061359a83614063565b92505060010161357b565b61348181614081565b60006135b982614069565b6135c3818561163c565b93506135d38185602086016140fb565b9290920192915050565b60006135e882614069565b6135f2818561406d565b93506136028185602086016140fb565b61360b81614127565b9093019392505050565b613481816140c4565b613481816140cf565b613481816140da565b613481816140e5565b613481816140f0565b600061364f60238361406d565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b600061369460198361406d565b7f434f4d504f554e443a207769746864726177206661696c656400000000000000815260200192915050565b60006136cd60268361406d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061371560228361406d565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b600061375960178361406d565b7f434f4d504f554e443a20737570706c79206661696c6564000000000000000000815260200192915050565b6000613792601b8361406d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006137cb60208361406d565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600061380460218361406d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061384760188361406d565b7f46554c4352554d3a207769746864726177206661696c65640000000000000000815260200192915050565b600061388060208361406d565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006138b960148361406d565b73696e73756666696369656e742062616c616e636560601b815260200192915050565b60006138e9601f8361406d565b7f7769746864726177206d7573742062652067726561746572207468616e203000815260200192915050565b600061392260258361406d565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b600061396960128361406d565b71696e73756666696369656e742066756e647360701b815260200192915050565b600061399760248361406d565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b60006139dd601e8361406d565b7f6465706f736974206d7573742062652067726561746572207468616e20300000815260200192915050565b6000613a1660168361406d565b7511955310d495534e881cdd5c1c1b1e4819985a5b195960521b815260200192915050565b6000613a48602a8361406d565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000613a94601f8361406d565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000613acd60368361406d565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000613b25601f8361406d565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000613b5e601f8361406d565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051600090610160840190613b9f858261361e565b506020830151613bb26020860182613c9f565b506040830151613bc56040860182613c35565b506060830151613bd860c0860182613c9f565b506080830151613beb60e0860182613c9f565b5060a0830151613bff610100860182613487565b5060c0830151613c13610120860182613c9f565b5060e0830151848203610140860152613c2c82826135dd565b95945050505050565b80516080830190613c4684826135a5565b506020820151613c596020850182613627565b506040820151613c6c6040850182613627565b5060608201516129ef6060850182613c9f565b80516040830190613c908482613487565b5060208201516129ef60208501825b61348181610cad565b613481816140b7565b6000610df082846135ae565b60208101610cd18284613487565b60208101610cd18284613478565b60408101613ce78285613478565b610df06020830184613c9f565b60408101613d028285613487565b610df06020830184613487565b60608101613d1d8286613487565b613d2a6020830185613487565b6130326040830184613c9f565b60408101613ce78285613487565b60608101613d538286613487565b613d606020830185613c9f565b6130326040830184613639565b60408082528101613d7e8185613557565b9050818103602083015261303281846134e9565b60208101610cd182846135a5565b60208101610cd18284613615565b60208101610cd18284613630565b60208082528101610df081846135dd565b60208082528101610cd181613642565b60208082528101610cd181613687565b60208082528101610cd1816136c0565b60208082528101610cd181613708565b60208082528101610cd18161374c565b60208082528101610cd181613785565b60208082528101610cd1816137be565b60208082528101610cd1816137f7565b60208082528101610cd18161383a565b60208082528101610cd181613873565b60208082528101610cd1816138ac565b60208082528101610cd1816138dc565b60208082528101610cd181613915565b60208082528101610cd18161395c565b60208082528101610cd18161398a565b60208082528101610cd1816139d0565b60208082528101610cd181613a09565b60208082528101610cd181613a3b565b60208082528101610cd181613a87565b60208082528101610cd181613ac0565b60208082528101610cd181613b18565b60208082528101610cd181613b51565b60608101613f3b8285613c7f565b610df06040830184613c9f565b60208101610cd18284613c9f565b60808101613f648287613c9f565b8181036020830152613f768186613490565b9050613f856040830185613478565b613c2c6060830184613c9f565b60a08101613fa08288613c9f565b613fad6020830187613c9f565b8181036040830152613fbf8186613490565b9050613fce6060830185613478565b613fdb6080830184613c9f565b9695505050505050565b60208101610cd18284613ca8565b60405181810167ffffffffffffffff8111828210171561401257600080fd5b604052919050565b600067ffffffffffffffff82111561403157600080fd5b5060209081020190565b600067ffffffffffffffff82111561405257600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610cd1826140ab565b151590565b8061163c81614131565b8061163c8161413b565b8061163c81614145565b61ffff1690565b6001600160a01b031690565b60ff1690565b6000610cd1825b6000610cd182614076565b6000610cd182614086565b6000610cd182614090565b6000610cd18261409a565b6000610cd1826140a4565b60005b838110156141165781810151838201526020016140fe565b838111156129ef5750506000910152565b601f01601f191690565b6002811061148d57fe5b6001811061148d57fe5b6005811061148d57fe5b61415881614076565b811461148d57600080fd5b61415881614081565b61415881610cad56fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158201e24a5151ed3c336a1131d727482973f156997db1969581c2730f06c9152a7086c6578706572696d656e74616cf564736f6c63430005110040

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

000000000000000000000000468ab3b1f63a1c14b361bc367c3cc92277588da1000000000000000000000000f572096bbb414c6cc0c8915e9bf9e77c89eff2bd

-----Decoded View---------------
Arg [0] : _yeldToken (address): 0x468ab3b1f63A1C14b361bC367c3cC92277588Da1
Arg [1] : _retirementYeldTreasury (address): 0xF572096BbB414C6cC0C8915e9BF9e77C89eff2bD

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000468ab3b1f63a1c14b361bc367c3cc92277588da1
Arg [1] : 000000000000000000000000f572096bbb414c6cc0c8915e9bf9e77c89eff2bd


Deployed Bytecode Sourcemap

14097:17163:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23106:579;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23106:579:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14398:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14398:24:0;;;:::i;:::-;;;;;;;;6436:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6436:83:0;;;:::i;:::-;;;;;;;;15261:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15261:36:0;;;:::i;:::-;;;;;;;;3456:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3456:152:0;;;;;;;;:::i;:::-;;;;;;;;25678:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25678:116:0;;;:::i;14270:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14270:19:0;;;:::i;2939:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2939:91:0;;;:::i;3614:304::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3614:304:0;;;;;;;;:::i;14787:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14787:45:0;;;:::i;19665:2249::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19665:2249:0;;;;;;;;:::i;16130:126::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16130:126:0;;;;;;;;:::i;14649:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14649:64:0;;;:::i;6618:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6618:83:0;;;:::i;:::-;;;;;;;;3924:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3924:210:0;;;;;;;;:::i;24925:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24925:166:0;;;:::i;14718:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14718:64:0;;;:::i;15108:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15108:40:0;;;:::i;21988:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21988:85:0;;;;;;;;:::i;16570:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16570:98:0;;;:::i;14477:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14477:18:0;;;:::i;14347:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14347:22:0;;;:::i;25095:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25095:120:0;;;:::i;29875:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29875:96:0;;;;;;;;:::i;16785:710::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16785:710:0;;;:::i;3036:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3036:110:0;;;;;;;;:::i;30880:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30880:217:0;;;:::i;2198:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2198:140:0;;;:::i;14571:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14571:73:0;;;:::i;31103:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31103:154:0;;;:::i;14513:53::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14513:53:0;;;;;;;;:::i;28807:543::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28807:543:0;;;:::i;14837:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14837:23:0;;;:::i;:::-;;;;;;;;29975:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29975:141:0;;;;;;;;:::i;14374:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14374:19:0;;;:::i;1893:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1893:87:0;;;:::i;14427:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14427:19:0;;;:::i;2098:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2098:94:0;;;:::i;6525:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6525:87:0;;;:::i;24527:279::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24527:279:0;;;:::i;22291:97::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22291:97:0;;;;;;;;:::i;22394:706::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22394:706:0;;;:::i;4140:261::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4140:261:0;;;;;;;;:::i;25219:248::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25219:248:0;;;:::i;3152:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3152:158:0;;;;;;;;:::i;16429:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16429:137:0;;;;;;;;:::i;24812:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24812:107:0;;;:::i;18931:662::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18931:662:0;;;;;;;;:::i;22077:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22077:101:0;;;;;;;;:::i;16315:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16315:110:0;;;;;;;;:::i;25798:115::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25798:115:0;;;:::i;14451:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14451:21:0;;;:::i;3316:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3316:134:0;;;;;;;;:::i;30120:131::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30120:131:0;;;;;;;;:::i;14969:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14969:41:0;;;:::i;16672:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16672:109:0;;;;;;;;:::i;14919:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14919:45:0;;;:::i;14865:49::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14865:49:0;;;:::i;2344:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2344:117:0;;;;;;;;:::i;25471:203::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25471:203:0;;;:::i;22182:105::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22182:105:0;;;;;;;;:::i;14319:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14319:23:0;;;:::i;24269:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24269:120:0;;;:::i;24393:128::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24393:128:0;;;:::i;14294:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14294:20:0;;;:::i;23106:579::-;23194:13;;;23205:1;23194:13;;;;;;;;;23157:4;;23172:19;;23194:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23172:35;;23227:22;;;;;;;;23240:4;-1:-1:-1;;;;;23227:22:0;;;;;23247:1;23227:22;;;23216:5;23222:1;23216:8;;;;;;;;;;;;;:33;;;;23260:22;;:::i;:::-;23285:70;;;;;;;;;23297:4;23285:70;;;;;-1:-1:-1;23285:70:0;;;;23326:20;23285:70;;;;;;;23260:95;-1:-1:-1;23364:21:0;;:::i;:::-;23411:18;23394:3;23411:18;23394:35;;-1:-1:-1;23454:1:0;23438:13;;;:17;23464:10;;;;:16;;;23511:6;;23489:19;;;;:28;;;;23553:4;23526:16;;;:32;23596:19;;23613:1;23596:19;;;;;;;;;23489;;23596;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23569:46;;23634:3;23624:4;23629:1;23624:7;;;;;;;;;;;;;;;;;:13;23653:4;;23648:31;;-1:-1:-1;;;23648:31:0;;-1:-1:-1;;;;;23653:4:0;;;;23648:18;;:31;;23667:5;;23674:4;;23648:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23648:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23648:31:0;;;;23106:579;;;;;;;:::o;14398:24::-;;;-1:-1:-1;;;;;14398:24:0;;:::o;6436:83::-;6506:5;6499:12;;;;;;;;-1:-1:-1;;6499:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6473:13;;6499:12;;6506:5;;6499:12;;6506:5;6499:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6436:83;;:::o;15261:36::-;;;;;;:::o;3456:152::-;3522:4;3539:39;3548:12;:10;:12::i;:::-;3562:7;3571:6;3539:8;:39::i;:::-;-1:-1:-1;3596:4:0;3456:152;;;;;:::o;25678:116::-;25755:7;;25748:40;;-1:-1:-1;;;25748:40:0;;25725:7;;-1:-1:-1;;;;;25755:7:0;;25748:25;;:40;;25782:4;;25748:40;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25748:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25748:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25748:40:0;;;;;;;;;25741:47;;25678:116;:::o;14270:19::-;;;;:::o;2939:91::-;3010:12;;2939:91;:::o;3614:304::-;3703:4;3720:36;3730:6;3738:9;3749:6;3720:9;:36::i;:::-;3767:121;3776:6;3784:12;:10;:12::i;:::-;3798:89;3836:6;3798:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3798:19:0;;;;;;:11;:19;;;;;;3818:12;:10;:12::i;:::-;-1:-1:-1;;;;;3798:33:0;;;;;;;;;;;;-1:-1:-1;3798:33:0;;;:89;;:37;:89;:::i;:::-;3767:8;:121::i;:::-;-1:-1:-1;3906:4:0;3614:304;;;;;;:::o;14787:45::-;;;-1:-1:-1;;;;;14787:45:0;;:::o;19665:2249::-;6881:13;:18;;6898:1;6881:18;;;;;19756:11;19748:55;;;;-1:-1:-1;;;19748:55:0;;;;;;;;;;;;;;;;;19812:16;19831:21;19841:10;19831:9;:21::i;:::-;19812:40;;19880:8;19869:7;:19;;19861:52;;;;-1:-1:-1;;;19861:52:0;;;;;;;;;19929:23;:21;:23::i;:::-;19922:4;:30;19976:22;20001:19;:17;:19::i;:::-;19976:44;;20044:29;20076:37;20100:12;;20077:17;20086:7;20077:4;;:8;;:17;;;;:::i;:::-;20076:23;:37;:23;:37;:::i;:::-;20146:67;;;;;;;;;;;;;;;;;;;;20156:10;-1:-1:-1;20146:21:0;;;;;;;;;;;;20044:69;;-1:-1:-1;20146:67:0;;:21;20172:7;;20146:67;:25;:67;:::i;:::-;20132:10;20122:9;:21;;;;;;;;;;:91;20237:12;;:25;;20254:7;20237:25;:16;:25;:::i;:::-;20222:12;:40;20276:41;;20305:1;;20285:10;;20276:41;;;;20309:7;;20276:41;;;;;;;;;;20345:5;;20338:38;;-1:-1:-1;;;20338:38:0;;20326:9;;-1:-1:-1;;;;;20345:5:0;;20338:23;;:38;;20370:4;;20338:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20338:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20338:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20338:38:0;;;;;;;;;20326:50;;20393:21;20389:1;:25;20385:95;;;20427:43;20441:28;:21;20467:1;20441:28;:25;:28;:::i;:::-;20427:13;:43::i;:::-;20555:18;20576:30;:21;20602:3;20576:30;:25;:30;:::i;:::-;20634:10;20615:30;;;;:18;:30;;;;;;;20648:12;20615:45;;20669:9;;:46;;-1:-1:-1;;;20669:46:0;;20555:51;;-1:-1:-1;;;;;;20669:9:0;;:18;;:46;;20700:14;;20669:46;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20669:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20669:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20669:46:0;;;;;;;;;;20883:22;20908:21;20918:10;20908:9;:21::i;:::-;20968:9;;:31;;-1:-1:-1;;;20968:31:0;;20883:46;;-1:-1:-1;20938:27:0;;-1:-1:-1;;;;;20968:9:0;;;;:19;;:31;;20938:27;;20968:31;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20968:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20968:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20968:31:0;;;;;;;;;20938:61;;21034:19;;21012;:41;21008:739;;;21131:17;21151:31;21178:3;21151:22;:14;21170:2;21151:22;:18;:22;:::i;:31::-;21131:51;;21255:19;21264:9;21255:8;:19::i;:::-;-1:-1:-1;21325:22:0;21350:30;21376:3;21350:21;:14;21369:1;21350:21;:18;:21;:::i;:30::-;21424:22;;:47;;21325:55;;-1:-1:-1;;;;;;21424:22:0;;:47;;;;;21325:55;;21424:22;:47;:22;:47;21325:55;21424:22;:47;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21424:47:0;21008:739;;;;;21690:22;;:47;;21632:14;;-1:-1:-1;;;;;21690:22:0;;:47;;;;;21632:14;;21607:22;21690:47;21607:22;21690:47;21632:14;21690:22;:47;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21690:47:0;21008:739;;21755:77;21782:10;21794:37;:21;21820:10;21794:37;:25;:37;:::i;:::-;21762:5;;-1:-1:-1;;;;;21762:5:0;;21755:77;;:26;:77;:::i;:::-;21865:23;:21;:23::i;:::-;21858:4;:30;21897:11;:9;:11::i;:::-;6957:1;;;;;;;6993:13;;6977:12;:29;6969:73;;;;-1:-1:-1;;;6969:73:0;;;;;;;;;19665:2249;;:::o;16130:126::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16216:22;:34;;-1:-1:-1;;;;;;16216:34:0;-1:-1:-1;;;;;16216:34:0;;;;;;;;;;16130:126::o;14649:64::-;;;-1:-1:-1;;;;;14649:64:0;;:::o;6618:83::-;6684:9;;;;6618:83;:::o;3924:210::-;4004:4;4021:83;4030:12;:10;:12::i;:::-;4044:7;4053:50;4092:10;4053:11;:25;4065:12;:10;:12::i;:::-;-1:-1:-1;;;;;4053:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;4053:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;24925:166::-;24969:7;24987:14;;:::i;:::-;25009:4;;25029:22;;;;;;;;25042:4;25029:22;;25009:4;25029:22;;;;25053:6;;25004:56;;-1:-1:-1;;;25004:56:0;;-1:-1:-1;;;;;25009:4:0;;;;25004:24;;:56;;25029:22;25004:56;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25004:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25004:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25004:56:0;;;;;;;;;25076:9;;;;-1:-1:-1;;24925:166:0;:::o;14718:64::-;;;-1:-1:-1;;;;;14718:64:0;;:::o;15108:40::-;15145:3;15108:40;:::o;21988:85::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;22053:3;:14;;-1:-1:-1;;;;;;22053:14:0;-1:-1:-1;;;;;22053:14:0;;;;;;;;;;21988:85::o;16570:98::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16623:7;:5;:7::i;:::-;-1:-1:-1;;;;;16623:16:0;:39;16640:21;16623:39;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16623:39:0;16570:98::o;14477:18::-;;;-1:-1:-1;;;;;14477:18:0;;:::o;14347:22::-;;;-1:-1:-1;;;;;14347:22:0;;:::o;25095:120::-;25175:8;;25168:41;;-1:-1:-1;;;25168:41:0;;25143:7;;-1:-1:-1;;;;;25175:8:0;;25168:26;;:41;;25203:4;;25168:41;;;;29875:96;29929:9;:7;:9::i;:::-;29948:5;;29924:41;;-1:-1:-1;;;29924:41:0;;-1:-1:-1;;;;;29924:23:0;;;;;;:41;;29948:5;;;29955:6;;29948:5;;29924:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29924:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29924:41:0;;;;29875:96;:::o;16785:710::-;16900:10;16834:7;16881:30;;;:18;:30;;;;;;16834:7;;16881:34;16877:151;;16977:10;16958:30;;;;:18;:30;;;;;;16941:48;;:12;;:48;:16;:48;:::i;:::-;16926:63;;16877:151;;;17019:1;17012:8;;;;;16877:151;17034:16;17053:21;17063:10;17053:9;:21::i;:::-;17034:40;;17103:30;17160:1;17144:12;;:17;17140:170;;-1:-1:-1;17197:1:0;17140:170;;;17246:56;17289:12;;17247:36;17274:8;17247:22;:20;:22::i;:::-;:26;:36;:26;:36;:::i;17246:56::-;17221:81;;17140:170;17316:22;17341:120;14960:4;17341:100;17428:12;17341:82;17418:4;17341:72;17394:18;;17341:48;15145:3;17341:32;17368:4;17341:22;:26;;:32;;;;:::i;:120::-;17316:145;-1:-1:-1;;;;;16785:710:0;:::o;3036:110::-;-1:-1:-1;;;;;3120:18:0;;3093:7;3120:18;;;;;;;;;;;3036:110;;;;:::o;30880:217::-;30933:4;30953:138;31081:9;:7;:9::i;:::-;30953:115;31054:13;:11;:13::i;:::-;30953:88;31027:13;:11;:13::i;:::-;30953:61;30990:23;:21;:23::i;:::-;30953:24;:22;:24::i;:::-;:36;:61;:36;:61;:::i;2198:140::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;2281:6;;2260:40;;2297:1;;-1:-1:-1;;;;;2281:6:0;;2260:40;;2297:1;;2260:40;2311:6;:19;;-1:-1:-1;;;;;;2311:19:0;;;2198:140::o;14571:73::-;;;-1:-1:-1;;;;;14571:73:0;;:::o;31103:154::-;31156:4;31169:10;31182:22;:20;:22::i;:::-;31238:12;;31169:35;;-1:-1:-1;31218:33:0;;:15;31169:35;31228:4;31218:15;:9;:15;:::i;:33::-;31211:40;;;31103:154;:::o;14513:53::-;;;;;;;;;;;;;:::o;28807:543::-;28842:18;28863:11;:9;:11::i;:::-;28902:8;;28842:32;;-1:-1:-1;28902:8:0;;28887:23;;;;;;;;:11;:23;;;;;;;;;28883:60;;28921:14;:12;:14::i;:::-;28967:1;28955:9;:7;:9::i;:::-;:13;28951:363;;;28998:11;28983;:26;;;;;;;;;28979:328;;;29022:21;29033:9;:7;:9::i;29022:21::-;;28979:328;;;29078:14;29063:11;:29;;;;;;;;;29059:248;;;29105:24;29119:9;:7;:9::i;29105:24::-;29059:248;;;29164:15;29149:11;:30;;;;;;;;;29145:162;;;29192:25;29207:9;:7;:9::i;29145:162::-;29252:11;29237;:26;;;;;;;;;29233:74;;;29276:21;29287:9;:7;:9::i;29276:21::-;29322:8;:22;;29333:11;;29322:8;-1:-1:-1;;29322:22:0;;29333:11;29322:22;;;;;;;;;;;;;28807:543;:::o;14837:23::-;;;-1:-1:-1;;;;;14837:23:0;;:::o;29975:141::-;30043:7;;30035:44;;-1:-1:-1;;;30035:44:0;;30082:1;;-1:-1:-1;;;;;30043:7:0;;30035:21;;:44;;30065:4;;30072:6;;30035:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30035:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30035:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30035:44:0;;;;;;;;;:48;30027:83;;;;-1:-1:-1;;;30027:83:0;;;;;;;;14374:19;;;-1:-1:-1;;;;;14374:19:0;;:::o;1893:87::-;1966:6;;-1:-1:-1;;;;;1966:6:0;1893:87;:::o;14427:19::-;;;-1:-1:-1;;;;;14427:19:0;;:::o;2098:94::-;2178:6;;2138:4;;-1:-1:-1;;;;;2178:6:0;2162:12;:10;:12::i;:::-;-1:-1:-1;;;;;2162:22:0;;2155:29;;2098:94;:::o;6525:87::-;6597:7;6590:14;;;;;;;;-1:-1:-1;;6590:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6564:13;;6590:14;;6597:7;;6590:14;;6597:7;6590:14;;;;;;;;;;;;;;;;;;;;;;;;24527:279;24593:8;;24574:5;;24567:45;;-1:-1:-1;;;;;24574:5:0;;;;24593:8;-1:-1:-1;;24567:45:0;:25;:45;:::i;:::-;24673:4;;24654:5;;24647:41;;-1:-1:-1;;;;;24654:5:0;;;;24673:4;-1:-1:-1;;24647:41:0;:25;:41;:::i;:::-;24697:50;24723:13;:11;:13::i;:::-;24704:5;;-1:-1:-1;;;;;24704:5:0;;-1:-1:-1;;24697:50:0;:25;:50;:::i;:::-;24782:7;;24763:5;;24756:44;;-1:-1:-1;;;;;24763:5:0;;;;24782:7;-1:-1:-1;;24756:44:0;:25;:44;:::i;:::-;24527:279::o;22291:97::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;22362:6;:20;22291:97::o;22394:706::-;22522:3;;22537:5;;22508:35;;-1:-1:-1;;;22508:35:0;;22436:6;;;;;;;;;;-1:-1:-1;;;;;22522:3:0;;;;22508:28;;:35;;22537:5;;22508:35;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22508:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22508:35:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;22508:35:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;22508:35:0;;;;;;;;;22451:92;;-1:-1:-1;22451:92:0;;-1:-1:-1;22451:92:0;-1:-1:-1;22451:92:0;-1:-1:-1;22550:11:0;;-1:-1:-1;22576:10:0;;22572:43;;-1:-1:-1;22603:4:0;22572:43;22632:3;22625:4;:10;22621:43;;;-1:-1:-1;22652:4:0;22621:43;22681:3;22674:4;:10;22670:43;;;-1:-1:-1;22701:4:0;22670:43;22730:3;22723:4;:10;22719:43;;;-1:-1:-1;22750:4:0;22719:43;22770:18;22813:11;;;22809:261;;;-1:-1:-1;22849:15:0;22809:261;;;22889:4;22882:3;:11;22878:192;;;-1:-1:-1;22918:14:0;22878:192;;;22957:4;22950:3;:11;22946:124;;;-1:-1:-1;22986:11:0;22946:124;;;23022:4;23015:3;:11;23011:59;;;-1:-1:-1;23051:11:0;23011:59;23083:11;-1:-1:-1;;;;;;22394:706:0;:::o;4140:261::-;4225:4;4242:129;4251:12;:10;:12::i;:::-;4265:7;4274:96;4313:15;4274:96;;;;;;;;;;;;;;;;;:11;:25;4286:12;:10;:12::i;:::-;-1:-1:-1;;;;;4274:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;4274:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;25219:248::-;25274:7;25323:9;25335:17;:15;:17::i;:::-;25323:29;-1:-1:-1;25363:5:0;;25359:88;;25383:56;25434:4;25383:46;25398:8;;;;;;;;;-1:-1:-1;;;;;25398:8:0;-1:-1:-1;;;;;25389:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25389:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25389:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25389:39:0;;;;;;;;;25383:1;;:46;:5;:46;:::i;3152:158::-;3221:4;3238:42;3248:12;:10;:12::i;:::-;3262:9;3273:6;3238:9;:42::i;16429:137::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16516:44;;-1:-1:-1;;;16516:44:0;;-1:-1:-1;;;;;16516:23:0;;;;;:44;;16540:10;;16552:7;;16516:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16516:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16516:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16516:44:0;;;;;;;;;;16429:137;;:::o;24812:107::-;24882:5;;24875:38;;-1:-1:-1;;;24875:38:0;;24852:7;;-1:-1:-1;;;;;24882:5:0;;24875:23;;:38;;24907:4;;24875:38;;;;18931:662;6881:13;:18;;6898:1;6881:18;;;;;19021:11;19013:54;;;;-1:-1:-1;;;19013:54:0;;;;;;;;;19083:23;:21;:23::i;:::-;19076:4;:30;19122:5;;19115:66;;-1:-1:-1;;;;;19122:5:0;19146:10;19166:4;19173:7;19115:66;:30;:66;:::i;:::-;19234:10;19215:30;;;;:18;:30;;;;;19248:12;19215:45;;19349:4;;19345:150;;-1:-1:-1;19398:4:0;:14;;;19380:7;19345:150;;;19448:37;19480:4;;19449:25;19461:12;;19449:7;:11;;:25;;;;:::i;19448:37::-;19439:46;;19345:150;19510:23;:21;:23::i;:::-;19503:4;:30;19542:25;19548:10;19560:6;19542:5;:25::i;:::-;19576:11;:9;:11::i;:::-;6957:1;6993:13;;6977:12;:29;6969:73;;;;-1:-1:-1;;;6969:73:0;;;;;;;;22077:101;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;22150:7;:22;;-1:-1:-1;;;;;;22150:22:0;-1:-1:-1;;;;;22150:22:0;;;;;;;;;;22077:101::o;16315:110::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16389:13;:30;;-1:-1:-1;;;;;;16389:30:0;-1:-1:-1;;;;;16389:30:0;;;;;;;;;;16315:110::o;25798:115::-;25872:9;;25865:42;;-1:-1:-1;;;25865:42:0;;25842:7;;-1:-1:-1;;;;;25872:9:0;;25865:27;;:42;;25901:4;;25865:42;;;;14451:21;;;;:::o;3316:134::-;-1:-1:-1;;;;;3415:18:0;;;3388:7;3415:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3316:134::o;30120:131::-;30190:8;;30181:31;;-1:-1:-1;;;30181:31:0;;-1:-1:-1;;;;;30190:8:0;;;;30181:23;;:31;;30205:6;;30181:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30181:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30181:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30181:31:0;;;;;;;;;:36;30173:72;;;;-1:-1:-1;;;30173:72:0;;;;;;;;14969:41;;;;:::o;16672:109::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;16747:18;:28;16672:109::o;14919:45::-;14960:4;14919:45;:::o;14865:49::-;;;;:::o;2344:117::-;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;2425:28;2444:8;2425:18;:28::i;25471:203::-;25525:7;25541:9;25553:16;:14;:16::i;:::-;25541:28;-1:-1:-1;25580:5:0;;25576:78;;25608:7;;25600:46;;-1:-1:-1;;;25600:46:0;;-1:-1:-1;;;;;25608:7:0;;;;25600:31;;:46;;25640:4;;25600:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25600:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25600:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25600:46:0;;;;;;;;22182:105;2026:9;:7;:9::i;:::-;2018:54;;;;-1:-1:-1;;;2018:54:0;;;;;;;;;22257:8;:24;;-1:-1:-1;;;;;;22257:24:0;-1:-1:-1;;;;;22257:24:0;;;;;;;;;;22182:105::o;14319:23::-;;;-1:-1:-1;;;;;14319:23:0;;:::o;24269:120::-;24361:4;;24332:51;;;-1:-1:-1;;;24332:51:0;;;;24309:7;;-1:-1:-1;;;;;24361:4:0;;24332:49;;:51;;;;;;;;;;;;;;24361:4;24332:51;;;5:2:-1;;;;30:1;27;20:12;5:2;24332:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24332:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24332:51:0;;;;;;;;24393:128;24489:4;;24460:55;;;-1:-1:-1;;;24460:55:0;;;;24437:7;;-1:-1:-1;;;;;24489:4:0;;24460:53;;:55;;;;;;;;;;;;;;24489:4;24460:55;;;5:2:-1;;;;30:1;27;20:12;14294:20:0;;;-1:-1:-1;;;;;14294:20:0;;:::o;1265:98::-;1345:10;1265:98;:::o;5552:338::-;-1:-1:-1;;;;;5646:19:0;;5638:68;;;;-1:-1:-1;;;5638:68:0;;;;;;;;;-1:-1:-1;;;;;5725:21:0;;5717:68;;;;-1:-1:-1;;;5717:68:0;;;;;;;;;-1:-1:-1;;;;;5798:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;5850:32;;;;;5828:6;;5850:32;;;;;;;;;;5552:338;;;:::o;4407:471::-;-1:-1:-1;;;;;4505:20:0;;4497:70;;;;-1:-1:-1;;;4497:70:0;;;;;;;;;-1:-1:-1;;;;;4586:23:0;;4578:71;;;;-1:-1:-1;;;4578:71:0;;;;;;;;;4682;4704:6;4682:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4682:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;4662:17:0;;;:9;:17;;;;;;;;;;;:91;;;;4787:20;;;;;;;:32;;4812:6;4787:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;4764:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;4835:35;;;;;;;;;;4863:6;;4835:35;;7410:192;7496:7;7532:12;7524:6;;;;7516:29;;;;-1:-1:-1;;;7516:29:0;;;;;;;;;;-1:-1:-1;;;7568:5:0;;;7410:192::o;7608:250::-;7666:7;7690:6;7686:47;;-1:-1:-1;7720:1:0;7713:8;;7686:47;7757:5;;;7761:1;7757;:5;:1;7781:5;;;;;:10;7773:56;;;;-1:-1:-1;;;7773:56:0;;;;;;;;7864:132;7922:7;7949:39;7953:1;7956;7949:39;;;;;;;;;;;;;;;;;:3;:39::i;7268:136::-;7326:7;7353:43;7357:1;7360;7353:43;;;;;;;;;;;;;;;;;:3;:43::i;28300:501::-;28372:15;28360:8;;;;:27;;;;;;;;;28356:80;;;28398:30;28420:7;28398:21;:30::i;:::-;28458:11;28446:8;;;;:23;;;;;;;;;28442:132;;;28505:7;28488:13;:11;:13::i;:::-;:24;;28480:55;;;;-1:-1:-1;;;28480:55:0;;;;;;;;;28544:22;28558:7;28544:13;:22::i;:::-;28596:11;28584:8;;;;:23;;;;;;;;;28580:132;;;28643:7;28626:13;:11;:13::i;:::-;:24;;28618:55;;;;-1:-1:-1;;;28618:55:0;;;;;;;;;28682:22;28696:7;28682:13;:22::i;:::-;28734:14;28722:8;;;;:26;;;;;;;;;28718:78;;;28759:29;28780:7;28759:20;:29::i;17582:854::-;17678:13;;17660:4;;17635:7;;17653:42;;-1:-1:-1;;;;;17660:4:0;;;;17678:13;17635:7;17653:42;:24;:42;:::i;:::-;17729:13;;17711:4;;17704:48;;-1:-1:-1;;;;;17711:4:0;;;;17729:13;17744:7;17704:48;:24;:48;:::i;:::-;17785:16;;;17799:1;17785:16;;;17761:21;17785:16;;;;;17761:21;17785:16;;;;;105:10:-1;17785:16:0;88:34:-1;-1:-1;;17820:4:0;;17810:7;;;;-1:-1:-1;;;;;;17820:4:0;;17810:7;;-1:-1:-1;17820:4:0;;17810:7;;;;-1:-1:-1;;;;;17810:14:0;;;:7;;;;;;;;;:14;17843:4;;17833:7;;17843:4;;;17833;;17843;;17833:7;;;;;;-1:-1:-1;;;;;17833:14:0;;;:7;;;;;;;;;:14;18314:13;;18281:21;;18314:13;18305:45;18351:7;18314:13;18369:4;18383;18390:13;:3;18398:4;18390:13;:7;:13;:::i;:::-;18305:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18305:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18305:99:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18305:99:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18305:99:0;;;;;;;;;18281:123;;18420:7;18428:1;18420:10;;;;;;;;;;;;;;18413:17;;;;17582:854;;;:::o;18440:425::-;18535:16;;;18549:1;18535:16;;;18511:21;18535:16;;;;;18495:7;;18511:21;;18535:16;18549:1;18535:16;;;;;105:10:-1;18535:16:0;88:34:-1;-1:-1;;18568:4:0;;18558:7;;;;-1:-1:-1;;;;;;18568:4:0;;18558:7;;-1:-1:-1;18568:4:0;;18558:7;;;;-1:-1:-1;;;;;18558:14:0;;;:7;;;;;;;;;:14;18597:9;;18579:7;;18597:9;;;18579:4;;18597:9;;18579:7;;;;;;-1:-1:-1;;;;;18579:28:0;;;:7;;;;;;;;;:28;18739:13;;18706:21;;18739:13;18730:45;18782:10;18739:13;18803:4;18739:13;18821;:3;18829:4;18821:13;:7;:13;:::i;:::-;18730:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18730:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18730:105:0;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18730:105:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18730:105:0;;;;;;;;9581:176;9690:58;;9664:85;;9683:5;;-1:-1:-1;;;9713:23:0;9690:58;;9738:2;;9742:5;;9690:58;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;9690:58:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;9690:58:0;;;179:29:-1;;;;160:49;;;9664:18:0;:85::i;7081:181::-;7139:7;7171:5;;;7195:6;;;;7187:46;;;;-1:-1:-1;;;7187:46:0;;;;;;;;27047:421;27087:14;27104:18;:16;:18::i;:::-;27087:35;-1:-1:-1;27133:10:0;;27129:58;;27154:25;27172:6;27154:17;:25::i;:::-;27202:14;:12;:14::i;:::-;27193:23;-1:-1:-1;27227:10:0;;27223:54;;27248:21;27262:6;27248:13;:21::i;:::-;27292:17;:15;:17::i;:::-;27283:26;-1:-1:-1;27320:10:0;;27316:57;;27341:24;27358:6;27341:16;:24::i;:::-;27388:14;:12;:14::i;:::-;27379:23;-1:-1:-1;27413:10:0;;27409:54;;27434:21;27448:6;27434:13;:21::i;9977:347::-;10073:10;;;10072:62;;-1:-1:-1;10089:39:0;;-1:-1:-1;;;10089:39:0;;-1:-1:-1;;;;;10089:15:0;;;;;:39;;10113:4;;10120:7;;10089:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10089:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10089:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10089:39:0;;;;;;;;;:44;10072:62;10064:152;;;;-1:-1:-1;;;10064:152:0;;;;;;;;;10253:62;;10227:89;;10246:5;;-1:-1:-1;;;10276:22:0;10253:62;;10300:7;;10309:5;;10253:62;;;;9765:204;9892:68;;9866:95;;9885:5;;-1:-1:-1;;;9915:27:0;9892:68;;9944:4;;9950:2;;9954:5;;9892:68;;;;9866:95;9765:204;;;;:::o;4884:308::-;-1:-1:-1;;;;;4960:21:0;;4952:65;;;;-1:-1:-1;;;4952:65:0;;;;;;;;;5045:12;;:24;;5062:6;5045:24;:16;:24;:::i;:::-;5030:12;:39;-1:-1:-1;;;;;5101:18:0;;:9;:18;;;;;;;;;;;:30;;5124:6;5101:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;5080:18:0;;:9;:18;;;;;;;;;;;:51;;;;5147:37;;5080:18;;:9;5147:37;;;;5177:6;;5147:37;;;;;;;;;;4884:308;;:::o;2467:237::-;-1:-1:-1;;;;;2549:22:0;;2541:73;;;;-1:-1:-1;;;2541:73:0;;;;;;;;;2651:6;;2630:38;;-1:-1:-1;;;;;2630:38:0;;;;2651:6;;2630:38;;2651:6;;2630:38;2679:6;:17;;-1:-1:-1;;;;;;2679:17:0;-1:-1:-1;;;;;2679:17:0;;;;;;;;;;2467:237::o;8002:258::-;8088:7;8190:12;8183:5;8175:28;;;;-1:-1:-1;;;8175:28:0;;;;;;;;;;;8214:9;8230:1;8226;:5;;;;;;;8002:258;-1:-1:-1;;;;;8002:258:0:o;27474:328::-;27538:9;27550:17;:15;:17::i;:::-;27538:29;;27574:10;27587:24;:22;:24::i;:::-;27574:37;;27632:7;27626:2;:13;;27618:44;;;;-1:-1:-1;;;27618:44:0;;;;;;;;;27716:14;27733:31;27762:1;27733:24;27754:2;27734:14;:1;27740:7;27734:14;:5;:14;:::i;27733:31::-;27716:48;;27771:25;27789:6;27771:17;:25::i;30255:92::-;30316:9;;30309:32;;-1:-1:-1;;;30309:32:0;;-1:-1:-1;;;;;30316:9:0;;;;30309:24;;:32;;30334:6;;30309:32;;;;23691:572;23770:13;;;23781:1;23770:13;;;;;;;;;23748:19;;23770:13;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23748:35;;23803:22;;;;;;;;23816:4;-1:-1:-1;;;;;23803:22:0;;;;;23823:1;23803:22;;;23792:5;23798:1;23792:8;;;;;;;;;;;;;:33;;;;23836:22;;:::i;:::-;23861:71;;;;;;;;;-1:-1:-1;23861:71:0;;;;;;;;;;;23903:20;23861:71;;;;;;;23836:96;-1:-1:-1;23941:21:0;;:::i;:::-;23988:19;23971:3;23988:19;23971:36;;-1:-1:-1;24032:1:0;24016:13;;;:17;24042:10;;;;:16;;;24089:6;;24067:19;;;;:28;;;;24131:4;24104:16;;;:32;24174:19;;24191:1;24174:19;;;;;;;;;24067;;24174;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24147:46;;24212:3;24202:4;24207:1;24202:7;;;;;;;;;;;;;;;;;:13;24231:4;;24226:31;;-1:-1:-1;;;24226:31:0;;-1:-1:-1;;;;;24231:4:0;;;;24226:18;;:31;;24245:5;;24252:4;;24226:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24226:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24226:31:0;;;;23691:572;;;;;:::o;27834:460::-;27951:9;27963:16;:14;:16::i;:::-;27951:28;;28045:10;28058:23;:21;:23::i;:::-;28045:36;;28125:7;28119:2;:13;;28111:44;;;;-1:-1:-1;;;28111:44:0;;;;;;;;;28209:14;28226:31;28255:1;28226:24;28247:2;28227:14;:1;28233:7;28227:14;:5;:14;:::i;28226:31::-;28209:48;;28264:24;28281:6;28264:16;:24::i;10961:598::-;11049:27;11057:5;-1:-1:-1;;;;;11049:25:0;;:27::i;:::-;11041:71;;;;-1:-1:-1;;;11041:71:0;;;;;;;;;11186:12;11200:23;11235:5;-1:-1:-1;;;;;11227:19:0;11247:4;11227:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11185:67:0;;;;11271:7;11263:52;;;;-1:-1:-1;;;11263:52:0;;;;;;;;;11332:17;;:21;11328:224;;11474:10;11463:30;;;;;;;;;;;;;;11455:85;;;;-1:-1:-1;;;11455:85:0;;;;;;;;30503:140;30578:8;;30569:33;;-1:-1:-1;;;30569:33:0;;-1:-1:-1;;;;;30578:8:0;;;;30569:25;;:33;;30595:6;;30569:33;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30569:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30569:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30569:33:0;;;;;;;;;:38;30561:76;;;;-1:-1:-1;;;30561:76:0;;;;;;;;30351:148;30424:7;;30416:44;;-1:-1:-1;;;30416:44:0;;30463:1;;-1:-1:-1;;;;;30424:7:0;;30416:21;;:44;;30446:4;;30453:6;;30416:44;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30416:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30416:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30416:44:0;;;;;;;;;:48;30408:85;;;;-1:-1:-1;;;30408:85:0;;;;;;;;8598:374;8658:4;8881:20;;8724:66;8921:15;;;;;:42;;;8952:11;8940:8;:23;;8921:42;8913:51;8598:374;-1:-1:-1;;;;8598:374:0:o;14097:17163::-;;;;;;;;;;-1:-1:-1;14097:17163:0;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;14097:17163:0;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;14097:17163:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14097:17163:0;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;454:722;;582:3;575:4;567:6;563:17;559:27;549:2;;600:1;597;590:12;549:2;630:6;624:13;652:80;667:64;724:6;667:64;;;652:80;;;643:89;;749:5;774:6;767:5;760:21;804:4;796:6;792:17;782:27;;826:4;821:3;817:14;810:21;;879:6;926:3;918:4;910:6;906:17;901:3;897:27;894:36;891:2;;;943:1;940;933:12;891:2;968:1;953:217;978:6;975:1;972:13;953:217;;;1036:3;1058:48;1102:3;1090:10;1058:48;;;1046:61;;-1:-1;1130:4;1121:14;;;;1149;;;;;1000:1;993:9;953:217;;;957:14;542:634;;;;;;;;1184:128;1259:13;;1277:30;1259:13;1277:30;;1320:444;;1433:3;1426:4;1418:6;1414:17;1410:27;1400:2;;1451:1;1448;1441:12;1400:2;1481:6;1475:13;1503:65;1518:49;1560:6;1518:49;;1503:65;1494:74;;1588:6;1581:5;1574:21;1624:4;1616:6;1612:17;1657:4;1650:5;1646:16;1692:3;1683:6;1678:3;1674:16;1671:25;1668:2;;;1709:1;1706;1699:12;1668:2;1719:39;1751:6;1746:3;1741;1719:39;;;1393:371;;;;;;;;1797:494;;1918:4;1906:9;1901:3;1897:19;1893:30;1890:2;;;1936:1;1933;1926:12;1890:2;1954:20;1969:4;1954:20;;;1945:29;-1:-1;2024:1;2056:57;2109:3;2089:9;2056:57;;;2031:83;;-1:-1;2176:2;2209:60;2265:3;2241:22;;;2209:60;;;2202:4;2195:5;2191:16;2184:86;2135:146;1884:407;;;;;2298:130;2365:20;;2390:33;2365:20;2390:33;;2435:134;2513:13;;2531:33;2513:13;2531:33;;2576:241;;2680:2;2668:9;2659:7;2655:23;2651:32;2648:2;;;2696:1;2693;2686:12;2648:2;2731:1;2748:53;2793:7;2773:9;2748:53;;2824:263;;2939:2;2927:9;2918:7;2914:23;2910:32;2907:2;;;2955:1;2952;2945:12;2907:2;2990:1;3007:64;3063:7;3043:9;3007:64;;3358:366;;;3479:2;3467:9;3458:7;3454:23;3450:32;3447:2;;;3495:1;3492;3485:12;3447:2;3530:1;3547:53;3592:7;3572:9;3547:53;;;3537:63;;3509:97;3637:2;3655:53;3700:7;3691:6;3680:9;3676:22;3655:53;;;3645:63;;3616:98;3441:283;;;;;;3731:491;;;;3869:2;3857:9;3848:7;3844:23;3840:32;3837:2;;;3885:1;3882;3875:12;3837:2;3920:1;3937:53;3982:7;3962:9;3937:53;;;3927:63;;3899:97;4027:2;4045:53;4090:7;4081:6;4070:9;4066:22;4045:53;;;4035:63;;4006:98;4135:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;;;4143:63;;4114:98;3831:391;;;;;;4229:366;;;4350:2;4338:9;4329:7;4325:23;4321:32;4318:2;;;4366:1;4363;4356:12;4318:2;4401:1;4418:53;4463:7;4443:9;4418:53;;;4408:63;;4380:97;4508:2;4526:53;4571:7;4562:6;4551:9;4547:22;4526:53;;4602:392;;4742:2;4730:9;4721:7;4717:23;4713:32;4710:2;;;4758:1;4755;4748:12;4710:2;4793:24;;4837:18;4826:30;;4823:2;;;4869:1;4866;4859:12;4823:2;4889:89;4970:7;4961:6;4950:9;4946:22;4889:89;;5001:257;;5113:2;5101:9;5092:7;5088:23;5084:32;5081:2;;;5129:1;5126;5119:12;5081:2;5164:1;5181:61;5234:7;5214:9;5181:61;;5265:908;;;;;;5458:3;5446:9;5437:7;5433:23;5429:33;5426:2;;;5475:1;5472;5465:12;5426:2;5510:24;;5554:18;5543:30;;5540:2;;;5586:1;5583;5576:12;5540:2;5606:74;5672:7;5663:6;5652:9;5648:22;5606:74;;;5596:84;;5489:197;5717:2;5735:64;5791:7;5782:6;5771:9;5767:22;5735:64;;;5725:74;;5696:109;5836:2;5854:64;5910:7;5901:6;5890:9;5886:22;5854:64;;;5844:74;;5815:109;5955:2;5973:64;6029:7;6020:6;6009:9;6005:22;5973:64;;;5963:74;;5934:109;6074:3;6093:64;6149:7;6140:6;6129:9;6125:22;6093:64;;;6083:74;;6053:110;5420:753;;;;;;;;;6180:305;;6316:2;6304:9;6295:7;6291:23;6287:32;6284:2;;;6332:1;6329;6322:12;6284:2;6367:1;6384:85;6461:7;6441:9;6384:85;;6492:241;;6596:2;6584:9;6575:7;6571:23;6567:32;6564:2;;;6612:1;6609;6602:12;6564:2;6647:1;6664:53;6709:7;6689:9;6664:53;;6740:263;;6855:2;6843:9;6834:7;6830:23;6826:32;6823:2;;;6871:1;6868;6861:12;6823:2;6906:1;6923:64;6979:7;6959:9;6923:64;;7011:173;;7098:46;7140:3;7132:6;7098:46;;;-1:-1;;7173:4;7164:14;;7091:93;7193:253;;7342:98;7436:3;7428:6;7342:98;;7455:249;;7578:86;7660:3;7652:6;7578:86;;;-1:-1;;7693:4;7684:14;;7571:133;7712:142;7803:45;7842:5;7803:45;;;7798:3;7791:58;7785:69;;;7861:137;7960:32;7986:5;7960:32;;8266:690;;8411:54;8459:5;8411:54;;;8478:86;8557:6;8552:3;8478:86;;;8471:93;;8585:56;8635:5;8585:56;;;8661:7;8689:1;8674:260;8699:6;8696:1;8693:13;8674:260;;;8766:6;8760:13;8787:63;8846:3;8831:13;8787:63;;;8780:70;;8867:60;8920:6;8867:60;;;8857:70;-1:-1;;8721:1;8714:9;8674:260;;;-1:-1;8947:3;;8390:566;-1:-1;;;;;8390:566;9031:1040;;9224:78;9296:5;9224:78;;;9315:110;9418:6;9413:3;9315:110;;;9308:117;;9448:3;9490:4;9482:6;9478:17;9473:3;9469:27;9517:80;9591:5;9517:80;;;9617:7;9645:1;9630:402;9655:6;9652:1;9649:13;9630:402;;;9717:9;9711:4;9707:20;9702:3;9695:33;9762:6;9756:13;9784:112;9891:4;9876:13;9784:112;;;9776:120;;9913:84;9990:6;9913:84;;;10020:4;10011:14;;;;;9903:94;-1:-1;;9677:1;9670:9;9630:402;;;-1:-1;10045:4;;9203:868;-1:-1;;;;;;;9203:868;10134:834;;10315:72;10381:5;10315:72;;;10400:104;10497:6;10492:3;10400:104;;;10393:111;;10525:74;10593:5;10525:74;;;10619:7;10647:1;10632:314;10657:6;10654:1;10651:13;10632:314;;;10724:6;10718:13;10745:99;10840:3;10825:13;10745:99;;;10738:106;;10861:78;10932:6;10861:78;;;10851:88;-1:-1;;10679:1;10672:9;10632:314;;10976:94;11043:21;11058:5;11043:21;;11188:356;;11316:38;11348:5;11316:38;;;11366:88;11447:6;11442:3;11366:88;;;11359:95;;11459:52;11504:6;11499:3;11492:4;11485:5;11481:16;11459:52;;;11523:16;;;;;11296:248;-1:-1;;11296:248;11551:315;;11647:34;11675:5;11647:34;;;11693:60;11746:6;11741:3;11693:60;;;11686:67;;11758:52;11803:6;11798:3;11791:4;11784:5;11780:16;11758:52;;;11831:29;11853:6;11831:29;;;11822:39;;;;11627:239;-1:-1;;;11627:239;11873:154;11970:51;12015:5;11970:51;;12034:142;12120:50;12164:5;12120:50;;12183:156;12276:57;12327:5;12276:57;;12503:144;12595:46;12635:5;12595:46;;12654:140;12744:44;12782:5;12744:44;;13156:372;;13316:67;13380:2;13375:3;13316:67;;;13416:34;13396:55;;-1:-1;;;13480:2;13471:12;;13464:27;13519:2;13510:12;;13302:226;-1:-1;;13302:226;13537:325;;13697:67;13761:2;13756:3;13697:67;;;13797:27;13777:48;;13853:2;13844:12;;13683:179;-1:-1;;13683:179;13871:375;;14031:67;14095:2;14090:3;14031:67;;;14131:34;14111:55;;-1:-1;;;14195:2;14186:12;;14179:30;14237:2;14228:12;;14017:229;-1:-1;;14017:229;14255:371;;14415:67;14479:2;14474:3;14415:67;;;14515:34;14495:55;;-1:-1;;;14579:2;14570:12;;14563:26;14617:2;14608:12;;14401:225;-1:-1;;14401:225;14635:323;;14795:67;14859:2;14854:3;14795:67;;;14895:25;14875:46;;14949:2;14940:12;;14781:177;-1:-1;;14781:177;14967:327;;15127:67;15191:2;15186:3;15127:67;;;15227:29;15207:50;;15285:2;15276:12;;15113:181;-1:-1;;15113:181;15303:332;;15463:67;15527:2;15522:3;15463:67;;;15563:34;15543:55;;15626:2;15617:12;;15449:186;-1:-1;;15449:186;15644:370;;15804:67;15868:2;15863:3;15804:67;;;15904:34;15884:55;;-1:-1;;;15968:2;15959:12;;15952:25;16005:2;15996:12;;15790:224;-1:-1;;15790:224;16023:324;;16183:67;16247:2;16242:3;16183:67;;;16283:26;16263:47;;16338:2;16329:12;;16169:178;-1:-1;;16169:178;16356:332;;16516:67;16580:2;16575:3;16516:67;;;16616:34;16596:55;;16679:2;16670:12;;16502:186;-1:-1;;16502:186;16697:320;;16857:67;16921:2;16916:3;16857:67;;;-1:-1;;;16937:43;;17008:2;16999:12;;16843:174;-1:-1;;16843:174;17026:331;;17186:67;17250:2;17245:3;17186:67;;;17286:33;17266:54;;17348:2;17339:12;;17172:185;-1:-1;;17172:185;17366:374;;17526:67;17590:2;17585:3;17526:67;;;17626:34;17606:55;;-1:-1;;;17690:2;17681:12;;17674:29;17731:2;17722:12;;17512:228;-1:-1;;17512:228;17749:318;;17909:67;17973:2;17968:3;17909:67;;;-1:-1;;;17989:41;;18058:2;18049:12;;17895:172;-1:-1;;17895:172;18076:373;;18236:67;18300:2;18295:3;18236:67;;;18336:34;18316:55;;-1:-1;;;18400:2;18391:12;;18384:28;18440:2;18431:12;;18222:227;-1:-1;;18222:227;18458:330;;18618:67;18682:2;18677:3;18618:67;;;18718:32;18698:53;;18779:2;18770:12;;18604:184;-1:-1;;18604:184;18797:322;;18957:67;19021:2;19016:3;18957:67;;;-1:-1;;;19037:45;;19110:2;19101:12;;18943:176;-1:-1;;18943:176;19128:379;;19288:67;19352:2;19347:3;19288:67;;;19388:34;19368:55;;-1:-1;;;19452:2;19443:12;;19436:34;19498:2;19489:12;;19274:233;-1:-1;;19274:233;19516:331;;19676:67;19740:2;19735:3;19676:67;;;19776:33;19756:54;;19838:2;19829:12;;19662:185;-1:-1;;19662:185;19856:391;;20016:67;20080:2;20075:3;20016:67;;;20116:34;20096:55;;-1:-1;;;20180:2;20171:12;;20164:46;20238:2;20229:12;;20002:245;-1:-1;;20002:245;20256:331;;20416:67;20480:2;20475:3;20416:67;;;20516:33;20496:54;;20578:2;20569:12;;20402:185;-1:-1;;20402:185;20596:331;;20756:67;20820:2;20815:3;20756:67;;;20856:33;20836:54;;20918:2;20909:12;;20742:185;-1:-1;;20742:185;20996:1611;21213:23;;20996:1611;;21139:6;21130:16;;;21242:76;21134:3;21213:23;21242:76;;;21161:163;21402:4;21395:5;21391:16;21385:23;21414:63;21471:4;21466:3;21462:14;21448:12;21414:63;;;21334:149;21558:4;21551:5;21547:16;21541:23;21570:117;21681:4;21676:3;21672:14;21658:12;21570:117;;;21493:200;21777:4;21770:5;21766:16;21760:23;21789:63;21846:4;21841:3;21837:14;21823:12;21789:63;;;21703:155;21944:4;21937:5;21933:16;21927:23;21956:63;22013:4;22008:3;22004:14;21990:12;21956:63;;;21868:157;22106:4;22099:5;22095:16;22089:23;22118:65;22175:6;22170:3;22166:16;22152:12;22118:65;;;22035:154;22272:4;22265:5;22261:16;22255:23;22284:65;22341:6;22336:3;22332:16;22318:12;22284:65;;;22199:156;22428:4;22421:5;22417:16;22411:23;22482:3;22476:4;22472:14;22463:6;22458:3;22454:16;22447:40;22502:67;22564:4;22550:12;22502:67;;;22494:75;21112:1495;-1:-1;;;;;21112:1495;22677:817;22880:23;;22814:4;22805:14;;;22909:57;22809:3;22880:23;22909:57;;;22834:138;23053:4;23046:5;23042:16;23036:23;23065:83;23142:4;23137:3;23133:14;23119:12;23065:83;;;22982:172;23226:4;23219:5;23215:16;23209:23;23238:80;23312:4;23307:3;23303:14;23289:12;23238:80;;;23164:160;23398:4;23391:5;23387:16;23381:23;23410:63;23467:4;23462:3;23458:14;23444:12;23410:63;;23550:459;23740:23;;23673:4;23664:14;;;23769:63;23668:3;23740:23;23769:63;;;23693:145;23913:4;23906:5;23902:16;23896:23;23925:63;23982:4;23977:3;23973:14;23959:12;24541:103;24614:24;24632:5;24614:24;;24771:107;24850:22;24866:5;24850:22;;24885:262;;25029:93;25118:3;25109:6;25029:93;;25154:213;25272:2;25257:18;;25286:71;25261:9;25330:6;25286:71;;25374:229;25500:2;25485:18;;25514:79;25489:9;25566:6;25514:79;;25862:340;26016:2;26001:18;;26030:79;26005:9;26082:6;26030:79;;;26120:72;26188:2;26177:9;26173:18;26164:6;26120:72;;26209:324;26355:2;26340:18;;26369:71;26344:9;26413:6;26369:71;;;26451:72;26519:2;26508:9;26504:18;26495:6;26451:72;;26540:435;26714:2;26699:18;;26728:71;26703:9;26772:6;26728:71;;;26810:72;26878:2;26867:9;26863:18;26854:6;26810:72;;;26893;26961:2;26950:9;26946:18;26937:6;26893:72;;26982:324;27128:2;27113:18;;27142:71;27117:9;27186:6;27142:71;;27313:449;27494:2;27479:18;;27508:71;27483:9;27552:6;27508:71;;;27590:72;27658:2;27647:9;27643:18;27634:6;27590:72;;;27673:79;27748:2;27737:9;27733:18;27724:6;27673:79;;27769:788;28099:2;28113:47;;;28084:18;;28174:144;28084:18;28304:6;28174:144;;;28166:152;;28366:9;28360:4;28356:20;28351:2;28340:9;28336:18;28329:48;28391:156;28542:4;28533:6;28391:156;;28564:201;28676:2;28661:18;;28690:65;28665:9;28728:6;28690:65;;28772:241;28904:2;28889:18;;28918:85;28893:9;28976:6;28918:85;;29020:231;29147:2;29132:18;;29161:80;29136:9;29214:6;29161:80;;29258:301;29396:2;29410:47;;;29381:18;;29471:78;29381:18;29535:6;29471:78;;29566:407;29757:2;29771:47;;;29742:18;;29832:131;29742:18;29832:131;;29980:407;30171:2;30185:47;;;30156:18;;30246:131;30156:18;30246:131;;30394:407;30585:2;30599:47;;;30570:18;;30660:131;30570:18;30660:131;;30808:407;30999:2;31013:47;;;30984:18;;31074:131;30984:18;31074:131;;31222:407;31413:2;31427:47;;;31398:18;;31488:131;31398:18;31488:131;;31636:407;31827:2;31841:47;;;31812:18;;31902:131;31812:18;31902:131;;32050:407;32241:2;32255:47;;;32226:18;;32316:131;32226:18;32316:131;;32464:407;32655:2;32669:47;;;32640:18;;32730:131;32640:18;32730:131;;32878:407;33069:2;33083:47;;;33054:18;;33144:131;33054:18;33144:131;;33292:407;33483:2;33497:47;;;33468:18;;33558:131;33468:18;33558:131;;33706:407;33897:2;33911:47;;;33882:18;;33972:131;33882:18;33972:131;;34120:407;34311:2;34325:47;;;34296:18;;34386:131;34296:18;34386:131;;34534:407;34725:2;34739:47;;;34710:18;;34800:131;34710:18;34800:131;;34948:407;35139:2;35153:47;;;35124:18;;35214:131;35124:18;35214:131;;35362:407;35553:2;35567:47;;;35538:18;;35628:131;35538:18;35628:131;;35776:407;35967:2;35981:47;;;35952:18;;36042:131;35952:18;36042:131;;36190:407;36381:2;36395:47;;;36366:18;;36456:131;36366:18;36456:131;;36604:407;36795:2;36809:47;;;36780:18;;36870:131;36780:18;36870:131;;37018:407;37209:2;37223:47;;;37194:18;;37284:131;37194:18;37284:131;;37432:407;37623:2;37637:47;;;37608:18;;37698:131;37608:18;37698:131;;37846:407;38037:2;38051:47;;;38022:18;;38112:131;38022:18;38112:131;;38260:407;38451:2;38465:47;;;38436:18;;38526:131;38436:18;38526:131;;38674:404;38860:2;38845:18;;38874:111;38849:9;38958:6;38874:111;;;38996:72;39064:2;39053:9;39049:18;39040:6;38996:72;;39085:213;39203:2;39188:18;;39217:71;39192:9;39261:6;39217:71;;39305:711;39565:3;39550:19;;39580:71;39554:9;39624:6;39580:71;;;39699:9;39693:4;39689:20;39684:2;39673:9;39669:18;39662:48;39724:108;39827:4;39818:6;39724:108;;;39716:116;;39843:80;39919:2;39908:9;39904:18;39895:6;39843:80;;;39934:72;40002:2;39991:9;39987:18;39978:6;39934:72;;40023:823;40311:3;40296:19;;40326:71;40300:9;40370:6;40326:71;;;40408:72;40476:2;40465:9;40461:18;40452:6;40408:72;;;40528:9;40522:4;40518:20;40513:2;40502:9;40498:18;40491:48;40553:108;40656:4;40647:6;40553:108;;;40545:116;;40672:80;40748:2;40737:9;40733:18;40724:6;40672:80;;;40763:73;40831:3;40820:9;40816:19;40807:6;40763:73;;;40282:564;;;;;;;;;40853:205;40967:2;40952:18;;40981:67;40956:9;41021:6;40981:67;;41065:256;41127:2;41121:9;41153:17;;;41228:18;41213:34;;41249:22;;;41210:62;41207:2;;;41285:1;41282;41275:12;41207:2;41301;41294:22;41105:216;;-1:-1;41105:216;41328:304;;41487:18;41479:6;41476:30;41473:2;;;41519:1;41516;41509:12;41473:2;-1:-1;41554:4;41542:17;;;41607:15;;41410:222;41639:322;;41783:18;41775:6;41772:30;41769:2;;;41815:1;41812;41805:12;41769:2;-1:-1;41946:4;41882;41859:17;;;;-1:-1;;41855:33;41936:15;;41706:255;41968:151;42092:4;42083:14;;42040:79;42484:137;42587:12;;42558:63;43727:178;43845:19;;;43894:4;43885:14;;43838:67;44815:91;;44877:24;44895:5;44877:24;;45019:85;45085:13;45078:21;;45061:43;45111:136;45188:5;45194:48;45188:5;45194:48;;45254:150;45338:5;45344:55;45338:5;45344:55;;45562:128;45635:5;45641:44;45635:5;45641:44;;45697:84;45769:6;45758:18;;45741:40;45788:121;-1:-1;;;;;45850:54;;45833:76;45995:81;46066:4;46055:16;;46038:38;46083:129;;46170:37;46201:5;46219:149;;46312:51;46357:5;46312:51;;46504:136;;46596:39;46629:5;46596:39;;46647:150;;46746:46;46786:5;46746:46;;46955:128;;47043:35;47072:5;47043:35;;47090:114;;47176:23;47193:5;47176:23;;47455:268;47520:1;47527:101;47541:6;47538:1;47535:13;47527:101;;;47608:11;;;47602:18;47589:11;;;47582:39;47563:2;47556:10;47527:101;;;47643:6;47640:1;47637:13;47634:2;;;-1:-1;;47708:1;47690:16;;47683:27;47504:219;47731:97;47819:2;47799:14;-1:-1;;47795:28;;47779:49;47836:106;47920:1;47913:5;47910:12;47900:2;;47926:9;47949:113;48040:1;48033:5;48030:12;48020:2;;48046:9;48186:102;48266:1;48259:5;48256:12;48246:2;;48272:9;48295:117;48364:24;48382:5;48364:24;;;48357:5;48354:35;48344:2;;48403:1;48400;48393:12;48559:111;48625:21;48640:5;48625:21;;48677:117;48746:24;48764:5;48746:24;

Swarm Source

bzzr://1e24a5151ed3c336a1131d727482973f156997db1969581c2730f06c9152a708
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.