ETH Price: $1,613.44 (-3.57%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove Liquidity128762682021-07-22 12:46:041363 days ago1626957964IN
0xA81f8460...92f9aD92D
0 ETH0.0053468969.01
Add Liquidity128762652021-07-22 12:45:121363 days ago1626957912IN
0xA81f8460...92f9aD92D
0 ETH0.0020159326
Set Active128760382021-07-22 11:56:511363 days ago1626955011IN
0xA81f8460...92f9aD92D
0 ETH0.0002956911
Remove Liquidity121176012021-03-26 23:18:111480 days ago1616800691IN
0xA81f8460...92f9aD92D
0 ETH0.0389476100
Remove Liquidity120352052021-03-14 7:02:331493 days ago1615705353IN
0xA81f8460...92f9aD92D
0 ETH0.0354415891
Remove Liquidity120340642021-03-14 2:41:221493 days ago1615689682IN
0xA81f8460...92f9aD92D
0 ETH0.04129389106
Remove Liquidity120292282021-03-13 8:53:551494 days ago1615625635IN
0xA81f8460...92f9aD92D
0 ETH0.04113806105.6
Remove Liquidity119168252021-02-24 1:16:281511 days ago1614129388IN
0xA81f8460...92f9aD92D
0 ETH0.04438977113.94000153
Remove Liquidity118341382021-02-11 8:21:061524 days ago1613031666IN
0xA81f8460...92f9aD92D
0 ETH0.04362131112
Update Price118152392021-02-08 10:22:261527 days ago1612779746IN
0xA81f8460...92f9aD92D
0 ETH0.02721895106.7
Remove Liquidity118145522021-02-08 7:55:471527 days ago1612770947IN
0xA81f8460...92f9aD92D
0 ETH0.03934768101
Remove Liquidity118144122021-02-08 7:23:011527 days ago1612768981IN
0xA81f8460...92f9aD92D
0 ETH0.04051476104.00000145
Set Sell Fee117374992021-01-27 11:15:451539 days ago1611746145IN
0xA81f8460...92f9aD92D
0 ETH0.0017255763
Set Buy Fee117374932021-01-27 11:14:121539 days ago1611746052IN
0xA81f8460...92f9aD92D
0 ETH0.0017256363
Remove Liquidity117200912021-01-24 18:58:551541 days ago1611514735IN
0xA81f8460...92f9aD92D
0 ETH0.0334928786
Remove Liquidity116766072021-01-18 2:46:091548 days ago1610937969IN
0xA81f8460...92f9aD92D
0 ETH0.0142155836.5
Remove Liquidity116760142021-01-18 0:32:161548 days ago1610929936IN
0xA81f8460...92f9aD92D
0 ETH0.0179210946
Remove Liquidity116473432021-01-13 15:06:301552 days ago1610550390IN
0xA81f8460...92f9aD92D
0 ETH0.021030454
Remove Liquidity116422692021-01-12 20:13:111553 days ago1610482391IN
0xA81f8460...92f9aD92D
0 ETH0.0227050558.3
Remove Liquidity116238822021-01-10 0:42:511556 days ago1610239371IN
0xA81f8460...92f9aD92D
0 ETH0.0214211855
Update Price116215452021-01-09 16:10:121556 days ago1610208612IN
0xA81f8460...92f9aD92D
0 ETH0.02303452144
Remove Liquidity115683072021-01-01 12:07:261565 days ago1609502846IN
0xA81f8460...92f9aD92D
0 ETH0.0167859357
Remove Liquidity115411402020-12-28 7:56:091569 days ago1609142169IN
0xA81f8460...92f9aD92D
0 ETH0.0248295383
Remove Liquidity115400012020-12-28 3:44:321569 days ago1609127072IN
0xA81f8460...92f9aD92D
0 ETH0.017328359
Remove Liquidity115383032020-12-27 21:33:051569 days ago1609104785IN
0xA81f8460...92f9aD92D
0 ETH0.0294073100
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-128762682021-07-22 12:46:041363 days ago1626957964
0xA81f8460...92f9aD92D
10.59008597 ETH
-125652622021-06-04 2:27:571411 days ago1622773677
0xA81f8460...92f9aD92D
0.9474272 ETH
-125652622021-06-04 2:27:571411 days ago1622773677
0xA81f8460...92f9aD92D
0.00285943 ETH
-124770602021-05-21 10:04:281425 days ago1621591468
0xA81f8460...92f9aD92D
0.11322638 ETH
-124770602021-05-21 10:04:281425 days ago1621591468
0xA81f8460...92f9aD92D
0.00034172 ETH
-121176012021-03-26 23:18:111480 days ago1616800691
0xA81f8460...92f9aD92D
1.8936165 ETH
-120352052021-03-14 7:02:331493 days ago1615705353
0xA81f8460...92f9aD92D
2.33586962 ETH
-120340642021-03-14 2:41:221493 days ago1615689682
0xA81f8460...92f9aD92D
0.47188263 ETH
-120292282021-03-13 8:53:551494 days ago1615625635
0xA81f8460...92f9aD92D
0.47206722 ETH
-120007992021-03-08 23:17:521498 days ago1615245472
0xA81f8460...92f9aD92D
3.9585053 ETH
-120007992021-03-08 23:17:521498 days ago1615245472
0xA81f8460...92f9aD92D
0.01194719 ETH
-119954532021-03-08 3:34:521499 days ago1615174492
0xA81f8460...92f9aD92D
0.012 ETH
-119954532021-03-08 3:34:521499 days ago1615174492
0xA81f8460...92f9aD92D
4 ETH
-119168252021-02-24 1:16:281511 days ago1614129388
0xA81f8460...92f9aD92D
0.66156346 ETH
-118623972021-02-15 16:23:291519 days ago1613406209
0xA81f8460...92f9aD92D
5.71038568 ETH
-118623972021-02-15 16:23:291519 days ago1613406209
0xA81f8460...92f9aD92D
0.01723456 ETH
-118341382021-02-11 8:21:061524 days ago1613031666
0xA81f8460...92f9aD92D
0.52245213 ETH
-118207702021-02-09 7:03:181526 days ago1612854198
0xA81f8460...92f9aD92D
0.99426494 ETH
-118207702021-02-09 7:03:181526 days ago1612854198
0xA81f8460...92f9aD92D
0.00300079 ETH
-118160182021-02-08 13:19:361527 days ago1612790376
0xA81f8460...92f9aD92D
0.003 ETH
-118160182021-02-08 13:19:361527 days ago1612790376
0xA81f8460...92f9aD92D
1 ETH
-118145522021-02-08 7:55:471527 days ago1612770947
0xA81f8460...92f9aD92D
0.47222873 ETH
-118144122021-02-08 7:23:011527 days ago1612768981
0xA81f8460...92f9aD92D
0.47240624 ETH
-117617302021-01-31 5:03:201535 days ago1612069400
0xA81f8460...92f9aD92D
0.27255512 ETH
-117617302021-01-31 5:03:201535 days ago1612069400
0xA81f8460...92f9aD92D
0.0008226 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
vault

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: 3XBTCUSDVault.sol
//////////////////////////////////////////////////
//SYNLEV VAULT CONTRACT V 1.0.0
//////////////////////////

pragma solidity >= 0.6.6;

import './ownable.sol';
import './SafeMath.sol';
import './IERC20.sol';
import './priceCalculatorInterface.sol';
import './vaultHelperInterface.sol';
import './priceAggregatorInterface.sol';

/*
 * @title SynLev vault contract.
 * @author Icarus
 */
contract vault is Owned {
  using SafeMath for uint256;

  constructor() public {
    priceAggregatorInterface(0x7196545d854D03D9c87B7588F6D9e1e42D876E95).registerVaultAggregator(0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c);
    priceAggregator = priceAggregatorInterface(0xb658E8680c1E1f148fb09cDbB3Bd0d58F9c14c00);
    priceCalculator = priceCalculatorInterface(0x80D129A01879422EB102c47Ed32DC6E8B123D05f);
    vaultHelper = vaultHelperInterface(0x70873daAa742bEA6D0EDf03f4f85c615983C01D7);
    synStakingProxy = 0x0070F3e1147c03a1Bb0caF80035B7c362D312119;
    buyFee = 10**7;
    sellFee = 10**7;
  }

  /////////////////////
  //EVENTS/////////////
  /////////////////////
  event PriceUpdate(
    uint256 bullPrice,
    uint256 bearPrice,
    uint256 bullLiqEquity,
    uint256 bearLiqEquity,
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 roundId,
    bool updated
  );
  event TokenBuy(
    address account,
    address token,
    uint256 tokensMinted,
    uint256 ethin,
    uint256 fees,
    uint256 bonus
  );
  event TokenSell(
    address account,
    address token,
    uint256 tokensBurned,
    uint256 ethout,
    uint256 fees,
    uint256 penalty
  );
  event LiquidityAdd(
    address account,
    uint256 eth,
    uint256 shares,
    uint256 shareprice
  );
  event LiquidityRemove(
    address account,
    uint256 eth,
    uint256 shares,
    uint256 shareprice
  );

  modifier isActive() {
    require(active == true);
    if(active == true && !priceAggregator.roundIdCheck(address(this))) {
      updatePrice();
    }
    _;
  }

  modifier updateIfActive() {
    if(active == true && !priceAggregator.roundIdCheck(address(this))) {
      updatePrice();
    }
    _;
  }

  /////////////////////
  //GLOBAL VARIBLES
  /////////////////////

  bool private active;
  uint256 constant private multiplier = 3;
  address private bull;
  address private bear;
  uint256 private latestRoundId;
  mapping(address => uint256) private price;
  mapping(address => uint256) private equity;
  uint256 private buyFee;
  uint256 private sellFee;
  uint256 private totalLiqShares;
  uint256 private liqFees;
  uint256 private balanceEquity;
  mapping(address => uint256) private liqTokens;
  mapping(address => uint256) private liqEquity;
  mapping(address => uint256) private userShares;

  priceAggregatorInterface  public priceAggregator;
  priceCalculatorInterface public priceCalculator;
  vaultHelperInterface public vaultHelper;
  address payable public synStakingProxy;

  //Fallback function
  receive() external payable {}

  ////////////////////////////////////
  //LOW LEVEL BUY AND SELL FUNCTIONS//
  //        NO SAFETY CHECK         //
  //SHOULD ONLY BE CALLED BY OTHER  //
  //          CONTRACTS             //
  ////////////////////////////////////

  /*
   * @notice Buys bull or bear token and updates price before token buy.
   * @param token bull or bear token address
   * @param account Recipient of newly minted tokens
   * @dev Should only be called by a router contract. Checks the excess ETH in
   * contract by calling getDepositEquity(). Can't 0 ETH buy. Calculates
   * resulting tokens and fees. Sends fees and mints tokens.
   *
   */
  function tokenBuy(address token, address account)
  public
  virtual
  isActive()
  {
    uint256 ethin = getDepositEquity();
    require(ethin > 0);
    require(token == bull || token == bear);
    IERC20 itkn = IERC20(token);
    uint256 fees = ethin.mul(buyFee).div(10**9);
    uint256 buyeth = ethin.sub(fees);
    uint256 bonus = vaultHelper.getBonus(address(this), token, buyeth);
    uint256 tokensToMint = buyeth.add(bonus).mul(10**18).div(price[token]);
    equity[token] = equity[token].add(buyeth).add(bonus);
    if(bonus != 0) balanceEquity = balanceEquity.sub(bonus);
    payFees(fees);
    itkn.mint(account, tokensToMint);

    emit TokenBuy(account, token, tokensToMint, ethin, fees, bonus);
  }

  /*
   * @notice Sells bull or bear token and updates price before token sell.
   * @param token bull or bear token address
   * @param account Recipient of resulting eth from burned tokens
   * @dev Should only be called by a router contract that simultaneously sends
   * tokens using transferFrom() and calls this function. Looks at the current
   * balance of the contract of the selected token. Can't 0 token sell.
   * Calculates resulting ETH from burned tokens. Pays fees, burns tokens, and
   * sends ETH.
   */
  function tokenSell(address token, address payable account)
  public
  virtual
  isActive()
  {
    IERC20 itkn = IERC20(token);
    uint256 tokensToBurn = itkn.balanceOf(address(this));
    require(tokensToBurn > 0);
    require(token == bull || token == bear);
    uint256 selleth = tokensToBurn.mul(price[token]).div(10**18);
    uint256 penalty = vaultHelper.getPenalty(address(this), token, selleth);
    uint256 fees = sellFee.mul(selleth.sub(penalty)).div(10**9);
    uint256 ethout = selleth.sub(penalty).sub(fees);
    equity[token] = equity[token].sub(selleth);
    if(penalty != 0) balanceEquity = balanceEquity.add(penalty);
    payFees(fees);
    itkn.burn(tokensToBurn);
    account.transfer(ethout);

    emit TokenSell(account, token, tokensToBurn, ethout, fees, penalty);
  }

  /*
   * @notice Adds liquidty to the contract and gives LP shares. Minimum LP add
   * is 1 wei. Virtually mints bear/bull tokens to be held in the vault.
   * @param account Recipient of LP shares
   * @dev Can be called by router but there is benefit to doing so. All
   * calculations are done with respect to equity and supply. Doing by price
   * creates rounding error. Calls updatePrice() then calls getLiqAddTokens()
   * to determine how many bull/bear to create.
   */
  function addLiquidity(address account)
  public
  payable
  virtual
  updateIfActive()
  {
    uint256 ethin = getDepositEquity();
    (
      uint256 bullEquity,
      uint256 bearEquity,
      uint256 bullTokens,
      uint256 bearTokens
    ) = vaultHelper.getLiqAddTokens(address(this), ethin);
    uint256 sharePrice = vaultHelper.getSharePrice(address(this));
    uint256 resultingShares = ethin.mul(10**18).div(sharePrice);
    liqEquity[bull] = liqEquity[bull].add(bullEquity);
    liqEquity[bear] = liqEquity[bear].add(bearEquity);
    liqTokens[bull] = liqTokens[bull].add(bullTokens);
    liqTokens[bear] = liqTokens[bear].add(bearTokens);
    userShares[account] = userShares[account].add(resultingShares);
    totalLiqShares = totalLiqShares.add(resultingShares);

    emit LiquidityAdd(account, ethin, resultingShares, sharePrice);
  }

  /*
   * @notice Removes liquidty to the contract and gives LP shares. Virtually
   * burns bear/bull tokens to be held in the vault. Cannot be called if user
   * has 0 shares
   * @param _shares How many shares to burn
   * @dev Cannot be called by a router as LP shares are not currently tokenized.
   * Calls updatePrice() then calls getLiqRemoveTokens() to determine how many
   * bull/bear tokens to remove.
   */
  function removeLiquidity(uint256 shares)
  public
  virtual
  updateIfActive()
  {
    require(shares <= userShares[msg.sender]);
    (
      uint256 bullEquity,
      uint256 bearEquity,
      uint256 bullTokens,
      uint256 bearTokens,
      uint256 feesPaid
    ) = vaultHelper.getLiqRemoveTokens(address(this), shares);
    uint256 sharePrice = vaultHelper.getSharePrice(address(this));
    uint256 resultingEth = bullEquity.add(bearEquity).add(feesPaid);
    liqEquity[bull] = liqEquity[bull].sub(bullEquity);
    liqEquity[bear] = liqEquity[bear].sub(bearEquity);
    liqTokens[bull] = liqTokens[bull].sub(bullTokens);
    liqTokens[bear] = liqTokens[bear].sub(bearTokens);
    userShares[msg.sender] = userShares[msg.sender].sub(shares);
    totalLiqShares = totalLiqShares.sub(shares);
    liqFees = liqFees.sub(feesPaid);
    msg.sender.transfer(resultingEth);

    emit LiquidityRemove(msg.sender, resultingEth, shares, sharePrice);
  }

  /*
   * @notice Updates price from chainlink oracles.
   * @param _shares How many shares to burn
   * @dev Calls getUpdatedPrice() function and sets new price, equity, liquidity
   * equity, and latestRoundId; only if there is new price data
   * @return bool if price was updated
   */
  function updatePrice()
  public
  {
    require(active == true);
    (
      uint256[6] memory priceArray,
      uint256 roundId,
      bool updated
    ) = priceCalculator.getUpdatedPrice(address(this), latestRoundId);
    if(updated == true) {
      (
        price[bull],
        price[bear],
        liqEquity[bull],
        liqEquity[bear],
        equity[bull],
        equity[bear],
        latestRoundId
      ) =
      (
        priceArray[0],
        priceArray[1],
        priceArray[2],
        priceArray[3],
        priceArray[4],
        priceArray[5],
        roundId
      );
    }
    emit PriceUpdate(
      price[bull],
      price[bear],
      liqEquity[bull],
      liqEquity[bear],
      equity[bull],
      equity[bear],
      latestRoundId,
      updated
    );
  }

  ///////////////////////
  //INTERNAL FUNCTIONS///
  ///////////////////////

  /*
   * @notice Pays half fees to SYN stakers and half to LP
   * @param _amount Fees to be paid in ETH
   * @dev Only called by tokenBuy() and tokenSell()
   */
  function payFees(uint256 amount) internal {
    synStakingProxy.transfer(amount.div(2));
    liqFees += amount.sub(amount.div(2));
  }

  ///////////////////
  ///VIEW FUNCTIONS//
  ///////////////////
  function getActive() public view returns(bool) {return(active);}
  function getMultiplier() public pure returns(uint256) {return(multiplier);}
  function getBullToken() public view returns(address) {return(bull);}
  function getBearToken() public view returns(address) {return(bear);}
  function getLatestRoundId() public view returns(uint256) {return(latestRoundId);}
  function getPrice(address token) public view returns(uint256) {return(price[token]);}
  function getEquity(address token) public view returns(uint256) {return(equity[token]);}
  function getBuyFee() public view returns(uint256) {return(buyFee);}
  function getSellFee() public view returns(uint256) {return(sellFee);}
  function getTotalLiqShares() public view returns(uint256) {return(totalLiqShares);}
  function getLiqFees() public view returns(uint256) {return(liqFees);}
  function getBalanceEquity() public view returns(uint256) {return(balanceEquity);}
  function getLiqTokens(address token) public view returns(uint256) {return(liqTokens[token]);}
  function getLiqEquity(address token) public view returns(uint256) {return(liqEquity[token]);}
  function getUserShares(address account) public view returns(uint256) {return(userShares[account]);}

  function getTotalEquity() public view returns(uint256) {
    return(getTokenEquity(bear).add(getTokenEquity(bull)));
  }

  function getTokenEquity(address token) public view returns(uint256) {
    return(equity[token].add(liqEquity[token]));
  }
  function getTokenLiqEquity(address token) public view returns(uint256) {
    return(liqTokens[token].mul(price[token]).div(10**18));
  }
  function getDepositEquity() public view returns(uint256) {
    return(address(this).balance.sub(liqFees.add(balanceEquity).add(getTotalEquity())));
  }
  ///////////////////
  //ADMIN FUNCTIONS//
  ///////////////////

  //One time use function to set token addresses. this can never be changed once set.
  //Cannot be included in constructor as vault must be deployed before tokens.
  function setTokens(address bearAddress, address bullAddress) public onlyOwner() {
    require(bear == address(0) || bull == address(0));
    (bull, bear) = (bullAddress, bearAddress);
    //Set initial price to .01 eth
    (price[bull], price[bear]) = (10**16, 10**16);
  }
  function setActive(bool state, uint256 roundId) public onlyOwner() {
    if(roundId != 0) {
      advanceRoundId(roundId);
    }
    active = state;
  }
  function advanceRoundId(uint256 roundId) public onlyOwner() {
    require(active == false);
    require(roundId > latestRoundId);
    ( , uint256 lastRoundId) = priceAggregator.priceRequest(address(this), latestRoundId);
    latestRoundId = lastRoundId >= roundId ? roundId : lastRoundId;
  }
  //Fees in the form of 1 / 10^8
  function setBuyFee(uint256 amount) public onlyOwner() {
    require(amount <= 10**9);
    buyFee = amount;
  }
  //Sell fees limited to a maximum of 1%
  function setSellFee(uint256 amount) public onlyOwner() {
    require(amount <= 10**7);
    sellFee = amount;
  }

}

File 2 of 7: IERC20.sol
pragma solidity >= 0.6.4;

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);
  function mint(address account, uint256 amount) external;
  function burn(uint256 amount) external;
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 7: ownable.sol
pragma solidity ^0.6.0;

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

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

contract Owned is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 4 of 7: priceAggregatorInterface.sol
pragma solidity >= 0.6.6;

interface priceAggregatorInterface {
  function registerVaultAggregator(address oracle) external;
  function priceRequest(
    address vault,
    uint256 lastUpdated
  )
  external
  view
  returns(int256[] memory, uint256);
  function roundIdCheck(address vault) external view returns(bool);
}

File 5 of 7: priceCalculatorInterface.sol
pragma solidity >= 0.6.6;

interface priceCalculatorInterface {
  function getUpdatedPrice(
    address vault,
    uint256 latestRoundId
  )
    external
    view
    returns(
      uint256[6] memory latestPrice,
      uint256 rRoundId,
      bool updated
  );
  function getKFactor(
    uint256 targetEquity,
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 totalEquity
  )
  external
  view
  returns(uint256 kFactor);
}

File 6 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

File 7 of 7: vaultHelperInterface.sol
pragma solidity >= 0.6.6;

interface vaultHelperInterface {
  function getBonus(address vault, address token, uint256 eth)
  external
  view
  returns(uint256 bonus);

  function getPenalty(address vault, address token, uint256 eth)
  external
  view
  returns(uint256 penalty);

  function getSharePrice(address vault)
  external
  view
  returns(uint256 sharePrice);

  function getLiqAddTokens(address vault, uint256 eth)
  external
  view
  returns(
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 bullTokens,
    uint256 bearTokens
  );

  function getLiqRemoveTokens(address vault, uint256 eth)
  external
  view
  returns(
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 bullTokens,
    uint256 bearTokens,
    uint256 feesPaid
  );
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareprice","type":"uint256"}],"name":"LiquidityAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareprice","type":"uint256"}],"name":"LiquidityRemove","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":false,"internalType":"uint256","name":"bullPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bullLiqEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearLiqEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bullEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"updated","type":"bool"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"TokenBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"TokenSell","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"advanceRoundId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBearToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBullToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDepositEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestRoundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLiqEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiqFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLiqTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenLiqEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLiqShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceAggregator","outputs":[{"internalType":"contract priceAggregatorInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceCalculator","outputs":[{"internalType":"contract priceCalculatorInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bearAddress","type":"address"},{"internalType":"address","name":"bullAddress","type":"address"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"synStakingProxy","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"tokenBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"account","type":"address"}],"name":"tokenSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultHelper","outputs":[{"internalType":"contract vaultHelperInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5060006100246001600160e01b0361018016565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040805163446bc45360e01b815273f4030086522a5beea4988f8ca5b36dbc97bee88c60048201529051737196545d854d03d9c87b7588f6d9e1e42d876e959163446bc45391602480830192600092919082900301818387803b1580156100d457600080fd5b505af11580156100e8573d6000803e3d6000fd5b5050600e80546001600160a01b031990811673b658e8680c1e1f148fb09cdbb3bd0d58f9c14c0017909155600f805482167380d129a01879422eb102c47ed32dc6e8b123d05f1790556010805482167370873daaa742bea6d0edf03f4f85c615983c01d7179055601180549091167270f3e1147c03a1bb0caf80035b7c362d3121191790555050629896806006819055600755610184565b3390565b61232880620001946000396000f3fe6080604052600436106102125760003560e01c806382496e6f11610118578063b5a71d14116100a0578063cbc7854e1161006f578063cbc7854e14610641578063d344d4991461067c578063daa22f7a146106af578063e3412e3d146106e1578063f2fde38b1461070757610219565b8063b5a71d1414610593578063ba0cb22b146105c6578063c4056493146105f9578063cad29e9c1461062c57610219565b80638da5cb5b116100e75780638da5cb5b146104f75780638f818b901461050c5780639c8f9f2314610521578063a4d7a6cc1461054b578063ac86ea0c1461056057610219565b806382496e6f146104795780638b4cee08146104a35780638b95e335146104cd5780638c3b990b146104e257610219565b80633ba5d96d1161019b57806356aef98c1161016a57806356aef98c146104105780635db214da14610425578063673a7e281461043a5780636c4ea9291461044f578063715018a61461046457610219565b80633ba5d96d1461037857806340490a901461038d57806341976e09146103a257806347f958a7146103d557610219565b806321172e5d116101e257806321172e5d146102e9578063289af0d8146102fe5780633078fff51461031357806333163773146103285780633b252e151461033d57610219565b80629ebb101461021e5780630cc835a31461024757806316eb3814146102735780631ee60337146102b857610219565b3661021957005b600080fd5b34801561022a57600080fd5b5061023361073a565b604080519115158252519081900360200190f35b34801561025357600080fd5b506102716004803603602081101561026a57600080fd5b503561074a565b005b34801561027f57600080fd5b506102a66004803603602081101561029657600080fd5b50356001600160a01b03166107b8565b60408051918252519081900360200190f35b3480156102c457600080fd5b506102cd6107d3565b604080516001600160a01b039092168252519081900360200190f35b3480156102f557600080fd5b506102cd6107e2565b34801561030a57600080fd5b506102a66107f1565b34801561031f57600080fd5b506102cd6107f7565b34801561033457600080fd5b506102a6610806565b34801561034957600080fd5b506102716004803603604081101561036057600080fd5b506001600160a01b038135811691602001351661080c565b34801561038457600080fd5b506102cd610c06565b34801561039957600080fd5b506102a6610c15565b3480156103ae57600080fd5b506102a6600480360360208110156103c557600080fd5b50356001600160a01b0316610c1a565b3480156103e157600080fd5b50610271600480360360408110156103f857600080fd5b506001600160a01b0381358116916020013516610c35565b34801561041c57600080fd5b506102a6610fa6565b34801561043157600080fd5b506102cd610fdc565b34801561044657600080fd5b50610271610feb565b34801561045b57600080fd5b506102a66111f8565b34801561047057600080fd5b5061027161122a565b34801561048557600080fd5b506102716004803603602081101561049c57600080fd5b50356112cc565b3480156104af57600080fd5b50610271600480360360208110156104c657600080fd5b5035611485565b3480156104d957600080fd5b506102cd6114f2565b3480156104ee57600080fd5b506102a6611501565b34801561050357600080fd5b506102cd611507565b34801561051857600080fd5b506102a6611516565b34801561052d57600080fd5b506102716004803603602081101561054457600080fd5b503561151c565b34801561055757600080fd5b506102a66118ef565b34801561056c57600080fd5b506102a66004803603602081101561058357600080fd5b50356001600160a01b03166118f5565b34801561059f57600080fd5b506102a6600480360360208110156105b657600080fd5b50356001600160a01b031661192e565b3480156105d257600080fd5b506102a6600480360360208110156105e957600080fd5b50356001600160a01b031661196f565b34801561060557600080fd5b506102a66004803603602081101561061c57600080fd5b50356001600160a01b031661198a565b34801561063857600080fd5b506102a66119a5565b34801561064d57600080fd5b506102716004803603604081101561066457600080fd5b506001600160a01b03813581169160200135166119ab565b34801561068857600080fd5b506102a66004803603602081101561069f57600080fd5b50356001600160a01b0316611a8b565b3480156106bb57600080fd5b50610271600480360360408110156106d257600080fd5b50803515159060200135611aa6565b610271600480360360208110156106f757600080fd5b50356001600160a01b0316611b2c565b34801561071357600080fd5b506102716004803603602081101561072a57600080fd5b50356001600160a01b0316611ec1565b600054600160a01b900460ff1690565b610752611fb9565b6000546001600160a01b039081169116146107a2576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b633b9aca008111156107b357600080fd5b600655565b6001600160a01b03166000908152600b602052604090205490565b6010546001600160a01b031681565b6011546001600160a01b031681565b60075490565b600e546001600160a01b031681565b60085490565b600054600160a01b900460ff16151560011461082757600080fd5b600054600160a01b900460ff16151560011480156108b95750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561088b57600080fd5b505afa15801561089f573d6000803e3d6000fd5b505050506040513d60208110156108b557600080fd5b5051155b156108c6576108c6610feb565b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d602081101561093b57600080fd5b505190508061094957600080fd5b6001546001600160a01b038581169116148061097257506002546001600160a01b038581169116145b61097b57600080fd5b6001600160a01b0384166000908152600460205260408120546109bf90670de0b6b3a7640000906109b390859063ffffffff611fbd16565b9063ffffffff61201d16565b60105460408051637c83ffd160e01b81523060048201526001600160a01b0389811660248301526044820185905291519394506000939190921691637c83ffd1916064808301926020929190829003018186803b158015610a1f57600080fd5b505afa158015610a33573d6000803e3d6000fd5b505050506040513d6020811015610a4957600080fd5b505190506000610a79633b9aca006109b3610a6a868663ffffffff61205f16565b6007549063ffffffff611fbd16565b90506000610a9d82610a91868663ffffffff61205f16565b9063ffffffff61205f16565b6001600160a01b038916600090815260056020526040902054909150610ac9908563ffffffff61205f16565b6001600160a01b0389166000908152600560205260409020558215610aff57600a54610afb908463ffffffff6120a116565b600a555b610b08826120fb565b856001600160a01b03166342966c68866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b50506040516001600160a01b038a16925083156108fc02915083906000818181858888f19350505050158015610b9c573d6000803e3d6000fd5b50604080516001600160a01b03808a1682528a166020820152808201879052606081018390526080810184905260a0810185905290517fe540b6cc73989eeec2f777710efa155b6cc71a931d80862d5bf911c6109972c39181900360c00190a15050505050505050565b6001546001600160a01b031690565b600390565b6001600160a01b031660009081526004602052604090205490565b600054600160a01b900460ff161515600114610c5057600080fd5b600054600160a01b900460ff1615156001148015610ce25750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b5051155b15610cef57610cef610feb565b6000610cf96111f8565b905060008111610d0857600080fd5b6001546001600160a01b0384811691161480610d3157506002546001600160a01b038481169116145b610d3a57600080fd5b60008390506000610d5e633b9aca006109b360065486611fbd90919063ffffffff16565b90506000610d72848363ffffffff61205f16565b6010546040805163f8956a6760e01b81523060048201526001600160a01b038a81166024830152604482018590529151939450600093919092169163f8956a67916064808301926020929190829003018186803b158015610dd257600080fd5b505afa158015610de6573d6000803e3d6000fd5b505050506040513d6020811015610dfc57600080fd5b50516001600160a01b03881660009081526004602052604081205491925090610e47906109b3670de0b6b3a7640000610e3b878763ffffffff6120a116565b9063ffffffff611fbd16565b6001600160a01b038916600090815260056020526040902054909150610e85908390610e79908663ffffffff6120a116565b9063ffffffff6120a116565b6001600160a01b0389166000908152600560205260409020558115610ebb57600a54610eb7908363ffffffff61205f16565b600a555b610ec4846120fb565b846001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f2457600080fd5b505af1158015610f38573d6000803e3d6000fd5b5050604080516001600160a01b03808c1682528c166020820152808201859052606081018a90526080810188905260a0810186905290517f73cfafc06c41aefbe585fd047208a7776b2334d2329decfb3d1b1f6ec8c3c41693509081900360c0019150a15050505050505050565b600154600090610fd790610fc2906001600160a01b03166118f5565b600254610e79906001600160a01b03166118f5565b905090565b6002546001600160a01b031690565b600054600160a01b900460ff16151560011461100657600080fd5b61100e61226d565b600f546003546040805163416bd10760e11b815230600482015260248101929092525160009283926001600160a01b03909116916382d7a20e9160448082019261010092909190829003018186803b15801561106957600080fd5b505afa15801561107d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101008110156110a357600080fd5b5060c081015160e0820151919450925090506001811515141561113a5782516020808501516040808701516060880151608089015160a08a01516001546001600160a01b03908116600081815260048a52878120600254909316808252888220838352600c8c528983208284528a84209484526005909c528983209183529890912060038e90559390935592909155919055935555555b6001546001600160a01b0390811660008181526004602090815260408083205460025490951680845281842054858552600c8452828520548286528386205496865260058552838620549286529483902054600354845198895294880191909152868301949094526060860194909452608085019390935260a084019190915260c083015282151560e0830152517fe7d4328bcca588827789f132837dde7289420fb8512d5c0a706059194fe1dfd1918190036101000190a1505050565b6000610fd761121d611208610fa6565b600a54600954610e799163ffffffff6120a116565b479063ffffffff61205f16565b611232611fb9565b6000546001600160a01b03908116911614611282576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6112d4611fb9565b6000546001600160a01b03908116911614611324576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600054600160a01b900460ff161561133b57600080fd5b600354811161134957600080fd5b600e5460035460408051631760164960e31b81523060048201526024810192909252516000926001600160a01b03169163bb00b2489160448083019286929190829003018186803b15801561139d57600080fd5b505afa1580156113b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156113da57600080fd5b81019080805160405193929190846401000000008211156113fa57600080fd5b90830190602082018581111561140f57600080fd5b825186602082028301116401000000008211171561142c57600080fd5b82525081516020918201928201910280838360005b83811015611459578181015183820152602001611441565b5050505091909101604052506020015193505050508181101561147c578061147e565b815b6003555050565b61148d611fb9565b6000546001600160a01b039081169116146114dd576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b629896808111156114ed57600080fd5b600755565b600f546001600160a01b031681565b60035490565b6000546001600160a01b031690565b60065490565b600054600160a01b900460ff16151560011480156115ae5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561158057600080fd5b505afa158015611594573d6000803e3d6000fd5b505050506040513d60208110156115aa57600080fd5b5051155b156115bb576115bb610feb565b336000908152600d60205260409020548111156115d757600080fd5b60105460408051639486909f60e01b815230600482015260248101849052905160009283928392839283926001600160a01b0390911691639486909f9160448082019260a092909190829003018186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d60a081101561165e57600080fd5b5080516020808301516040808501516060860151608090960151601054835163b9c7840b60e01b81523060048201529351969c50939a509098509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d60208110156116fa57600080fd5b50519050600061171483610e79898963ffffffff6120a116565b6001546001600160a01b03166000908152600c6020526040902054909150611742908863ffffffff61205f16565b6001546001600160a01b039081166000908152600c6020526040808220939093556002549091168152205461177d908763ffffffff61205f16565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b90915220546117bf908663ffffffff61205f16565b6001546001600160a01b039081166000908152600b602052604080822093909355600254909116815220546117fa908563ffffffff61205f16565b6002546001600160a01b03166000908152600b6020908152604080832093909355338252600d90522054611834908963ffffffff61205f16565b336000908152600d6020526040902055600854611857908963ffffffff61205f16565b60085560095461186d908463ffffffff61205f16565b600955604051339082156108fc029083906000818181858888f1935050505015801561189d573d6000803e3d6000fd5b5060408051338152602081018390528082018a90526060810184905290517f11c75623de2058a663854f734fb8083a261970290f564abc9aa2ac01bfcbe81f9181900360800190a15050505050505050565b60095490565b6001600160a01b0381166000908152600c602090815260408083205460059092528220546119289163ffffffff6120a116565b92915050565b6001600160a01b038116600090815260046020908152604080832054600b90925282205461192891670de0b6b3a7640000916109b39163ffffffff611fbd16565b6001600160a01b03166000908152600d602052604090205490565b6001600160a01b03166000908152600c602052604090205490565b600a5490565b6119b3611fb9565b6000546001600160a01b03908116911614611a03576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6002546001600160a01b03161580611a2457506001546001600160a01b0316155b611a2d57600080fd5b600280546001600160a01b03199081166001600160a01b03948516179182905560018054909116928416929092179182905590821660009081526004602052604080822092909316815291909120662386f26fc10000908190559055565b6001600160a01b031660009081526005602052604090205490565b611aae611fb9565b6000546001600160a01b03908116911614611afe576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b8015611b0d57611b0d816112cc565b5060008054911515600160a01b0260ff60a01b19909216919091179055565b600054600160a01b900460ff1615156001148015611bbe5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015611b9057600080fd5b505afa158015611ba4573d6000803e3d6000fd5b505050506040513d6020811015611bba57600080fd5b5051155b15611bcb57611bcb610feb565b6000611bd56111f8565b60105460408051630bdc478960e01b81523060048201526024810184905290519293506000928392839283926001600160a01b0390921691630bdc478991604480820192608092909190829003018186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d6080811015611c5d57600080fd5b508051602080830151604080850151606090950151601054825163b9c7840b60e01b81523060048201529251959a509298509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b158015611cc757600080fd5b505afa158015611cdb573d6000803e3d6000fd5b505050506040513d6020811015611cf157600080fd5b505190506000611d13826109b389670de0b6b3a764000063ffffffff611fbd16565b6001546001600160a01b03166000908152600c6020526040902054909150611d41908763ffffffff6120a116565b6001546001600160a01b039081166000908152600c60205260408082209390935560025490911681522054611d7c908663ffffffff6120a116565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b9091522054611dbe908563ffffffff6120a116565b6001546001600160a01b039081166000908152600b60205260408082209390935560025490911681522054611df9908463ffffffff6120a116565b6002546001600160a01b039081166000908152600b6020908152604080832094909455918b168152600d9091522054611e38908263ffffffff6120a116565b6001600160a01b0389166000908152600d6020526040902055600854611e64908263ffffffff6120a116565b600855604080516001600160a01b038a168152602081018990528082018390526060810184905290517fe1d1934c742278e3794231612340f57d39d41877f0106ef92422f2f86ce07bf49181900360800190a15050505050505050565b611ec9611fb9565b6000546001600160a01b03908116911614611f19576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6001600160a01b038116611f5e5760405162461bcd60e51b815260040180806020018281038252602681526020018061228c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082611fcc57506000611928565b82820282848281611fd957fe5b04146120165760405162461bcd60e51b81526004018080602001828103825260218152602001806122b26021913960400191505060405180910390fd5b9392505050565b600061201683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612171565b600061201683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612213565b600082820183811015612016576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6011546001600160a01b03166108fc61211b83600263ffffffff61201d16565b6040518115909202916000818181858888f19350505050158015612143573d6000803e3d6000fd5b5061216561215882600263ffffffff61201d16565b829063ffffffff61205f16565b60098054909101905550565b600081836121fd5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121c25781810151838201526020016121aa565b50505050905090810190601f1680156121ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161220957fe5b0495945050505050565b600081848411156122655760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121c25781810151838201526020016121aa565b505050900390565b6040518060c00160405280600690602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220e1ee60b7cc84d00c32604daa19942be8cc3388749240d646c29485047320eda064736f6c63430006060033

Deployed Bytecode

0x6080604052600436106102125760003560e01c806382496e6f11610118578063b5a71d14116100a0578063cbc7854e1161006f578063cbc7854e14610641578063d344d4991461067c578063daa22f7a146106af578063e3412e3d146106e1578063f2fde38b1461070757610219565b8063b5a71d1414610593578063ba0cb22b146105c6578063c4056493146105f9578063cad29e9c1461062c57610219565b80638da5cb5b116100e75780638da5cb5b146104f75780638f818b901461050c5780639c8f9f2314610521578063a4d7a6cc1461054b578063ac86ea0c1461056057610219565b806382496e6f146104795780638b4cee08146104a35780638b95e335146104cd5780638c3b990b146104e257610219565b80633ba5d96d1161019b57806356aef98c1161016a57806356aef98c146104105780635db214da14610425578063673a7e281461043a5780636c4ea9291461044f578063715018a61461046457610219565b80633ba5d96d1461037857806340490a901461038d57806341976e09146103a257806347f958a7146103d557610219565b806321172e5d116101e257806321172e5d146102e9578063289af0d8146102fe5780633078fff51461031357806333163773146103285780633b252e151461033d57610219565b80629ebb101461021e5780630cc835a31461024757806316eb3814146102735780631ee60337146102b857610219565b3661021957005b600080fd5b34801561022a57600080fd5b5061023361073a565b604080519115158252519081900360200190f35b34801561025357600080fd5b506102716004803603602081101561026a57600080fd5b503561074a565b005b34801561027f57600080fd5b506102a66004803603602081101561029657600080fd5b50356001600160a01b03166107b8565b60408051918252519081900360200190f35b3480156102c457600080fd5b506102cd6107d3565b604080516001600160a01b039092168252519081900360200190f35b3480156102f557600080fd5b506102cd6107e2565b34801561030a57600080fd5b506102a66107f1565b34801561031f57600080fd5b506102cd6107f7565b34801561033457600080fd5b506102a6610806565b34801561034957600080fd5b506102716004803603604081101561036057600080fd5b506001600160a01b038135811691602001351661080c565b34801561038457600080fd5b506102cd610c06565b34801561039957600080fd5b506102a6610c15565b3480156103ae57600080fd5b506102a6600480360360208110156103c557600080fd5b50356001600160a01b0316610c1a565b3480156103e157600080fd5b50610271600480360360408110156103f857600080fd5b506001600160a01b0381358116916020013516610c35565b34801561041c57600080fd5b506102a6610fa6565b34801561043157600080fd5b506102cd610fdc565b34801561044657600080fd5b50610271610feb565b34801561045b57600080fd5b506102a66111f8565b34801561047057600080fd5b5061027161122a565b34801561048557600080fd5b506102716004803603602081101561049c57600080fd5b50356112cc565b3480156104af57600080fd5b50610271600480360360208110156104c657600080fd5b5035611485565b3480156104d957600080fd5b506102cd6114f2565b3480156104ee57600080fd5b506102a6611501565b34801561050357600080fd5b506102cd611507565b34801561051857600080fd5b506102a6611516565b34801561052d57600080fd5b506102716004803603602081101561054457600080fd5b503561151c565b34801561055757600080fd5b506102a66118ef565b34801561056c57600080fd5b506102a66004803603602081101561058357600080fd5b50356001600160a01b03166118f5565b34801561059f57600080fd5b506102a6600480360360208110156105b657600080fd5b50356001600160a01b031661192e565b3480156105d257600080fd5b506102a6600480360360208110156105e957600080fd5b50356001600160a01b031661196f565b34801561060557600080fd5b506102a66004803603602081101561061c57600080fd5b50356001600160a01b031661198a565b34801561063857600080fd5b506102a66119a5565b34801561064d57600080fd5b506102716004803603604081101561066457600080fd5b506001600160a01b03813581169160200135166119ab565b34801561068857600080fd5b506102a66004803603602081101561069f57600080fd5b50356001600160a01b0316611a8b565b3480156106bb57600080fd5b50610271600480360360408110156106d257600080fd5b50803515159060200135611aa6565b610271600480360360208110156106f757600080fd5b50356001600160a01b0316611b2c565b34801561071357600080fd5b506102716004803603602081101561072a57600080fd5b50356001600160a01b0316611ec1565b600054600160a01b900460ff1690565b610752611fb9565b6000546001600160a01b039081169116146107a2576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b633b9aca008111156107b357600080fd5b600655565b6001600160a01b03166000908152600b602052604090205490565b6010546001600160a01b031681565b6011546001600160a01b031681565b60075490565b600e546001600160a01b031681565b60085490565b600054600160a01b900460ff16151560011461082757600080fd5b600054600160a01b900460ff16151560011480156108b95750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561088b57600080fd5b505afa15801561089f573d6000803e3d6000fd5b505050506040513d60208110156108b557600080fd5b5051155b156108c6576108c6610feb565b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d602081101561093b57600080fd5b505190508061094957600080fd5b6001546001600160a01b038581169116148061097257506002546001600160a01b038581169116145b61097b57600080fd5b6001600160a01b0384166000908152600460205260408120546109bf90670de0b6b3a7640000906109b390859063ffffffff611fbd16565b9063ffffffff61201d16565b60105460408051637c83ffd160e01b81523060048201526001600160a01b0389811660248301526044820185905291519394506000939190921691637c83ffd1916064808301926020929190829003018186803b158015610a1f57600080fd5b505afa158015610a33573d6000803e3d6000fd5b505050506040513d6020811015610a4957600080fd5b505190506000610a79633b9aca006109b3610a6a868663ffffffff61205f16565b6007549063ffffffff611fbd16565b90506000610a9d82610a91868663ffffffff61205f16565b9063ffffffff61205f16565b6001600160a01b038916600090815260056020526040902054909150610ac9908563ffffffff61205f16565b6001600160a01b0389166000908152600560205260409020558215610aff57600a54610afb908463ffffffff6120a116565b600a555b610b08826120fb565b856001600160a01b03166342966c68866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b50506040516001600160a01b038a16925083156108fc02915083906000818181858888f19350505050158015610b9c573d6000803e3d6000fd5b50604080516001600160a01b03808a1682528a166020820152808201879052606081018390526080810184905260a0810185905290517fe540b6cc73989eeec2f777710efa155b6cc71a931d80862d5bf911c6109972c39181900360c00190a15050505050505050565b6001546001600160a01b031690565b600390565b6001600160a01b031660009081526004602052604090205490565b600054600160a01b900460ff161515600114610c5057600080fd5b600054600160a01b900460ff1615156001148015610ce25750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b5051155b15610cef57610cef610feb565b6000610cf96111f8565b905060008111610d0857600080fd5b6001546001600160a01b0384811691161480610d3157506002546001600160a01b038481169116145b610d3a57600080fd5b60008390506000610d5e633b9aca006109b360065486611fbd90919063ffffffff16565b90506000610d72848363ffffffff61205f16565b6010546040805163f8956a6760e01b81523060048201526001600160a01b038a81166024830152604482018590529151939450600093919092169163f8956a67916064808301926020929190829003018186803b158015610dd257600080fd5b505afa158015610de6573d6000803e3d6000fd5b505050506040513d6020811015610dfc57600080fd5b50516001600160a01b03881660009081526004602052604081205491925090610e47906109b3670de0b6b3a7640000610e3b878763ffffffff6120a116565b9063ffffffff611fbd16565b6001600160a01b038916600090815260056020526040902054909150610e85908390610e79908663ffffffff6120a116565b9063ffffffff6120a116565b6001600160a01b0389166000908152600560205260409020558115610ebb57600a54610eb7908363ffffffff61205f16565b600a555b610ec4846120fb565b846001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f2457600080fd5b505af1158015610f38573d6000803e3d6000fd5b5050604080516001600160a01b03808c1682528c166020820152808201859052606081018a90526080810188905260a0810186905290517f73cfafc06c41aefbe585fd047208a7776b2334d2329decfb3d1b1f6ec8c3c41693509081900360c0019150a15050505050505050565b600154600090610fd790610fc2906001600160a01b03166118f5565b600254610e79906001600160a01b03166118f5565b905090565b6002546001600160a01b031690565b600054600160a01b900460ff16151560011461100657600080fd5b61100e61226d565b600f546003546040805163416bd10760e11b815230600482015260248101929092525160009283926001600160a01b03909116916382d7a20e9160448082019261010092909190829003018186803b15801561106957600080fd5b505afa15801561107d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101008110156110a357600080fd5b5060c081015160e0820151919450925090506001811515141561113a5782516020808501516040808701516060880151608089015160a08a01516001546001600160a01b03908116600081815260048a52878120600254909316808252888220838352600c8c528983208284528a84209484526005909c528983209183529890912060038e90559390935592909155919055935555555b6001546001600160a01b0390811660008181526004602090815260408083205460025490951680845281842054858552600c8452828520548286528386205496865260058552838620549286529483902054600354845198895294880191909152868301949094526060860194909452608085019390935260a084019190915260c083015282151560e0830152517fe7d4328bcca588827789f132837dde7289420fb8512d5c0a706059194fe1dfd1918190036101000190a1505050565b6000610fd761121d611208610fa6565b600a54600954610e799163ffffffff6120a116565b479063ffffffff61205f16565b611232611fb9565b6000546001600160a01b03908116911614611282576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6112d4611fb9565b6000546001600160a01b03908116911614611324576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600054600160a01b900460ff161561133b57600080fd5b600354811161134957600080fd5b600e5460035460408051631760164960e31b81523060048201526024810192909252516000926001600160a01b03169163bb00b2489160448083019286929190829003018186803b15801561139d57600080fd5b505afa1580156113b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156113da57600080fd5b81019080805160405193929190846401000000008211156113fa57600080fd5b90830190602082018581111561140f57600080fd5b825186602082028301116401000000008211171561142c57600080fd5b82525081516020918201928201910280838360005b83811015611459578181015183820152602001611441565b5050505091909101604052506020015193505050508181101561147c578061147e565b815b6003555050565b61148d611fb9565b6000546001600160a01b039081169116146114dd576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b629896808111156114ed57600080fd5b600755565b600f546001600160a01b031681565b60035490565b6000546001600160a01b031690565b60065490565b600054600160a01b900460ff16151560011480156115ae5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561158057600080fd5b505afa158015611594573d6000803e3d6000fd5b505050506040513d60208110156115aa57600080fd5b5051155b156115bb576115bb610feb565b336000908152600d60205260409020548111156115d757600080fd5b60105460408051639486909f60e01b815230600482015260248101849052905160009283928392839283926001600160a01b0390911691639486909f9160448082019260a092909190829003018186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d60a081101561165e57600080fd5b5080516020808301516040808501516060860151608090960151601054835163b9c7840b60e01b81523060048201529351969c50939a509098509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d60208110156116fa57600080fd5b50519050600061171483610e79898963ffffffff6120a116565b6001546001600160a01b03166000908152600c6020526040902054909150611742908863ffffffff61205f16565b6001546001600160a01b039081166000908152600c6020526040808220939093556002549091168152205461177d908763ffffffff61205f16565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b90915220546117bf908663ffffffff61205f16565b6001546001600160a01b039081166000908152600b602052604080822093909355600254909116815220546117fa908563ffffffff61205f16565b6002546001600160a01b03166000908152600b6020908152604080832093909355338252600d90522054611834908963ffffffff61205f16565b336000908152600d6020526040902055600854611857908963ffffffff61205f16565b60085560095461186d908463ffffffff61205f16565b600955604051339082156108fc029083906000818181858888f1935050505015801561189d573d6000803e3d6000fd5b5060408051338152602081018390528082018a90526060810184905290517f11c75623de2058a663854f734fb8083a261970290f564abc9aa2ac01bfcbe81f9181900360800190a15050505050505050565b60095490565b6001600160a01b0381166000908152600c602090815260408083205460059092528220546119289163ffffffff6120a116565b92915050565b6001600160a01b038116600090815260046020908152604080832054600b90925282205461192891670de0b6b3a7640000916109b39163ffffffff611fbd16565b6001600160a01b03166000908152600d602052604090205490565b6001600160a01b03166000908152600c602052604090205490565b600a5490565b6119b3611fb9565b6000546001600160a01b03908116911614611a03576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6002546001600160a01b03161580611a2457506001546001600160a01b0316155b611a2d57600080fd5b600280546001600160a01b03199081166001600160a01b03948516179182905560018054909116928416929092179182905590821660009081526004602052604080822092909316815291909120662386f26fc10000908190559055565b6001600160a01b031660009081526005602052604090205490565b611aae611fb9565b6000546001600160a01b03908116911614611afe576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b8015611b0d57611b0d816112cc565b5060008054911515600160a01b0260ff60a01b19909216919091179055565b600054600160a01b900460ff1615156001148015611bbe5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015611b9057600080fd5b505afa158015611ba4573d6000803e3d6000fd5b505050506040513d6020811015611bba57600080fd5b5051155b15611bcb57611bcb610feb565b6000611bd56111f8565b60105460408051630bdc478960e01b81523060048201526024810184905290519293506000928392839283926001600160a01b0390921691630bdc478991604480820192608092909190829003018186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d6080811015611c5d57600080fd5b508051602080830151604080850151606090950151601054825163b9c7840b60e01b81523060048201529251959a509298509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b158015611cc757600080fd5b505afa158015611cdb573d6000803e3d6000fd5b505050506040513d6020811015611cf157600080fd5b505190506000611d13826109b389670de0b6b3a764000063ffffffff611fbd16565b6001546001600160a01b03166000908152600c6020526040902054909150611d41908763ffffffff6120a116565b6001546001600160a01b039081166000908152600c60205260408082209390935560025490911681522054611d7c908663ffffffff6120a116565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b9091522054611dbe908563ffffffff6120a116565b6001546001600160a01b039081166000908152600b60205260408082209390935560025490911681522054611df9908463ffffffff6120a116565b6002546001600160a01b039081166000908152600b6020908152604080832094909455918b168152600d9091522054611e38908263ffffffff6120a116565b6001600160a01b0389166000908152600d6020526040902055600854611e64908263ffffffff6120a116565b600855604080516001600160a01b038a168152602081018990528082018390526060810184905290517fe1d1934c742278e3794231612340f57d39d41877f0106ef92422f2f86ce07bf49181900360800190a15050505050505050565b611ec9611fb9565b6000546001600160a01b03908116911614611f19576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6001600160a01b038116611f5e5760405162461bcd60e51b815260040180806020018281038252602681526020018061228c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082611fcc57506000611928565b82820282848281611fd957fe5b04146120165760405162461bcd60e51b81526004018080602001828103825260218152602001806122b26021913960400191505060405180910390fd5b9392505050565b600061201683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612171565b600061201683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612213565b600082820183811015612016576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6011546001600160a01b03166108fc61211b83600263ffffffff61201d16565b6040518115909202916000818181858888f19350505050158015612143573d6000803e3d6000fd5b5061216561215882600263ffffffff61201d16565b829063ffffffff61205f16565b60098054909101905550565b600081836121fd5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121c25781810151838201526020016121aa565b50505050905090810190601f1680156121ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161220957fe5b0495945050505050565b600081848411156122655760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121c25781810151838201526020016121aa565b505050900390565b6040518060c00160405280600690602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220e1ee60b7cc84d00c32604daa19942be8cc3388749240d646c29485047320eda064736f6c63430006060033

Deployed Bytecode Sourcemap

388:12492:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;9850:64:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9850:64:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;12611:110;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12611:110:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12611:110:0;;:::i;:::-;;10783:93;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10783:93:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10783:93:0;-1:-1:-1;;;;;10783:93:0;;:::i;:::-;;;;;;;;;;;;;;;;2803:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2803:39:0;;;:::i;:::-;;;;-1:-1:-1;;;;;2803:39:0;;;;;;;;;;;;;;2846:38;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2846:38:0;;;:::i;10469:69::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10469:69:0;;;:::i;2700:48::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2700:48:0;;;:::i;10541:83::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10541:83:0;;;:::i;4817:791::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4817:791:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;4817:791:0;;;;;;;;;;:::i;9995:68::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9995:68:0;;;:::i;9917:75::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9917:75:0;;;:::i;10221:85::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10221:85:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10221:85:0;-1:-1:-1;;;;;10221:85:0;;:::i;3579:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3579:712:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;3579:712:0;;;;;;;;;;:::i;11078:120::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11078:120:0;;;:::i;10066:68::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10066:68:0;;;:::i;8609:790::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8609:790:0;;;:::i;11466:151::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11466:151:0;;;:::i;922:145:3:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;922:145:3;;;:::i;12283:292:0:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12283:292:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12283:292:0;;:::i;12765:112::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12765:112:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12765:112:0;;:::i;2752:47::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2752:47:0;;;:::i;10137:81::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10137:81:0;;;:::i;717:77:3:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;717:77:3;;;:::i;10399:67:0:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10399:67:0;;;:::i;7367:948::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7367:948:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7367:948:0;;:::i;10627:69::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10627:69:0;;;:::i;11202:122::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11202:122:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11202:122:0;-1:-1:-1;;;;;11202:122:0;;:::i;11327:136::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11327:136:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11327:136:0;-1:-1:-1;;;;;11327:136:0;;:::i;10975:99::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10975:99:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10975:99:0;-1:-1:-1;;;;;10975:99:0;;:::i;10879:93::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10879:93:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10879:93:0;-1:-1:-1;;;;;10879:93:0;;:::i;10699:81::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10699:81:0;;;:::i;11852:273::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11852:273:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;11852:273:0;;;;;;;;;;:::i;10309:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10309:87:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10309:87:0;-1:-1:-1;;;;;10309:87:0;;:::i;12128:152::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12128:152:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12128:152:0;;;;;;;;;:::i;6093:849::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6093:849:0;-1:-1:-1;;;;;6093:849:0;;:::i;1073:240:3:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1073:240:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1073:240:3;-1:-1:-1;;;;;1073:240:3;;:::i;9850:64:0:-;9891:4;9905:6;-1:-1:-1;;;9905:6:0;;;;;9850:64::o;12611:110::-;849:12:3;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:3;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:3;;;;;;;;;;;;;;;12689:5:0::1;12679:6;:15;;12671:24;;12:1:-1;9::::0;2:12:::1;12671:24:0;12701:6;:15:::0;12611:110::o;10783:93::-;-1:-1:-1;;;;;10857:16:0;10840:7;10857:16;;;:9;:16;;;;;;;10783:93::o;2803:39::-;;;-1:-1:-1;;;;;2803:39:0;;:::o;2846:38::-;;;-1:-1:-1;;;;;2846:38:0;;:::o;10469:69::-;10528:7;;10469:69;:::o;2700:48::-;;;-1:-1:-1;;;;;2700:48:0;;:::o;10541:83::-;10607:14;;10541:83;:::o;4817:791::-;1824:6;;-1:-1:-1;;;1824:6:0;;;;:14;;1834:4;1824:14;1816:23;;12:1:-1;9;2:12;1816:23:0;1848:6;;-1:-1:-1;;;1848:6:0;;;;:14;;1858:4;1848:14;:62;;;;-1:-1:-1;1867:15:0;;:43;;;-1:-1:-1;;;1867:43:0;;1904:4;1867:43;;;;;;-1:-1:-1;;;;;1867:15:0;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;1867:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1867:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1867:43:0;1866:44;1848:62;1845:95;;;1920:13;:11;:13::i;:::-;4972:29:::1;::::0;;-1:-1:-1;;;4972:29:0;;4995:4:::1;4972:29;::::0;::::1;::::0;;;4937:5;;4916:11:::1;::::0;-1:-1:-1;;;;;4972:14:0;::::1;::::0;::::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:14;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4972:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4972:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4972:29:0;;-1:-1:-1;5015:16:0;5007:25:::1;;12:1:-1;9::::0;2:12:::1;5007:25:0;5055:4;::::0;-1:-1:-1;;;;;5046:13:0;;::::1;5055:4:::0;::::1;5046:13;::::0;:30:::1;;-1:-1:-1::0;5072:4:0::1;::::0;-1:-1:-1;;;;;5063:13:0;;::::1;5072:4:::0;::::1;5063:13;5046:30;5038:39;;12:1:-1;9::::0;2:12:::1;5038:39:0;-1:-1:-1::0;;;;;5118:12:0;::::1;5083:15;5118:12:::0;;;:5:::1;:12;::::0;;;;;5101:42:::1;::::0;5136:6:::1;::::0;5101:30:::1;::::0;:12;;:30:::1;:16;:30;:::i;:::-;:34:::0;:42:::1;:34;:42;:::i;:::-;5167:11;::::0;:53:::1;::::0;;-1:-1:-1;;;5167:53:0;;5198:4:::1;5167:53;::::0;::::1;::::0;-1:-1:-1;;;;;5167:53:0;;::::1;::::0;;;;;;;;;;;;5083:60;;-1:-1:-1;5149:15:0::1;::::0;5167:11;;;::::1;::::0;:22:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;:11;:53;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;5167:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;5167:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;5167:53:0;;-1:-1:-1;5226:12:0::1;5241:44;5279:5;5241:33;5253:20;:7:::0;5167:53;5253:20:::1;:11;:20;:::i;:::-;5241:7;::::0;;:33:::1;:11;:33;:::i;:44::-;5226:59:::0;-1:-1:-1;5291:14:0::1;5308:30;5226:59:::0;5308:20:::1;:7:::0;5320;5308:20:::1;:11;:20;:::i;:::-;:24:::0;:30:::1;:24;:30;:::i;:::-;-1:-1:-1::0;;;;;5360:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;5291:47;;-1:-1:-1;5360:26:0::1;::::0;5378:7;5360:26:::1;:17;:26;:::i;:::-;-1:-1:-1::0;;;;;5344:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;:42;5395:12;;5392:59:::1;;5425:13;::::0;:26:::1;::::0;5443:7;5425:26:::1;:17;:26;:::i;:::-;5409:13;:42:::0;5392:59:::1;5457:13;5465:4;5457:7;:13::i;:::-;5476:4;-1:-1:-1::0;;;;;5476:9:0::1;;5486:12;5476:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;5476:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;5505:24:0::1;::::0;-1:-1:-1;;;;;5505:16:0;::::1;::::0;-1:-1:-1;5505:24:0;::::1;;;::::0;-1:-1:-1;5522:6:0;;5505:24:::1;::::0;;;5522:6;5505:16;:24;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;5541:62:0::1;::::0;;-1:-1:-1;;;;;5541:62:0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;1945:1;;;;;;4817:791:::0;;:::o;9995:68::-;10056:4;;-1:-1:-1;;;;;10056:4:0;9995:68;:::o;9917:75::-;2227:1;9917:75;:::o;10221:85::-;-1:-1:-1;;;;;10291:12:0;10274:7;10291:12;;;:5;:12;;;;;;;10221:85::o;3579:712::-;1824:6;;-1:-1:-1;;;1824:6:0;;;;:14;;1834:4;1824:14;1816:23;;12:1:-1;9;2:12;1816:23:0;1848:6;;-1:-1:-1;;;1848:6:0;;;;:14;;1858:4;1848:14;:62;;;;-1:-1:-1;1867:15:0;;:43;;;-1:-1:-1;;;1867:43:0;;1904:4;1867:43;;;;;;-1:-1:-1;;;;;1867:15:0;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;1867:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1867:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1867:43:0;1866:44;1848:62;1845:95;;;1920:13;:11;:13::i;:::-;3669::::1;3685:18;:16;:18::i;:::-;3669:34;;3725:1;3717:5;:9;3709:18;;12:1:-1;9::::0;2:12:::1;3709:18:0;3750:4;::::0;-1:-1:-1;;;;;3741:13:0;;::::1;3750:4:::0;::::1;3741:13;::::0;:30:::1;;-1:-1:-1::0;3767:4:0::1;::::0;-1:-1:-1;;;;;3758:13:0;;::::1;3767:4:::0;::::1;3758:13;3741:30;3733:39;;12:1:-1;9::::0;2:12:::1;3733:39:0;3778:11;3799:5;3778:27;;3811:12;3826:28;3848:5;3826:17;3836:6;;3826:5;:9;;:17;;;;:::i;:28::-;3811:43:::0;-1:-1:-1;3860:14:0::1;3877:15;:5:::0;3811:43;3877:15:::1;:9;:15;:::i;:::-;3914:11;::::0;:50:::1;::::0;;-1:-1:-1;;;3914:50:0;;3943:4:::1;3914:50;::::0;::::1;::::0;-1:-1:-1;;;;;3914:50:0;;::::1;::::0;;;;;;;;;;;;3860:32;;-1:-1:-1;3898:13:0::1;::::0;3914:11;;;::::1;::::0;:20:::1;::::0;:50;;;;;::::1;::::0;;;;;;;;:11;:50;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;3914:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3914:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3914:50:0;-1:-1:-1;;;;;4027:12:0;::::1;3970:20;4027:12:::0;;;:5:::1;3914:50;4027:12:::0;;;;;3914:50;;-1:-1:-1;3970:20:0;3993:47:::1;::::0;:29:::1;4015:6;3993:17;:6:::0;3914:50;3993:17:::1;:10;:17;:::i;:::-;:21:::0;:29:::1;:21;:29;:::i;:47::-;-1:-1:-1::0;;;;;4062:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;3970:70;;-1:-1:-1;4062:36:0::1;::::0;4092:5;;4062:25:::1;::::0;4080:6;4062:25:::1;:17;:25;:::i;:::-;:29:::0;:36:::1;:29;:36;:::i;:::-;-1:-1:-1::0;;;;;4046:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;:52;4107:10;;4104:55:::1;;4135:13;::::0;:24:::1;::::0;4153:5;4135:24:::1;:17;:24;:::i;:::-;4119:13;:40:::0;4104:55:::1;4165:13;4173:4;4165:7;:13::i;:::-;4184:4;-1:-1:-1::0;;;;;4184:9:0::1;;4194:7;4203:12;4184:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;4184:32:0::1;-1:-1:-1::0;;;;;4184:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4184:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;4228:58:0::1;::::0;;-1:-1:-1;;;;;4228:58:0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;-1:-1:-1;4228:58:0;;;;;;;-1:-1:-1;4228:58:0::1;1945:1;;;;;;3579:712:::0;;:::o;11078:120::-;11186:4;;11124:7;;11146:46;;11171:20;;-1:-1:-1;;;;;11186:4:0;11171:14;:20::i;:::-;11161:4;;11146:20;;-1:-1:-1;;;;;11161:4:0;11146:14;:20::i;:46::-;11139:54;;11078:120;:::o;10066:68::-;10127:4;;-1:-1:-1;;;;;10127:4:0;10066:68;:::o;8609:790::-;8657:6;;-1:-1:-1;;;8657:6:0;;;;:14;;8667:4;8657:14;8649:23;;12:1:-1;9;2:12;8649:23:0;8686:28;;:::i;:::-;8766:15;;8813:13;;8766:61;;;-1:-1:-1;;;8766:61:0;;8806:4;8766:61;;;;;;;;;;;;8722:15;;;;-1:-1:-1;;;;;8766:15:0;;;;:31;;:61;;;;;:15;;:61;;;;;;;;:15;:61;;;2:2:-1;;;;27:1;24;17:12;2:2;8766:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8766:61: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;15:3;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;8766:61:0;;;;;;;;;;-1:-1:-1;8766:61:0;-1:-1:-1;8766:61:0;-1:-1:-1;8847:4:0;8836:15;;;;8833:374;;;9047:13;;;9070;;;;9093;;;;;9116;;;;9139;;;;9162;;;;9081:1;8877:4;-1:-1:-1;;;;;8877:4:0;;;9058:1;8871:11;;;9150:1;8871:11;;;;;9104:1;8898:4;;;;8892:11;;;;;;8913:15;;;:9;:15;;;;;8938;;;;;;8963:12;;;9173:1;8963:12;;;;;;8985;;;;;;;9127:1;8861:339;;;;;;;;;;;;;;;;;;8833:374;9242:4;;-1:-1:-1;;;;;9242:4:0;;;9236:11;;;;:5;:11;;;;;;;;;9261:4;;;;;9255:11;;;;;;;9274:15;;;:9;:15;;;;;;9297;;;;;;;9320:12;;;:6;:12;;;;;;9340;;;;;;;;9360:13;;9217:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9242:4;9217:177;;;8609:790;;;:::o;11466:151::-;11514:7;11536:75;11562:48;11593:16;:14;:16::i;:::-;11574:13;;11562:7;;:26;;;:11;:26;:::i;:48::-;11536:21;;:75;:25;:75;:::i;922:145:3:-;849:12;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:3;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:3;;;;;;;;;;;;;;;1028:1:::1;1012:6:::0;;991:40:::1;::::0;-1:-1:-1;;;;;1012:6:3;;::::1;::::0;991:40:::1;::::0;1028:1;;991:40:::1;1058:1;1041:19:::0;;-1:-1:-1;;;;;;1041:19:3::1;::::0;;922:145::o;12283:292:0:-;849:12:3;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:3;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:3;;;;;;;;;;;;;;;12357:6:0::1;::::0;-1:-1:-1;;;12357:6:0;::::1;;;:15;12349:24;;12:1:-1;9::::0;2:12:::1;12349:24:0;12397:13;;12387:7;:23;12379:32;;12:1:-1;9::::0;2:12:::1;12379:32:0;12444:15;::::0;12488:13:::1;::::0;12444:58:::1;::::0;;-1:-1:-1;;;12444:58:0;;12481:4:::1;12444:58;::::0;::::1;::::0;;;;;;;;;12421:19:::1;::::0;-1:-1:-1;;;;;12444:15:0::1;::::0;:28:::1;::::0;:58;;;;;12421:19;;12444:58;;;;;;;:15;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;12444:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12444:58:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;12444:58:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;;;7:11;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;12444:58:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;12444:58:0;;421:4:-1::1;412:14:::0;;::::1;::::0;12444:58:0;::::1;::::0;::::1;::::0;412:14:-1;12444:58:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;-1:-1:::0;;;;12444:58:0;;;::::1;;::::0;-1:-1:-1;12444:58:0::1;;::::0;;-1:-1:-1;;;;12524:22:0;;::::1;;:46;;12559:11;12524:46;;;12549:7;12524:46;12508:13;:62:::0;-1:-1:-1;;12283:292:0:o;12765:112::-;849:12:3;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:3;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:3;;;;;;;;;;;;;;;12844:5:0::1;12834:6;:15;;12826:24;;12:1:-1;9::::0;2:12:::1;12826:24:0;12856:7;:16:::0;12765:112::o;2752:47::-;;;-1:-1:-1;;;;;2752:47:0;;:::o;10137:81::-;10202:13;;10137:81;:::o;717:77:3:-;755:7;781:6;-1:-1:-1;;;;;781:6:3;717:77;:::o;10399:67:0:-;10457:6;;10399:67;:::o;7367:948::-;1990:6;;-1:-1:-1;;;1990:6:0;;;;:14;;2000:4;1990:14;:62;;;;-1:-1:-1;2009:15:0;;:43;;;-1:-1:-1;;;2009:43:0;;2046:4;2009:43;;;;;;-1:-1:-1;;;;;2009:15:0;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;2009:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2009:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2009:43:0;2008:44;1990:62;1987:95;;;2062:13;:11;:13::i;:::-;7483:10:::1;7472:22;::::0;;;:10:::1;:22;::::0;;;;;7462:32;::::1;;7454:41;;12:1:-1;9::::0;2:12:::1;7454:41:0;7638:11;::::0;:53:::1;::::0;;-1:-1:-1;;;7638:53:0;;7677:4:::1;7638:53;::::0;::::1;::::0;;;;;;;;;7509:18:::1;::::0;;;;;;;;;-1:-1:-1;;;;;7638:11:0;;::::1;::::0;:30:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;;:11;:53;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;7638:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7638:53:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;-1:-1:::0;7638:53:0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;7718:11:::1;::::0;:40;;-1:-1:-1;;;7718:40:0;;7752:4:::1;7718:40;::::0;::::1;::::0;;;7638:53;;-1:-1:-1;7638:53:0;;-1:-1:-1;7638:53:0;;-1:-1:-1;7638:53:0;;-1:-1:-1;7638:53:0;;-1:-1:-1;7697:18:0::1;::::0;-1:-1:-1;;;;;7718:11:0;;::::1;::::0;:25:::1;::::0;:40;;;;;7638:53;;7718:40;;;;;;:11;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;7718:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7718:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;7718:40:0;;-1:-1:-1;7764:20:0::1;7787:40;7818:8:::0;7787:26:::1;:10:::0;7802;7787:26:::1;:14;:26;:::i;:40::-;7861:4;::::0;-1:-1:-1;;;;;7861:4:0::1;7851:15;::::0;;;:9:::1;:15;::::0;;;;;7764:63;;-1:-1:-1;7851:31:0::1;::::0;7871:10;7851:31:::1;:19;:31;:::i;:::-;7843:4;::::0;-1:-1:-1;;;;;7843:4:0;;::::1;7833:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;7916:4:::1;::::0;;;::::1;7906:15:::0;;;;:31:::1;::::0;7926:10;7906:31:::1;:19;:31;:::i;:::-;7898:4;::::0;-1:-1:-1;;;;;7898:4:0;;::::1;7888:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;7898:4;7971;;;::::1;7961:15:::0;;:9:::1;:15:::0;;;;;:31:::1;::::0;7981:10;7961:31:::1;:19;:31;:::i;:::-;7953:4;::::0;-1:-1:-1;;;;;7953:4:0;;::::1;7943:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;8026:4:::1;::::0;;;::::1;8016:15:::0;;;;:31:::1;::::0;8036:10;8016:31:::1;:19;:31;:::i;:::-;8008:4;::::0;-1:-1:-1;;;;;8008:4:0::1;7998:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;8089:10:::1;8078:22:::0;;:10:::1;:22:::0;;;;:34:::1;::::0;8105:6;8078:34:::1;:26;:34;:::i;:::-;8064:10;8053:22;::::0;;;:10:::1;:22;::::0;;;;:59;8135:14:::1;::::0;:26:::1;::::0;8154:6;8135:26:::1;:18;:26;:::i;:::-;8118:14;:43:::0;8177:7:::1;::::0;:21:::1;::::0;8189:8;8177:21:::1;:11;:21;:::i;:::-;8167:7;:31:::0;8204:33:::1;::::0;:10:::1;::::0;:33;::::1;;;::::0;8224:12;;8204:33:::1;::::0;;;8224:12;8204:10;:33;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;8249:61:0::1;::::0;;8265:10:::1;8249:61:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;2087:1;;;;;;;7367:948:::0;:::o;10627:69::-;10686:7;;10627:69;:::o;11202:122::-;-1:-1:-1;;;;;11301:16:0;;11261:7;11301:16;;;:9;:16;;;;;;;;;11283:6;:13;;;;;;:35;;;:17;:35;:::i;:::-;11276:43;11202:122;-1:-1:-1;;11202:122:0:o;11327:136::-;-1:-1:-1;;;;;11432:12:0;;11389:7;11432:12;;;:5;:12;;;;;;;;;11411:9;:16;;;;;;:46;;11450:6;;11411:34;;;:20;:34;:::i;10975:99::-;-1:-1:-1;;;;;11052:19:0;11035:7;11052:19;;;:10;:19;;;;;;;10975:99::o;10879:93::-;-1:-1:-1;;;;;10953:16:0;10936:7;10953:16;;;:9;:16;;;;;;;10879:93::o;10699:81::-;10764:13;;10699:81;:::o;11852:273::-;849:12:3;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:3;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:3;;;;;;;;;;;;;;;11946:4:0::1;::::0;-1:-1:-1;;;;;11946:4:0::1;:18:::0;;:40:::1;;-1:-1:-1::0;11968:4:0::1;::::0;-1:-1:-1;;;;;11968:4:0::1;:18:::0;11946:40:::1;11938:49;;12:1:-1;9::::0;2:12:::1;11938:49:0;12000:4;11993:41:::0;;-1:-1:-1;;;;;;11993:41:0;;::::1;-1:-1:-1::0;;;;;11993:41:0;;::::1;;::::0;;;;-1:-1:-1;11993:41:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;12082:4;;::::1;-1:-1:-1::0;12076:11:0;;;:5:::1;:11;::::0;;;;;12095:4;;;::::1;12089:11:::0;;;;;;12105:6:::1;12075:45:::0;;;;;;11852:273::o;10309:87::-;-1:-1:-1;;;;;10380:13:0;10363:7;10380:13;;;:6;:13;;;;;;;10309:87::o;12128:152::-;849:12:3;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:3;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:3;;;;;;;;;;;;;;;12204:12:0;;12201:55:::1;;12226:23;12241:7;12226:14;:23::i;:::-;-1:-1:-1::0;12261:6:0::1;:14:::0;;;::::1;;-1:-1:-1::0;;;12261:14:0::1;-1:-1:-1::0;;;;12261:14:0;;::::1;::::0;;;::::1;::::0;;12128:152::o;6093:849::-;1990:6;;-1:-1:-1;;;1990:6:0;;;;:14;;2000:4;1990:14;:62;;;;-1:-1:-1;2009:15:0;;:43;;;-1:-1:-1;;;2009:43:0;;2046:4;2009:43;;;;;;-1:-1:-1;;;;;2009:15:0;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;2009:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2009:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2009:43:0;2008:44;1990:62;1987:95;;;2062:13;:11;:13::i;:::-;6188::::1;6204:18;:16;:18::i;:::-;6341:11;::::0;:49:::1;::::0;;-1:-1:-1;;;6341:49:0;;6377:4:::1;6341:49;::::0;::::1;::::0;;;;;;;;;6188:34;;-1:-1:-1;6236:18:0::1;::::0;;;;;;;-1:-1:-1;;;;;6341:11:0;;::::1;::::0;:27:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;;:11;:49;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;6341:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6341:49:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;-1:-1:::0;6341:49:0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;6417:11:::1;::::0;:40;;-1:-1:-1;;;6417:40:0;;6451:4:::1;6417:40;::::0;::::1;::::0;;;6341:49;;-1:-1:-1;6341:49:0;;-1:-1:-1;6341:49:0;;-1:-1:-1;6341:49:0;;-1:-1:-1;6396:18:0::1;::::0;-1:-1:-1;;;;;6417:11:0;;::::1;::::0;:25:::1;::::0;:40;;;;;6341:49;;6417:40;;;;;;:11;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;6417:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6417:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;6417:40:0;;-1:-1:-1;6463:23:0::1;6489:33;6417:40:::0;6489:17:::1;:5:::0;6499:6:::1;6489:17;:9;:17;:::i;:33::-;6556:4;::::0;-1:-1:-1;;;;;6556:4:0::1;6546:15;::::0;;;:9:::1;:15;::::0;;;;;6463:59;;-1:-1:-1;6546:31:0::1;::::0;6566:10;6546:31:::1;:19;:31;:::i;:::-;6538:4;::::0;-1:-1:-1;;;;;6538:4:0;;::::1;6528:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;6611:4:::1;::::0;;;::::1;6601:15:::0;;;;:31:::1;::::0;6621:10;6601:31:::1;:19;:31;:::i;:::-;6593:4;::::0;-1:-1:-1;;;;;6593:4:0;;::::1;6583:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;6593:4;6666;;;::::1;6656:15:::0;;:9:::1;:15:::0;;;;;:31:::1;::::0;6676:10;6656:31:::1;:19;:31;:::i;:::-;6648:4;::::0;-1:-1:-1;;;;;6648:4:0;;::::1;6638:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;6721:4:::1;::::0;;;::::1;6711:15:::0;;;;:31:::1;::::0;6731:10;6711:31:::1;:19;:31;:::i;:::-;6703:4;::::0;-1:-1:-1;;;;;6703:4:0;;::::1;6693:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;6770:19;;::::1;::::0;;:10:::1;:19:::0;;;;;:40:::1;::::0;6794:15;6770:40:::1;:23;:40;:::i;:::-;-1:-1:-1::0;;;;;6748:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;:62;6833:14:::1;::::0;:35:::1;::::0;6852:15;6833:35:::1;:18;:35;:::i;:::-;6816:14;:52:::0;6880:57:::1;::::0;;-1:-1:-1;;;;;6880:57:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;2087:1;;;;;;;6093:849:::0;:::o;1073:240:3:-;849:12;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:3;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:3;;;;;;;;;;;;;;;-1:-1:-1;;;;;1161:22:3;::::1;1153:73;;;;-1:-1:-1::0;;;1153:73:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1262:6;::::0;;1241:38:::1;::::0;-1:-1:-1;;;;;1241:38:3;;::::1;::::0;1262:6;::::1;::::0;1241:38:::1;::::0;::::1;1289:6;:17:::0;;-1:-1:-1;;;;;;1289:17:3::1;-1:-1:-1::0;;;;;1289:17:3;;;::::1;::::0;;;::::1;::::0;;1073:240::o;57:104::-;144:10;57:104;:::o;2180:459:2:-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:2;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2180:459;-1:-1:-1;;;2180:459:2:o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;9646:134:0;9694:15;;-1:-1:-1;;;;;9694:15:0;:39;9719:13;:6;9730:1;9719:13;:10;:13;:::i;:::-;9694:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;9750:25:0;9761:13;:6;9772:1;9761:13;:10;:13;:::i;:::-;9750:6;;:25;:10;:25;:::i;:::-;9739:7;:36;;;;;;;-1:-1:-1;9646:134:0:o;3713:272:2:-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3818:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:2:o;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1851:29:2;-1:-1:-1;;;1902:5:2;;;1746:187::o;388:12492:0:-;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;-1:-1;388:12492:0;;;-1:-1:-1;;388:12492:0:o

Swarm Source

ipfs://e1ee60b7cc84d00c32604daa19942be8cc3388749240d646c29485047320eda0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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