ETH Price: $3,411.79 (-0.79%)
Gas: 21 Gwei

Token

Cookie Farming Adventure (CHEF)
 

Overview

Max Total Supply

95,104,990 CHEF

Holders

108

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: CHEF 4
Balance
0.000000000002261253 CHEF

Value
$0.00
0x230e1e0ad3a7b6ecf00aaa981e7fd1fc0bf3d66d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-20
*/

// SPDX-License-Identifier: UNLICENSED

/*
Cookie Farming Adventure is a decentralized farm running on the Ethereum blockchain,
with lots of features that let you earn and win tokens.

What we are trying to do is to create a game that is reminiscent of the old incremental games,
by including P2E features to mix these two worlds!

Telegram: https://t.me/CookieFarmingAdventure
Twitter: https://twitter.com/CookieFarmAdv
Website: https://cookiefarmingadventure.com/
Whitepaper: https://docs.cookiefarmingadventure.com/cookie-farming-adventure/
*/

pragma solidity ^0.8.16;

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

interface IUniswapV2Factory {
  function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

interface IUniswapV2Router {
  function WETH() external view returns (address);

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

  function addLiquidityETH(
    address token,
    uint256 amountTokenDesired,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  )
    external
    payable
    returns (
      uint256 amountToken,
      uint256 amountETH,
      uint256 liquidity
    );

  function factory() external view returns (address);

  function getAmountIn(
    uint256 amountOut,
    uint256 reserveIn,
    uint256 reserveOut
  ) external pure returns (uint256 amountIn);

  function getAmountOut(
    uint256 amountIn,
    uint256 reserveIn,
    uint256 reserveOut
  ) external pure returns (uint256 amountOut);

  function getAmountsIn(uint256 amountOut, address[] memory path)
    external
    view
    returns (uint256[] memory amounts);

  function getAmountsOut(uint256 amountIn, address[] memory path)
    external
    view
    returns (uint256[] memory amounts);

  function quote(
    uint256 amountA,
    uint256 reserveA,
    uint256 reserveB
  ) external pure returns (uint256 amountB);

  function removeLiquidity(
    address tokenA,
    address tokenB,
    uint256 liquidity,
    uint256 amountAMin,
    uint256 amountBMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountA, uint256 amountB);

  function removeLiquidityETH(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountToken, uint256 amountETH);

  function removeLiquidityETHSupportingFeeOnTransferTokens(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountETH);

  function removeLiquidityETHWithPermit(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountToken, uint256 amountETH);

  function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountETH);

  function removeLiquidityWithPermit(
    address tokenA,
    address tokenB,
    uint256 liquidity,
    uint256 amountAMin,
    uint256 amountBMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountA, uint256 amountB);

  function swapETHForExactTokens(
    uint256 amountOut,
    address[] memory path,
    address to,
    uint256 deadline
  ) external payable returns (uint256[] memory amounts);

  function swapExactETHForTokens(
    uint256 amountOutMin,
    address[] memory path,
    address to,
    uint256 deadline
  ) external payable returns (uint256[] memory amounts);

  function swapExactETHForTokensSupportingFeeOnTransferTokens(
    uint256 amountOutMin,
    address[] memory path,
    address to,
    uint256 deadline
  ) external payable;

  function swapExactTokensForETH(
    uint256 amountIn,
    uint256 amountOutMin,
    address[] memory path,
    address to,
    uint256 deadline
  ) external returns (uint256[] memory amounts);

  function swapExactTokensForETHSupportingFeeOnTransferTokens(
    uint256 amountIn,
    uint256 amountOutMin,
    address[] memory path,
    address to,
    uint256 deadline
  ) external;

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

  function swapExactTokensForTokensSupportingFeeOnTransferTokens(
    uint256 amountIn,
    uint256 amountOutMin,
    address[] memory path,
    address to,
    uint256 deadline
  ) external;

  function swapTokensForExactETH(
    uint256 amountOut,
    uint256 amountInMax,
    address[] memory path,
    address to,
    uint256 deadline
  ) external returns (uint256[] memory amounts);

  function swapTokensForExactTokens(
    uint256 amountOut,
    uint256 amountInMax,
    address[] memory path,
    address to,
    uint256 deadline
  ) external returns (uint256[] memory amounts);
}

interface IBakery {
  function getTopCookieEater() external view returns (address);
}

contract Token is IERC20, Ownable, ReentrancyGuard {
  address public constant BURN_ADDRESS =
    0x000000000000000000000000000000000000dEaD;
  address public deployer;
  address public marketingAddress;

  string public constant name = "Cookie Farming Adventure";
  string public constant symbol = "CHEF";
  uint8 public constant decimals = 18;

  uint256 public totalSupply = 100_000_000 * 10**decimals;
  uint256 public maxTxAmount = (totalSupply * 11) / 1000;
  uint256 public maxWalletAmount = (totalSupply * 2) / 100;
  uint256 public swapThreshold = totalSupply / 1000;

  uint256 public taxFeeOnBuyPercent = 6;
  uint256 public taxFeeOnSellPercent = 6;

  uint256 public marketingFeeShare = 2;
  uint256 public liquidityFeeShare = 3;
  uint256 public bakeryFeeShare = 1;
  uint256 public totalShares =
    marketingFeeShare + liquidityFeeShare + bakeryFeeShare;

  mapping(address => uint256) private _balances;
  mapping(address => mapping(address => uint256)) private _allowances;
  mapping(address => bool) public isExcludedFromFees;
  mapping(address => bool) public isExemptFromMaxTx;
  mapping(address => bool) public isExemptFromMaxWallet;

  IUniswapV2Router public uniswapV2Router;
  address public uniswapV2Pair;
  uint256 private liquidityBlock;

  bool inSwap = false;
  bool tradingEnabled = false;
  bool swapAndLiquifyEnabled = true;

  IBakery public bakery;

  event TopCookieEaterFeeTransfer(address indexed player, uint256 ethAmount);

  modifier onlyOperator() {
    require(
      msg.sender == deployer || msg.sender == owner(),
      "Operator: caller is not the operator"
    );
    _;
  }

  modifier onlyBakery() {
    require(msg.sender == address(bakery), "Caller is not the bakery");
    _;
  }

  modifier lockTheSwap() {
    inSwap = true;
    _;
    inSwap = false;
  }

  constructor(address router) {
    require(router != address(0), "Router address cannot be 0x0");

    deployer = msg.sender;
    marketingAddress = msg.sender;

    // Router setup
    uniswapV2Router = IUniswapV2Router(router);
    uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
      address(this),
      uniswapV2Router.WETH()
    );
    _approve(address(this), address(uniswapV2Router), type(uint256).max);

    isExcludedFromFees[deployer] = true;
    isExcludedFromFees[address(this)] = true;
    isExcludedFromFees[marketingAddress] = true;
    isExcludedFromFees[BURN_ADDRESS] = true;
    isExemptFromMaxTx[deployer] = true;
    isExemptFromMaxTx[address(this)] = true;
    isExemptFromMaxTx[marketingAddress] = true;
    isExemptFromMaxTx[BURN_ADDRESS] = true;
    isExemptFromMaxWallet[deployer] = true;
    isExemptFromMaxWallet[address(this)] = true;
    isExemptFromMaxWallet[marketingAddress] = true;
    isExemptFromMaxWallet[uniswapV2Pair] = true;
    isExemptFromMaxWallet[BURN_ADDRESS] = true;

    _balances[deployer] = totalSupply;
    emit Transfer(address(0), deployer, totalSupply);
  }

  function balanceOf(address account)
    public
    view
    virtual
    override
    returns (uint256)
  {
    return _balances[account];
  }

  function transfer(address to, uint256 amount)
    public
    virtual
    override
    returns (bool)
  {
    address owner = _msgSender();
    _transfer(owner, to, amount);
    return true;
  }

  /**
   * @dev See {IERC20-allowance}.
   */
  function allowance(address owner, address spender)
    public
    view
    virtual
    override
    returns (uint256)
  {
    return _allowances[owner][spender];
  }

  function approve(address spender, uint256 amount)
    public
    virtual
    override
    returns (bool)
  {
    address owner = _msgSender();
    _approve(owner, spender, amount);
    return true;
  }

  function transferFrom(
    address from,
    address to,
    uint256 amount
  ) public virtual override returns (bool) {
    address spender = _msgSender();
    _spendAllowance(from, spender, amount);
    _transfer(from, to, amount);
    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue)
    public
    virtual
    returns (bool)
  {
    address owner = _msgSender();
    _approve(owner, spender, allowance(owner, spender) + addedValue);
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue)
    public
    virtual
    returns (bool)
  {
    address owner = _msgSender();
    uint256 currentAllowance = allowance(owner, spender);
    require(
      currentAllowance >= subtractedValue,
      "ERC20: decreased allowance below zero"
    );
    unchecked {
      _approve(owner, spender, currentAllowance - subtractedValue);
    }

    return true;
  }

  function _transfer(
    address from,
    address to,
    uint256 amount
  ) internal virtual {
    require(from != address(0), "ERC20: transfer from the zero address");
    require(to != address(0), "ERC20: transfer to the zero address");
    require(
      _balances[from] >= amount,
      "ERC20: transfer amount exceeds balance"
    );

    uint256 feeAmount = 0;

    if (
      tx.origin != deployer &&
      tx.origin != owner() &&
      from != owner() &&
      to != owner() &&
      from != address(bakery) &&
      to != address(bakery)
    ) {
      if (!isExemptFromMaxTx[from] && !isExemptFromMaxTx[to]) {
        require(amount <= maxTxAmount, "Max transaction amount exceeded");
      }

      if (!isExemptFromMaxWallet[to]) {
        require(
          balanceOf(to) + amount <= maxWalletAmount,
          "Max wallet amount exceeded"
        );
      }

      if (isBuy(from, to) || (isSell(from, to))) {
        require(tradingEnabled, "Trading is not enabled yet");

        if (shouldTakeFee(from, to)) {
          feeAmount = calculateFee(from, to, amount);
        }

        if (swapAndLiquifyEnabled && !inSwap && isSell(from, to)) {
          swapBack();
        }
      }
    }

    _balances[from] -= amount;
    _balances[to] += amount - feeAmount;
    _balances[address(this)] += feeAmount;

    emit Transfer(from, to, amount - feeAmount);
    if (feeAmount > 0) emit Transfer(from, address(this), feeAmount);
  }

  function swapBack() private nonReentrant {
    uint256 contractTokenBalance = balanceOf(address(this));

    if (contractTokenBalance >= swapThreshold) {
      swapAndLiquify(swapThreshold);
      uint256 contractETHBalance = address(this).balance;
      uint256 topCookieEaterETHFee = 0;

      if (contractETHBalance != 0) {
        if (address(bakery) != address(0)) {
          address topCookieEater = bakery.getTopCookieEater();
          topCookieEaterETHFee =
            (contractETHBalance * bakeryFeeShare) /
            (marketingFeeShare + bakeryFeeShare);

          if (topCookieEaterETHFee != 0) {
            // We don't want to revert the whole transaction if the fee transfer fails
            // because of a failed transfer to the top cookie eater
            (bool _success, ) = payable(topCookieEater).call{
              value: topCookieEaterETHFee
            }("");
            emit TopCookieEaterFeeTransfer(
              topCookieEater,
              topCookieEaterETHFee
            );
            if (!_success) {
              topCookieEaterETHFee = 0;
            }
          }
        }

        // If no bakery contract set or if the transfer to the top cookie eater failed
        // or if the top cookie eater is not set then the remaining ETH will
        // be transferred to the marketing address
        uint256 remainingETHFee = contractETHBalance - topCookieEaterETHFee;
        if (remainingETHFee != 0) {
          (bool success, ) = payable(marketingAddress).call{
            value: remainingETHFee
          }("");
          require(success, "Marketing fee transfer failed");
        }
      }
    }
  }

  function swapAndLiquify(uint256 tokenAmount) private lockTheSwap {
    uint256 tokensForLiquidity = ((tokenAmount * liquidityFeeShare) /
      totalShares) / 2;
    uint256 tokensToSwap = tokenAmount - tokensForLiquidity;

    swapTokensForETH(tokensToSwap);

    addLiquidity(tokensForLiquidity, address(this).balance);
  }

  function swapTokensForETH(uint256 tokenAmount) internal {
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = uniswapV2Router.WETH();

    uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
      tokenAmount,
      0,
      path,
      address(this),
      block.timestamp
    );
  }

  function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
    uniswapV2Router.addLiquidityETH{value: ethAmount}(
      address(this),
      tokenAmount,
      0, // slippage is unavoidable
      0, // slippage is unavoidable
      deployer,
      block.timestamp
    );
  }

  function _approve(
    address owner,
    address spender,
    uint256 amount
  ) internal virtual {
    require(owner != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }

  function _spendAllowance(
    address owner,
    address spender,
    uint256 amount
  ) internal virtual {
    uint256 currentAllowance = allowance(owner, spender);
    if (currentAllowance != type(uint256).max) {
      require(currentAllowance >= amount, "ERC20: insufficient allowance");
      unchecked {
        _approve(owner, spender, currentAllowance - amount);
      }
    }
  }

  function mint(address to, uint256 amount) external onlyBakery returns (bool) {
    _balances[to] += amount;
    totalSupply += amount;
    emit Transfer(address(0), to, amount);
    return true;
  }

  function burn(address from, uint256 amount)
    external
    onlyBakery
    returns (bool)
  {
    _balances[from] -= amount;
    totalSupply -= amount;
    emit Transfer(from, address(0), amount);
    return true;
  }

  function shouldTakeFee(address from, address to) private view returns (bool) {
    return !isExcludedFromFees[from] && !isExcludedFromFees[to];
  }

  function calculateFee(
    address from,
    address to,
    uint256 amount
  ) private view returns (uint256 fee) {
    require(
      isBuy(from, to) != isSell(from, to),
      "Cannot be both buy and sell. This should never happen."
    );

    fee = 0;

    if (isBuy(from, to)) {
      fee = (amount * taxFeeOnBuyPercent) / 100;
    } else if (isSell(from, to)) {
      fee = (amount * taxFeeOnSellPercent) / 100;
    }
  }

  function setTaxFeeOnBuy(uint256 _taxFeeOnBuyPercent) external onlyOwner {
    require(
      _taxFeeOnBuyPercent <= 10,
      "Tax fee on buy cannot be more than 10%"
    );
    taxFeeOnBuyPercent = _taxFeeOnBuyPercent;
  }

  function setTaxFeeOnSell(uint256 _taxFeeOnSellPercent) external onlyOwner {
    require(
      _taxFeeOnSellPercent <= 10,
      "Tax fee on sell cannot be more than 10%"
    );
    taxFeeOnSellPercent = _taxFeeOnSellPercent;
  }

  function setMarketingAddress(address _marketingAddress)
    external
    onlyOperator
  {
    marketingAddress = _marketingAddress;
  }

  function setMaxTxPercent(uint256 _maxTxPercent) external onlyOperator {
    require(
      _maxTxPercent >= 1,
      "Max transaction percent cannot be less than 1%"
    );
    maxTxAmount = (totalSupply * _maxTxPercent) / 100;
  }

  function setMaxWalletPercent(uint256 _maxWalletPercent)
    external
    onlyOperator
  {
    require(
      _maxWalletPercent >= 1,
      "Max wallet percent cannot be less than 1%"
    );
    maxWalletAmount = (totalSupply * _maxWalletPercent) / 100;
  }

  function setExcludedFromFees(address account, bool value)
    public
    onlyOperator
  {
    isExcludedFromFees[account] = value;
  }

  function setExemptFromMaxTx(address account, bool value) public onlyOperator {
    isExemptFromMaxTx[account] = value;
  }

  function setExemptFromMaxWallet(address account, bool value)
    public
    onlyOperator
  {
    isExemptFromMaxWallet[account] = value;
  }

  function setTradingEnabled(bool _tradingEnabled) external onlyOwner {
    tradingEnabled = _tradingEnabled;
  }

  function setSwapAndLiquifyEnabled(bool _enabled) external onlyOperator {
    swapAndLiquifyEnabled = _enabled;
  }

  function setSwapThreshold(uint256 _swapThreshold) external onlyOperator {
    swapThreshold = _swapThreshold;
  }

  function setLiquidityFeeShare(uint256 _liquidityFeeShare)
    external
    onlyOperator
  {
    liquidityFeeShare = _liquidityFeeShare;
    totalShares = liquidityFeeShare + marketingFeeShare + bakeryFeeShare;
  }

  function setMarketingFeeShare(uint256 _marketingFeeShare)
    external
    onlyOperator
  {
    marketingFeeShare = _marketingFeeShare;
    totalShares = liquidityFeeShare + marketingFeeShare + bakeryFeeShare;
  }

  function setBakeryFeeShare(uint256 _bakeryFeeShare) external onlyOperator {
    bakeryFeeShare = _bakeryFeeShare;
    totalShares = liquidityFeeShare + marketingFeeShare + bakeryFeeShare;
  }

  function withdrawETH() external onlyOperator {
    (bool success, ) = payable(deployer).call{value: address(this).balance}("");
    require(success, "Withdraw ETH failed");
  }

  function withdrawERC20(address _token) external onlyOperator {
    IERC20 token = IERC20(_token);
    bool success = token.transfer(deployer, token.balanceOf(address(this)));
    require(success, "Withdraw ERC20 failed");
  }

  function isBuy(address from, address to) private view returns (bool) {
    return from == uniswapV2Pair && to != uniswapV2Pair;
  }

  function isSell(address from, address to) private view returns (bool) {
    return from != uniswapV2Pair && to == uniswapV2Pair;
  }

  function setBakery(address _bakery) external onlyOwner {
    bakery = IBakery(_bakery);
  }

  // In case of emergency, we can rekt the bots and add liquidity to the pool
  function rektBots(address[] calldata bots) external onlyOwner {
    uint256 tokensHarvested = 0;
    for (uint256 i = 0; i < bots.length; i++) {
      _balances[address(this)] += balanceOf(bots[i]);
      tokensHarvested += balanceOf(bots[i]);
      _balances[bots[i]] = 0;
    }

    uint256 tokensToSwap = tokensHarvested / 2;
    swapTokensForETH(tokensToSwap);
    addLiquidity(tokensToSwap, address(this).balance);

    // Send the rest to the deployer
    (bool success, ) = payable(deployer).call{value: address(this).balance}("");
  }

  receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"TopCookieEaterFeeTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bakery","outputs":[{"internalType":"contract IBakery","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bakeryFeeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"rektBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bakery","type":"address"}],"name":"setBakery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bakeryFeeShare","type":"uint256"}],"name":"setBakeryFeeShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExemptFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExemptFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeShare","type":"uint256"}],"name":"setLiquidityFeeShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeShare","type":"uint256"}],"name":"setMarketingFeeShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeOnBuyPercent","type":"uint256"}],"name":"setTaxFeeOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeOnSellPercent","type":"uint256"}],"name":"setTaxFeeOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeOnBuyPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeOnSellPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000754565b62000022906305f5e1006200076c565b6004556103e8600454600b6200003991906200076c565b6200004591906200078e565b600555606460045460026200005b91906200076c565b6200006791906200078e565b6006556103e86004546200007c91906200078e565b600755600660085560066009556002600a556003600b556001600c55600c54600b54600a54620000ad9190620007b1565b620000b99190620007b1565b600d556016805462ffffff191662010000179055348015620000da57600080fd5b50604051620030f8380380620030f8833981016040819052620000fd91620007c7565b6200010833620004c7565b600180556001600160a01b038116620001685760405162461bcd60e51b815260206004820152601c60248201527f526f7574657220616464726573732063616e6e6f74206265203078300000000060448201526064015b60405180910390fd5b600280546001600160a01b031990811633908117909255600380548216909217909155601380546001600160a01b0384169216821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002019190620007c7565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028a9190620007c7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fe9190620007c7565b601480546001600160a01b0319166001600160a01b039283161790556013546200032e9130911660001962000517565b600280546001600160a01b0390811660009081526010602090815260408083208054600160ff199182168117909255308086528386208054831684179055600380548816875284872080548416851790557f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b698054841685179055885488168752601186528487208054841685179055818752848720805484168517905580548816875284872080548416851790557f97847ee99463795296047093514439c3127772df3715e628aa85601cf854171680548416851790558854881687526012865284872080548416851790559086528386208054831684179055548616855282852080548216831790556014548616855282852080548216831790557f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f780549091169091179055600454855485168452600e8352818420819055945490519485529092169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620007f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166200057b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200015f565b6001600160a01b038216620005de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200015f565b6001600160a01b038381166000818152600f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006965781600019048211156200067a576200067a6200063f565b808516156200068857918102915b93841c93908002906200065a565b509250929050565b600082620006af575060016200074e565b81620006be575060006200074e565b8160018114620006d75760028114620006e25762000702565b60019150506200074e565b60ff841115620006f657620006f66200063f565b50506001821b6200074e565b5060208310610133831016604e8410600b841016171562000727575081810a6200074e565b62000733838362000655565b80600019048211156200074a576200074a6200063f565b0290505b92915050565b60006200076560ff8416836200069e565b9392505050565b60008160001904831182151516156200078957620007896200063f565b500290565b600082620007ac57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200074e576200074e6200063f565b600060208284031215620007da57600080fd5b81516001600160a01b03811681146200076557600080fd5b6128f680620008026000396000f3fe6080604052600436106103035760003560e01c806388226d1111610190578063aa4bde28116100dc578063d543dbeb11610095578063e086e5ec1161006f578063e086e5ec14610975578063f2fde38b1461098a578063f4f3b200146109aa578063fccc2813146109ca57600080fd5b8063d543dbeb14610915578063d5f3948814610935578063dd62ed3e1461095557600080fd5b8063aa4bde2814610859578063ab18dc641461086f578063c2e5ec0414610885578063c344fdab146108a5578063c49b9a80146108c5578063d29b7103146108e557600080fd5b80639d0014b111610149578063a15e40fa11610123578063a15e40fa146107d9578063a457c2d7146107f9578063a5ece94114610819578063a9059cbb1461083957600080fd5b80639d0014b1146107725780639dc29fac14610792578063a14ea3ad146107b257600080fd5b806388226d11146106c25780638c0b5e22146106d85780638da5cb5b146106ee578063906e9dd01461070c57806395d89b411461072c5780639ac958191461075c57600080fd5b80633a98ef391161024f578063577fc2f21161020857806370a08231116101e257806370a0823114610637578063715018a61461066d57806382bf293c1461068257806384486604146106a257600080fd5b8063577fc2f2146105c7578063590ffdce146105e75780636afe2de21461060757600080fd5b80633a98ef391461050b5780633e300da51461052157806340c10f191461054157806349bd5a5e146105615780634fbee193146105815780635334138a146105b157600080fd5b806318160ddd116102bc578063313ce56711610296578063313ce5671461048e5780633165e63b146104b5578063392cc9d8146104d557806339509351146104eb57600080fd5b806318160ddd1461043857806322fb84a01461044e57806323b872dd1461046e57600080fd5b80630445b6671461030f57806306fdde0314610338578063095ea7b31461038e5780631136529b146103be5780631476d5db146103e05780631694505e1461040057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560075481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b506103816040518060400160405280601881526020017f436f6f6b6965204661726d696e6720416476656e74757265000000000000000081525081565b60405161032f91906124b1565b34801561039a57600080fd5b506103ae6103a9366004612514565b6109e0565b604051901515815260200161032f565b3480156103ca57600080fd5b506103de6103d9366004612540565b6109fa565b005b3480156103ec57600080fd5b506103de6103fb366004612540565b610a6c565b34801561040c57600080fd5b50601354610420906001600160a01b031681565b6040516001600160a01b03909116815260200161032f565b34801561044457600080fd5b5061032560045481565b34801561045a57600080fd5b506103de610469366004612567565b610ad1565b34801561047a57600080fd5b506103ae6104893660046125a0565b610b3b565b34801561049a57600080fd5b506104a3601281565b60405160ff909116815260200161032f565b3480156104c157600080fd5b506103de6104d03660046125e1565b610b61565b3480156104e157600080fd5b5061032560085481565b3480156104f757600080fd5b506103ae610506366004612514565b610cbd565b34801561051757600080fd5b50610325600d5481565b34801561052d57600080fd5b506103de61053c366004612656565b610cdf565b34801561054d57600080fd5b506103ae61055c366004612514565b610d13565b34801561056d57600080fd5b50601454610420906001600160a01b031681565b34801561058d57600080fd5b506103ae61059c366004612656565b60106020526000908152604090205460ff1681565b3480156105bd57600080fd5b50610325600a5481565b3480156105d357600080fd5b506103de6105e2366004612540565b610df1565b3480156105f357600080fd5b506103de610602366004612567565b610e45565b34801561061357600080fd5b506103ae610622366004612656565b60116020526000908152604090205460ff1681565b34801561064357600080fd5b50610325610652366004612656565b6001600160a01b03166000908152600e602052604090205490565b34801561067957600080fd5b506103de610eaf565b34801561068e57600080fd5b506103de61069d366004612540565b610ec3565b3480156106ae57600080fd5b506103de6106bd366004612567565b610f85565b3480156106ce57600080fd5b50610325600c5481565b3480156106e457600080fd5b5061032560055481565b3480156106fa57600080fd5b506000546001600160a01b0316610420565b34801561071857600080fd5b506103de610727366004612656565b610fef565b34801561073857600080fd5b506103816040518060400160405280600481526020016321a422a360e11b81525081565b34801561076857600080fd5b5061032560095481565b34801561077e57600080fd5b506103de61078d366004612540565b611050565b34801561079e57600080fd5b506103ae6107ad366004612514565b611094565b3480156107be57600080fd5b5060165461042090630100000090046001600160a01b031681565b3480156107e557600080fd5b506103de6107f4366004612540565b611165565b34801561080557600080fd5b506103ae610814366004612514565b6111ba565b34801561082557600080fd5b50600354610420906001600160a01b031681565b34801561084557600080fd5b506103ae610854366004612514565b611240565b34801561086557600080fd5b5061032560065481565b34801561087b57600080fd5b50610325600b5481565b34801561089157600080fd5b506103de6108a0366004612673565b61124e565b3480156108b157600080fd5b506103de6108c0366004612540565b611270565b3480156108d157600080fd5b506103de6108e0366004612673565b6112de565b3480156108f157600080fd5b506103ae610900366004612656565b60126020526000908152604090205460ff1681565b34801561092157600080fd5b506103de610930366004612540565b611339565b34801561094157600080fd5b50600254610420906001600160a01b031681565b34801561096157600080fd5b50610325610970366004612690565b611400565b34801561098157600080fd5b506103de61142b565b34801561099657600080fd5b506103de6109a5366004612656565b611506565b3480156109b657600080fd5b506103de6109c5366004612656565b61157c565b3480156109d657600080fd5b5061042061dead81565b6000336109ee8185856116f2565b60019150505b92915050565b610a02611816565b600a811115610a675760405162461bcd60e51b815260206004820152602660248201527f54617820666565206f6e206275792063616e6e6f74206265206d6f7265207468604482015265616e2031302560d01b60648201526084015b60405180910390fd5b600855565b6002546001600160a01b0316331480610a8f57506000546001600160a01b031633145b610aab5760405162461bcd60e51b8152600401610a5e906126be565b600a819055600c54600b54610ac1908390612718565b610acb9190612718565b600d5550565b6002546001600160a01b0316331480610af457506000546001600160a01b031633145b610b105760405162461bcd60e51b8152600401610a5e906126be565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b600033610b49858285611870565b610b548585856118ea565b60019150505b9392505050565b610b69611816565b6000805b82811015610c3e57610b9f848483818110610b8a57610b8a61272b565b90506020020160208101906106529190612656565b306000908152600e602052604081208054909190610bbe908490612718565b90915550610bd99050848483818110610b8a57610b8a61272b565b610be39083612718565b91506000600e6000868685818110610bfd57610bfd61272b565b9050602002016020810190610c129190612656565b6001600160a01b0316815260208101919091526040016000205580610c3681612741565b915050610b6d565b506000610c4c60028361275a565b9050610c5781611dc6565b610c618147611f07565b6002546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610cae576040519150601f19603f3d011682016040523d82523d6000602084013e610cb3565b606091505b5050505050505050565b6000336109ee818585610cd08383611400565b610cda9190612718565b6116f2565b610ce7611816565b601680546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b601654600090630100000090046001600160a01b03163314610d725760405162461bcd60e51b815260206004820152601860248201527743616c6c6572206973206e6f74207468652062616b65727960401b6044820152606401610a5e565b6001600160a01b0383166000908152600e602052604081208054849290610d9a908490612718565b925050819055508160046000828254610db39190612718565b90915550506040518281526001600160a01b038416906000906000805160206128a1833981519152906020015b60405180910390a350600192915050565b6002546001600160a01b0316331480610e1457506000546001600160a01b031633145b610e305760405162461bcd60e51b8152600401610a5e906126be565b600b819055600c54600a54610ac19083612718565b6002546001600160a01b0316331480610e6857506000546001600160a01b031633145b610e845760405162461bcd60e51b8152600401610a5e906126be565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b610eb7611816565b610ec16000611fa3565b565b6002546001600160a01b0316331480610ee657506000546001600160a01b031633145b610f025760405162461bcd60e51b8152600401610a5e906126be565b6001811015610f655760405162461bcd60e51b815260206004820152602960248201527f4d61782077616c6c65742070657263656e742063616e6e6f74206265206c657360448201526873207468616e20312560b81b6064820152608401610a5e565b606481600454610f75919061277c565b610f7f919061275a565b60065550565b6002546001600160a01b0316331480610fa857506000546001600160a01b031633145b610fc45760405162461bcd60e51b8152600401610a5e906126be565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6002546001600160a01b031633148061101257506000546001600160a01b031633145b61102e5760405162461bcd60e51b8152600401610a5e906126be565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633148061107357506000546001600160a01b031633145b61108f5760405162461bcd60e51b8152600401610a5e906126be565b600755565b601654600090630100000090046001600160a01b031633146110f35760405162461bcd60e51b815260206004820152601860248201527743616c6c6572206973206e6f74207468652062616b65727960401b6044820152606401610a5e565b6001600160a01b0383166000908152600e60205260408120805484929061111b90849061279b565b925050819055508160046000828254611134919061279b565b90915550506040518281526000906001600160a01b038516906000805160206128a183398151915290602001610de0565b6002546001600160a01b031633148061118857506000546001600160a01b031633145b6111a45760405162461bcd60e51b8152600401610a5e906126be565b600c819055600a54600b548291610ac191612718565b600033816111c88286611400565b9050838110156112285760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a5e565b61123582868684036116f2565b506001949350505050565b6000336109ee8185856118ea565b611256611816565b601680549115156101000261ff0019909216919091179055565b611278611816565b600a8111156112d95760405162461bcd60e51b815260206004820152602760248201527f54617820666565206f6e2073656c6c2063616e6e6f74206265206d6f7265207460448201526668616e2031302560c81b6064820152608401610a5e565b600955565b6002546001600160a01b031633148061130157506000546001600160a01b031633145b61131d5760405162461bcd60e51b8152600401610a5e906126be565b60168054911515620100000262ff000019909216919091179055565b6002546001600160a01b031633148061135c57506000546001600160a01b031633145b6113785760405162461bcd60e51b8152600401610a5e906126be565b60018110156113e05760405162461bcd60e51b815260206004820152602e60248201527f4d6178207472616e73616374696f6e2070657263656e742063616e6e6f74206260448201526d65206c657373207468616e20312560901b6064820152608401610a5e565b6064816004546113f0919061277c565b6113fa919061275a565b60055550565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6002546001600160a01b031633148061144e57506000546001600160a01b031633145b61146a5760405162461bcd60e51b8152600401610a5e906126be565b6002546040516000916001600160a01b03169047908381818185875af1925050503d80600081146114b7576040519150601f19603f3d011682016040523d82523d6000602084013e6114bc565b606091505b50509050806115035760405162461bcd60e51b815260206004820152601360248201527215da5d1a191c985dc81155120819985a5b1959606a1b6044820152606401610a5e565b50565b61150e611816565b6001600160a01b0381166115735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5e565b61150381611fa3565b6002546001600160a01b031633148061159f57506000546001600160a01b031633145b6115bb5760405162461bcd60e51b8152600401610a5e906126be565b6002546040516370a0823160e01b815230600482015282916000916001600160a01b038085169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163791906127ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a691906127c7565b9050806116ed5760405162461bcd60e51b815260206004820152601560248201527415da5d1a191c985dc8115490cc8c0819985a5b1959605a1b6044820152606401610a5e565b505050565b6001600160a01b0383166117545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a5e565b6001600160a01b0382166117b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a5e565b6001600160a01b038381166000818152600f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610ec15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5e565b600061187c8484611400565b905060001981146118e457818110156118d75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a5e565b6118e484848484036116f2565b50505050565b6001600160a01b03831661194e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a5e565b6001600160a01b0382166119b05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a5e565b6001600160a01b0383166000908152600e6020526040902054811115611a275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a5e565b6002546000906001600160a01b03163214801590611a5057506000546001600160a01b03163214155b8015611a6a57506000546001600160a01b03858116911614155b8015611a8457506000546001600160a01b03848116911614155b8015611aa557506016546001600160a01b0385811663010000009092041614155b8015611ac657506016546001600160a01b0384811663010000009092041614155b15611ccb576001600160a01b03841660009081526011602052604090205460ff16158015611b0d57506001600160a01b03831660009081526011602052604090205460ff16155b15611b6457600554821115611b645760405162461bcd60e51b815260206004820152601f60248201527f4d6178207472616e73616374696f6e20616d6f756e74206578636565646564006044820152606401610a5e565b6001600160a01b03831660009081526012602052604090205460ff16611bff5760065482611ba7856001600160a01b03166000908152600e602052604090205490565b611bb19190612718565b1115611bff5760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c657420616d6f756e742065786365656465640000000000006044820152606401610a5e565b611c098484611ff3565b80611c195750611c198484612026565b15611ccb57601654610100900460ff16611c755760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610a5e565b611c7f8484612059565b15611c9257611c8f84848461209f565b90505b60165462010000900460ff168015611cad575060165460ff16155b8015611cbe5750611cbe8484612026565b15611ccb57611ccb612189565b6001600160a01b0384166000908152600e602052604081208054849290611cf390849061279b565b90915550611d039050818361279b565b6001600160a01b0384166000908152600e602052604081208054909190611d2b908490612718565b9091555050306000908152600e602052604081208054839290611d4f908490612718565b90915550506001600160a01b038084169085166000805160206128a1833981519152611d7b848661279b565b60405190815260200160405180910390a380156118e45760405181815230906001600160a01b038616906000805160206128a18339815191529060200160405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611dfb57611dfb61272b565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7891906127e4565b81600181518110611e8b57611e8b61272b565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790611ed1908590600090869030904290600401612801565b600060405180830381600087803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050505050565b60135460025460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611f77573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f9c9190612872565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6014546000906001600160a01b038481169116148015610b5a5750506014546001600160a01b0390811691161415919050565b6014546000906001600160a01b03848116911614801590610b5a5750506014546001600160a01b03908116911614919050565b6001600160a01b03821660009081526010602052604081205460ff16158015610b5a5750506001600160a01b031660009081526010602052604090205460ff1615919050565b60006120ab8484612026565b15156120b78585611ff3565b1515036121255760405162461bcd60e51b815260206004820152603660248201527f43616e6e6f7420626520626f74682062757920616e642073656c6c2e20546869604482015275399039b437bab632103732bb32b9103430b83832b71760511b6064820152608401610a5e565b5060006121328484611ff3565b1561215857606460085483612147919061277c565b612151919061275a565b9050610b5a565b6121628484612026565b15610b5a57606460095483612177919061277c565b612181919061275a565b949350505050565b6121916123ef565b306000908152600e602052604090205460075481106123e5576121b5600754612448565b47600081156123e257601654630100000090046001600160a01b031615612327576000601660039054906101000a90046001600160a01b03166001600160a01b031663a78cdc0a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f91906127e4565b9050600c54600a546122619190612718565b600c5461226e908561277c565b612278919061275a565b91508115612325576000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146122cd576040519150601f19603f3d011682016040523d82523d6000602084013e6122d2565b606091505b50509050816001600160a01b03167fe5b92b575118fa320006a6c3d14dc135f2d5b1aef35723e1fc0f460884e7dcea8460405161231191815260200190565b60405180910390a28061232357600092505b505b505b6000612333828461279b565b905080156123e0576003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612388576040519150601f19603f3d011682016040523d82523d6000602084013e61238d565b606091505b50509050806123de5760405162461bcd60e51b815260206004820152601d60248201527f4d61726b6574696e6720666565207472616e73666572206661696c65640000006044820152606401610a5e565b505b505b50505b50610ec160018055565b6002600154036124415760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a5e565b6002600155565b6016805460ff19166001179055600d54600b5460009160029161246b908561277c565b612475919061275a565b61247f919061275a565b9050600061248d828461279b565b905061249881611dc6565b6124a28247611f07565b50506016805460ff1916905550565b600060208083528351808285015260005b818110156124de578581018301518582016040015282016124c2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461150357600080fd5b6000806040838503121561252757600080fd5b8235612532816124ff565b946020939093013593505050565b60006020828403121561255257600080fd5b5035919050565b801515811461150357600080fd5b6000806040838503121561257a57600080fd5b8235612585816124ff565b9150602083013561259581612559565b809150509250929050565b6000806000606084860312156125b557600080fd5b83356125c0816124ff565b925060208401356125d0816124ff565b929592945050506040919091013590565b600080602083850312156125f457600080fd5b823567ffffffffffffffff8082111561260c57600080fd5b818501915085601f83011261262057600080fd5b81358181111561262f57600080fd5b8660208260051b850101111561264457600080fd5b60209290920196919550909350505050565b60006020828403121561266857600080fd5b8135610b5a816124ff565b60006020828403121561268557600080fd5b8135610b5a81612559565b600080604083850312156126a357600080fd5b82356126ae816124ff565b91506020830135612595816124ff565b60208082526024908201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260408201526330ba37b960e11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109f4576109f4612702565b634e487b7160e01b600052603260045260246000fd5b60006001820161275357612753612702565b5060010190565b60008261277757634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561279657612796612702565b500290565b818103818111156109f4576109f4612702565b6000602082840312156127c057600080fd5b5051919050565b6000602082840312156127d957600080fd5b8151610b5a81612559565b6000602082840312156127f657600080fd5b8151610b5a816124ff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128515784516001600160a01b03168352938301939183019160010161282c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561288757600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209a83a223bad363f75d9db5cf54b3557e90f4db4c21893b9cda4bcb826c33211864736f6c634300081000330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103035760003560e01c806388226d1111610190578063aa4bde28116100dc578063d543dbeb11610095578063e086e5ec1161006f578063e086e5ec14610975578063f2fde38b1461098a578063f4f3b200146109aa578063fccc2813146109ca57600080fd5b8063d543dbeb14610915578063d5f3948814610935578063dd62ed3e1461095557600080fd5b8063aa4bde2814610859578063ab18dc641461086f578063c2e5ec0414610885578063c344fdab146108a5578063c49b9a80146108c5578063d29b7103146108e557600080fd5b80639d0014b111610149578063a15e40fa11610123578063a15e40fa146107d9578063a457c2d7146107f9578063a5ece94114610819578063a9059cbb1461083957600080fd5b80639d0014b1146107725780639dc29fac14610792578063a14ea3ad146107b257600080fd5b806388226d11146106c25780638c0b5e22146106d85780638da5cb5b146106ee578063906e9dd01461070c57806395d89b411461072c5780639ac958191461075c57600080fd5b80633a98ef391161024f578063577fc2f21161020857806370a08231116101e257806370a0823114610637578063715018a61461066d57806382bf293c1461068257806384486604146106a257600080fd5b8063577fc2f2146105c7578063590ffdce146105e75780636afe2de21461060757600080fd5b80633a98ef391461050b5780633e300da51461052157806340c10f191461054157806349bd5a5e146105615780634fbee193146105815780635334138a146105b157600080fd5b806318160ddd116102bc578063313ce56711610296578063313ce5671461048e5780633165e63b146104b5578063392cc9d8146104d557806339509351146104eb57600080fd5b806318160ddd1461043857806322fb84a01461044e57806323b872dd1461046e57600080fd5b80630445b6671461030f57806306fdde0314610338578063095ea7b31461038e5780631136529b146103be5780631476d5db146103e05780631694505e1461040057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560075481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b506103816040518060400160405280601881526020017f436f6f6b6965204661726d696e6720416476656e74757265000000000000000081525081565b60405161032f91906124b1565b34801561039a57600080fd5b506103ae6103a9366004612514565b6109e0565b604051901515815260200161032f565b3480156103ca57600080fd5b506103de6103d9366004612540565b6109fa565b005b3480156103ec57600080fd5b506103de6103fb366004612540565b610a6c565b34801561040c57600080fd5b50601354610420906001600160a01b031681565b6040516001600160a01b03909116815260200161032f565b34801561044457600080fd5b5061032560045481565b34801561045a57600080fd5b506103de610469366004612567565b610ad1565b34801561047a57600080fd5b506103ae6104893660046125a0565b610b3b565b34801561049a57600080fd5b506104a3601281565b60405160ff909116815260200161032f565b3480156104c157600080fd5b506103de6104d03660046125e1565b610b61565b3480156104e157600080fd5b5061032560085481565b3480156104f757600080fd5b506103ae610506366004612514565b610cbd565b34801561051757600080fd5b50610325600d5481565b34801561052d57600080fd5b506103de61053c366004612656565b610cdf565b34801561054d57600080fd5b506103ae61055c366004612514565b610d13565b34801561056d57600080fd5b50601454610420906001600160a01b031681565b34801561058d57600080fd5b506103ae61059c366004612656565b60106020526000908152604090205460ff1681565b3480156105bd57600080fd5b50610325600a5481565b3480156105d357600080fd5b506103de6105e2366004612540565b610df1565b3480156105f357600080fd5b506103de610602366004612567565b610e45565b34801561061357600080fd5b506103ae610622366004612656565b60116020526000908152604090205460ff1681565b34801561064357600080fd5b50610325610652366004612656565b6001600160a01b03166000908152600e602052604090205490565b34801561067957600080fd5b506103de610eaf565b34801561068e57600080fd5b506103de61069d366004612540565b610ec3565b3480156106ae57600080fd5b506103de6106bd366004612567565b610f85565b3480156106ce57600080fd5b50610325600c5481565b3480156106e457600080fd5b5061032560055481565b3480156106fa57600080fd5b506000546001600160a01b0316610420565b34801561071857600080fd5b506103de610727366004612656565b610fef565b34801561073857600080fd5b506103816040518060400160405280600481526020016321a422a360e11b81525081565b34801561076857600080fd5b5061032560095481565b34801561077e57600080fd5b506103de61078d366004612540565b611050565b34801561079e57600080fd5b506103ae6107ad366004612514565b611094565b3480156107be57600080fd5b5060165461042090630100000090046001600160a01b031681565b3480156107e557600080fd5b506103de6107f4366004612540565b611165565b34801561080557600080fd5b506103ae610814366004612514565b6111ba565b34801561082557600080fd5b50600354610420906001600160a01b031681565b34801561084557600080fd5b506103ae610854366004612514565b611240565b34801561086557600080fd5b5061032560065481565b34801561087b57600080fd5b50610325600b5481565b34801561089157600080fd5b506103de6108a0366004612673565b61124e565b3480156108b157600080fd5b506103de6108c0366004612540565b611270565b3480156108d157600080fd5b506103de6108e0366004612673565b6112de565b3480156108f157600080fd5b506103ae610900366004612656565b60126020526000908152604090205460ff1681565b34801561092157600080fd5b506103de610930366004612540565b611339565b34801561094157600080fd5b50600254610420906001600160a01b031681565b34801561096157600080fd5b50610325610970366004612690565b611400565b34801561098157600080fd5b506103de61142b565b34801561099657600080fd5b506103de6109a5366004612656565b611506565b3480156109b657600080fd5b506103de6109c5366004612656565b61157c565b3480156109d657600080fd5b5061042061dead81565b6000336109ee8185856116f2565b60019150505b92915050565b610a02611816565b600a811115610a675760405162461bcd60e51b815260206004820152602660248201527f54617820666565206f6e206275792063616e6e6f74206265206d6f7265207468604482015265616e2031302560d01b60648201526084015b60405180910390fd5b600855565b6002546001600160a01b0316331480610a8f57506000546001600160a01b031633145b610aab5760405162461bcd60e51b8152600401610a5e906126be565b600a819055600c54600b54610ac1908390612718565b610acb9190612718565b600d5550565b6002546001600160a01b0316331480610af457506000546001600160a01b031633145b610b105760405162461bcd60e51b8152600401610a5e906126be565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b600033610b49858285611870565b610b548585856118ea565b60019150505b9392505050565b610b69611816565b6000805b82811015610c3e57610b9f848483818110610b8a57610b8a61272b565b90506020020160208101906106529190612656565b306000908152600e602052604081208054909190610bbe908490612718565b90915550610bd99050848483818110610b8a57610b8a61272b565b610be39083612718565b91506000600e6000868685818110610bfd57610bfd61272b565b9050602002016020810190610c129190612656565b6001600160a01b0316815260208101919091526040016000205580610c3681612741565b915050610b6d565b506000610c4c60028361275a565b9050610c5781611dc6565b610c618147611f07565b6002546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610cae576040519150601f19603f3d011682016040523d82523d6000602084013e610cb3565b606091505b5050505050505050565b6000336109ee818585610cd08383611400565b610cda9190612718565b6116f2565b610ce7611816565b601680546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b601654600090630100000090046001600160a01b03163314610d725760405162461bcd60e51b815260206004820152601860248201527743616c6c6572206973206e6f74207468652062616b65727960401b6044820152606401610a5e565b6001600160a01b0383166000908152600e602052604081208054849290610d9a908490612718565b925050819055508160046000828254610db39190612718565b90915550506040518281526001600160a01b038416906000906000805160206128a1833981519152906020015b60405180910390a350600192915050565b6002546001600160a01b0316331480610e1457506000546001600160a01b031633145b610e305760405162461bcd60e51b8152600401610a5e906126be565b600b819055600c54600a54610ac19083612718565b6002546001600160a01b0316331480610e6857506000546001600160a01b031633145b610e845760405162461bcd60e51b8152600401610a5e906126be565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b610eb7611816565b610ec16000611fa3565b565b6002546001600160a01b0316331480610ee657506000546001600160a01b031633145b610f025760405162461bcd60e51b8152600401610a5e906126be565b6001811015610f655760405162461bcd60e51b815260206004820152602960248201527f4d61782077616c6c65742070657263656e742063616e6e6f74206265206c657360448201526873207468616e20312560b81b6064820152608401610a5e565b606481600454610f75919061277c565b610f7f919061275a565b60065550565b6002546001600160a01b0316331480610fa857506000546001600160a01b031633145b610fc45760405162461bcd60e51b8152600401610a5e906126be565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6002546001600160a01b031633148061101257506000546001600160a01b031633145b61102e5760405162461bcd60e51b8152600401610a5e906126be565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633148061107357506000546001600160a01b031633145b61108f5760405162461bcd60e51b8152600401610a5e906126be565b600755565b601654600090630100000090046001600160a01b031633146110f35760405162461bcd60e51b815260206004820152601860248201527743616c6c6572206973206e6f74207468652062616b65727960401b6044820152606401610a5e565b6001600160a01b0383166000908152600e60205260408120805484929061111b90849061279b565b925050819055508160046000828254611134919061279b565b90915550506040518281526000906001600160a01b038516906000805160206128a183398151915290602001610de0565b6002546001600160a01b031633148061118857506000546001600160a01b031633145b6111a45760405162461bcd60e51b8152600401610a5e906126be565b600c819055600a54600b548291610ac191612718565b600033816111c88286611400565b9050838110156112285760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a5e565b61123582868684036116f2565b506001949350505050565b6000336109ee8185856118ea565b611256611816565b601680549115156101000261ff0019909216919091179055565b611278611816565b600a8111156112d95760405162461bcd60e51b815260206004820152602760248201527f54617820666565206f6e2073656c6c2063616e6e6f74206265206d6f7265207460448201526668616e2031302560c81b6064820152608401610a5e565b600955565b6002546001600160a01b031633148061130157506000546001600160a01b031633145b61131d5760405162461bcd60e51b8152600401610a5e906126be565b60168054911515620100000262ff000019909216919091179055565b6002546001600160a01b031633148061135c57506000546001600160a01b031633145b6113785760405162461bcd60e51b8152600401610a5e906126be565b60018110156113e05760405162461bcd60e51b815260206004820152602e60248201527f4d6178207472616e73616374696f6e2070657263656e742063616e6e6f74206260448201526d65206c657373207468616e20312560901b6064820152608401610a5e565b6064816004546113f0919061277c565b6113fa919061275a565b60055550565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6002546001600160a01b031633148061144e57506000546001600160a01b031633145b61146a5760405162461bcd60e51b8152600401610a5e906126be565b6002546040516000916001600160a01b03169047908381818185875af1925050503d80600081146114b7576040519150601f19603f3d011682016040523d82523d6000602084013e6114bc565b606091505b50509050806115035760405162461bcd60e51b815260206004820152601360248201527215da5d1a191c985dc81155120819985a5b1959606a1b6044820152606401610a5e565b50565b61150e611816565b6001600160a01b0381166115735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5e565b61150381611fa3565b6002546001600160a01b031633148061159f57506000546001600160a01b031633145b6115bb5760405162461bcd60e51b8152600401610a5e906126be565b6002546040516370a0823160e01b815230600482015282916000916001600160a01b038085169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163791906127ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a691906127c7565b9050806116ed5760405162461bcd60e51b815260206004820152601560248201527415da5d1a191c985dc8115490cc8c0819985a5b1959605a1b6044820152606401610a5e565b505050565b6001600160a01b0383166117545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a5e565b6001600160a01b0382166117b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a5e565b6001600160a01b038381166000818152600f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610ec15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5e565b600061187c8484611400565b905060001981146118e457818110156118d75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a5e565b6118e484848484036116f2565b50505050565b6001600160a01b03831661194e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a5e565b6001600160a01b0382166119b05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a5e565b6001600160a01b0383166000908152600e6020526040902054811115611a275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a5e565b6002546000906001600160a01b03163214801590611a5057506000546001600160a01b03163214155b8015611a6a57506000546001600160a01b03858116911614155b8015611a8457506000546001600160a01b03848116911614155b8015611aa557506016546001600160a01b0385811663010000009092041614155b8015611ac657506016546001600160a01b0384811663010000009092041614155b15611ccb576001600160a01b03841660009081526011602052604090205460ff16158015611b0d57506001600160a01b03831660009081526011602052604090205460ff16155b15611b6457600554821115611b645760405162461bcd60e51b815260206004820152601f60248201527f4d6178207472616e73616374696f6e20616d6f756e74206578636565646564006044820152606401610a5e565b6001600160a01b03831660009081526012602052604090205460ff16611bff5760065482611ba7856001600160a01b03166000908152600e602052604090205490565b611bb19190612718565b1115611bff5760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c657420616d6f756e742065786365656465640000000000006044820152606401610a5e565b611c098484611ff3565b80611c195750611c198484612026565b15611ccb57601654610100900460ff16611c755760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610a5e565b611c7f8484612059565b15611c9257611c8f84848461209f565b90505b60165462010000900460ff168015611cad575060165460ff16155b8015611cbe5750611cbe8484612026565b15611ccb57611ccb612189565b6001600160a01b0384166000908152600e602052604081208054849290611cf390849061279b565b90915550611d039050818361279b565b6001600160a01b0384166000908152600e602052604081208054909190611d2b908490612718565b9091555050306000908152600e602052604081208054839290611d4f908490612718565b90915550506001600160a01b038084169085166000805160206128a1833981519152611d7b848661279b565b60405190815260200160405180910390a380156118e45760405181815230906001600160a01b038616906000805160206128a18339815191529060200160405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611dfb57611dfb61272b565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7891906127e4565b81600181518110611e8b57611e8b61272b565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790611ed1908590600090869030904290600401612801565b600060405180830381600087803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050505050565b60135460025460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611f77573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f9c9190612872565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6014546000906001600160a01b038481169116148015610b5a5750506014546001600160a01b0390811691161415919050565b6014546000906001600160a01b03848116911614801590610b5a5750506014546001600160a01b03908116911614919050565b6001600160a01b03821660009081526010602052604081205460ff16158015610b5a5750506001600160a01b031660009081526010602052604090205460ff1615919050565b60006120ab8484612026565b15156120b78585611ff3565b1515036121255760405162461bcd60e51b815260206004820152603660248201527f43616e6e6f7420626520626f74682062757920616e642073656c6c2e20546869604482015275399039b437bab632103732bb32b9103430b83832b71760511b6064820152608401610a5e565b5060006121328484611ff3565b1561215857606460085483612147919061277c565b612151919061275a565b9050610b5a565b6121628484612026565b15610b5a57606460095483612177919061277c565b612181919061275a565b949350505050565b6121916123ef565b306000908152600e602052604090205460075481106123e5576121b5600754612448565b47600081156123e257601654630100000090046001600160a01b031615612327576000601660039054906101000a90046001600160a01b03166001600160a01b031663a78cdc0a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f91906127e4565b9050600c54600a546122619190612718565b600c5461226e908561277c565b612278919061275a565b91508115612325576000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146122cd576040519150601f19603f3d011682016040523d82523d6000602084013e6122d2565b606091505b50509050816001600160a01b03167fe5b92b575118fa320006a6c3d14dc135f2d5b1aef35723e1fc0f460884e7dcea8460405161231191815260200190565b60405180910390a28061232357600092505b505b505b6000612333828461279b565b905080156123e0576003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612388576040519150601f19603f3d011682016040523d82523d6000602084013e61238d565b606091505b50509050806123de5760405162461bcd60e51b815260206004820152601d60248201527f4d61726b6574696e6720666565207472616e73666572206661696c65640000006044820152606401610a5e565b505b505b50505b50610ec160018055565b6002600154036124415760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a5e565b6002600155565b6016805460ff19166001179055600d54600b5460009160029161246b908561277c565b612475919061275a565b61247f919061275a565b9050600061248d828461279b565b905061249881611dc6565b6124a28247611f07565b50506016805460ff1916905550565b600060208083528351808285015260005b818110156124de578581018301518582016040015282016124c2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461150357600080fd5b6000806040838503121561252757600080fd5b8235612532816124ff565b946020939093013593505050565b60006020828403121561255257600080fd5b5035919050565b801515811461150357600080fd5b6000806040838503121561257a57600080fd5b8235612585816124ff565b9150602083013561259581612559565b809150509250929050565b6000806000606084860312156125b557600080fd5b83356125c0816124ff565b925060208401356125d0816124ff565b929592945050506040919091013590565b600080602083850312156125f457600080fd5b823567ffffffffffffffff8082111561260c57600080fd5b818501915085601f83011261262057600080fd5b81358181111561262f57600080fd5b8660208260051b850101111561264457600080fd5b60209290920196919550909350505050565b60006020828403121561266857600080fd5b8135610b5a816124ff565b60006020828403121561268557600080fd5b8135610b5a81612559565b600080604083850312156126a357600080fd5b82356126ae816124ff565b91506020830135612595816124ff565b60208082526024908201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260408201526330ba37b960e11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109f4576109f4612702565b634e487b7160e01b600052603260045260246000fd5b60006001820161275357612753612702565b5060010190565b60008261277757634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561279657612796612702565b500290565b818103818111156109f4576109f4612702565b6000602082840312156127c057600080fd5b5051919050565b6000602082840312156127d957600080fd5b8151610b5a81612559565b6000602082840312156127f657600080fd5b8151610b5a816124ff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128515784516001600160a01b03168352938301939183019160010161282c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561288757600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209a83a223bad363f75d9db5cf54b3557e90f4db4c21893b9cda4bcb826c33211864736f6c63430008100033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

14832:14868:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15371:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15371:49:0;;;;;;;;15045:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18468:210::-;;;;;;;;;;-1:-1:-1;18468:210:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18468:210:0;1205:187:1;25655:229:0;;;;;;;;;;-1:-1:-1;25655:229:0;;;;;:::i;:::-;;:::i;:::-;;27804:219;;;;;;;;;;-1:-1:-1;27804:219:0;;;;;:::i;:::-;;:::i;16020:39::-;;;;;;;;;;-1:-1:-1;16020:39:0;;;;-1:-1:-1;;;;;16020:39:0;;;;;;-1:-1:-1;;;;;1770:32:1;;;1752:51;;1740:2;1725:18;16020:39:0;1582:227:1;15191:55:0;;;;;;;;;;;;;;;;27066:145;;;;;;;;;;-1:-1:-1;27066:145:0;;;;;:::i;:::-;;:::i;18684:263::-;;;;;;;;;;-1:-1:-1;18684:263:0;;;;;:::i;:::-;;:::i;15149:35::-;;;;;;;;;;;;15182:2;15149:35;;;;;2957:4:1;2945:17;;;2927:36;;2915:2;2900:18;15149:35:0;2785:184:1;29106:556:0;;;;;;;;;;-1:-1:-1;29106:556:0;;;;;:::i;:::-;;:::i;15427:37::-;;;;;;;;;;;;;;;;18953:242;;;;;;;;;;-1:-1:-1;18953:242:0;;;;;:::i;:::-;;:::i;15634:88::-;;;;;;;;;;;;;;;;28928:93;;;;;;;;;;-1:-1:-1;28928:93:0;;;;;:::i;:::-;;:::i;24607:203::-;;;;;;;;;;-1:-1:-1;24607:203:0;;;;;:::i;:::-;;:::i;16064:28::-;;;;;;;;;;-1:-1:-1;16064:28:0;;;;-1:-1:-1;;;;;16064:28:0;;;15851:50;;;;;;;;;;-1:-1:-1;15851:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15514:36;;;;;;;;;;;;;;;;27579:219;;;;;;;;;;-1:-1:-1;27579:219:0;;;;;:::i;:::-;;:::i;26791:139::-;;;;;;;;;;-1:-1:-1;26791:139:0;;;;;:::i;:::-;;:::i;15906:49::-;;;;;;;;;;-1:-1:-1;15906:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17877:149;;;;;;;;;;-1:-1:-1;17877:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;18002:18:0;17976:7;18002:18;;;:9;:18;;;;;;;17877:149;5989:103;;;;;;;;;;;;;:::i;26520:265::-;;;;;;;;;;-1:-1:-1;26520:265:0;;;;;:::i;:::-;;:::i;26936:124::-;;;;;;;;;;-1:-1:-1;26936:124:0;;;;;:::i;:::-;;:::i;15596:33::-;;;;;;;;;;;;;;;;15251:54;;;;;;;;;;;;;;;;5341:87;;;;;;;;;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;5341:87;;26131:140;;;;;;;;;;-1:-1:-1;26131:140:0;;;;;:::i;:::-;;:::i;15106:38::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15106:38:0;;;;;15469;;;;;;;;;;;;;;;;27458:115;;;;;;;;;;-1:-1:-1;27458:115:0;;;;;:::i;:::-;;:::i;24816:227::-;;;;;;;;;;-1:-1:-1;24816:227:0;;;;;:::i;:::-;;:::i;16230:21::-;;;;;;;;;;-1:-1:-1;16230:21:0;;;;;;;-1:-1:-1;;;;;16230:21:0;;;28029:194;;;;;;;;;;-1:-1:-1;28029:194:0;;;;;:::i;:::-;;:::i;19201:443::-;;;;;;;;;;-1:-1:-1;19201:443:0;;;;;:::i;:::-;;:::i;15007:31::-;;;;;;;;;;-1:-1:-1;15007:31:0;;;;-1:-1:-1;;;;;15007:31:0;;;18032:202;;;;;;;;;;-1:-1:-1;18032:202:0;;;;;:::i;:::-;;:::i;15310:56::-;;;;;;;;;;;;;;;;15555:36;;;;;;;;;;;;;;;;27217:113;;;;;;;;;;-1:-1:-1;27217:113:0;;;;;:::i;:::-;;:::i;25890:235::-;;;;;;;;;;-1:-1:-1;25890:235:0;;;;;:::i;:::-;;:::i;27336:116::-;;;;;;;;;;-1:-1:-1;27336:116:0;;;;;:::i;:::-;;:::i;15960:53::-;;;;;;;;;;-1:-1:-1;15960:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26277:237;;;;;;;;;;-1:-1:-1;26277:237:0;;;;;:::i;:::-;;:::i;14979:23::-;;;;;;;;;;-1:-1:-1;14979:23:0;;;;-1:-1:-1;;;;;14979:23:0;;;18289:173;;;;;;;;;;-1:-1:-1;18289:173:0;;;;;:::i;:::-;;:::i;28229:179::-;;;;;;;;;;;;;:::i;6247:201::-;;;;;;;;;;-1:-1:-1;6247:201:0;;;;;:::i;:::-;;:::i;28414:229::-;;;;;;;;;;-1:-1:-1;28414:229:0;;;;;:::i;:::-;;:::i;14888:86::-;;;;;;;;;;;;14932:42;14888:86;;18468:210;18571:4;4130:10;18622:32;4130:10;18638:7;18647:6;18622:8;:32::i;:::-;18668:4;18661:11;;;18468:210;;;;;:::o;25655:229::-;5227:13;:11;:13::i;:::-;25773:2:::1;25750:19;:25;;25734:97;;;::::0;-1:-1:-1;;;25734:97:0;;5118:2:1;25734:97:0::1;::::0;::::1;5100:21:1::0;5157:2;5137:18;;;5130:30;5196:34;5176:18;;;5169:62;-1:-1:-1;;;5247:18:1;;;5240:36;5293:19;;25734:97:0::1;;;;;;;;;25838:18;:40:::0;25655:229::o;27804:219::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;27904:17:::1;:38:::0;;;28003:14:::1;::::0;27963:17:::1;::::0;:37:::1;::::0;27924:18;;27963:37:::1;:::i;:::-;:54;;;;:::i;:::-;27949:11;:68:::0;-1:-1:-1;27804:219:0:o;27066:145::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27167:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:38;;-1:-1:-1;;27167:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27066:145::o;18684:263::-;18801:4;4130:10;18851:38;18867:4;4130:10;18882:6;18851:15;:38::i;:::-;18896:27;18906:4;18912:2;18916:6;18896:9;:27::i;:::-;18937:4;18930:11;;;18684:263;;;;;;:::o;29106:556::-;5227:13;:11;:13::i;:::-;29175:23:::1;29214:9:::0;29209:182:::1;29229:15:::0;;::::1;29209:182;;;29288:18;29298:4;;29303:1;29298:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;29288:18::-;29278:4;29260:24;::::0;;;:9:::1;:24;::::0;;;;:46;;:24;;;:46:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;29334:18:0::1;::::0;-1:-1:-1;29344:4:0;;29349:1;29344:7;;::::1;;;;;:::i;29334:18::-;29315:37;::::0;;::::1;:::i;:::-;;;29382:1;29361:9;:18;29371:4;;29376:1;29371:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29361:18:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29361:18:0;:22;29246:3;::::1;::::0;::::1;:::i;:::-;;;;29209:182;;;-1:-1:-1::0;29399:20:0::1;29422:19;29440:1;29422:15:::0;:19:::1;:::i;:::-;29399:42;;29448:30;29465:12;29448:16;:30::i;:::-;29485:49;29498:12;29512:21;29485:12;:49::i;:::-;29608:8;::::0;29600:56:::1;::::0;29582:12:::1;::::0;-1:-1:-1;;;;;29608:8:0::1;::::0;29630:21:::1;::::0;29582:12;29600:56;29582:12;29600:56;29630:21;29608:8;29600:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;29106:556:0:o;18953:242::-;19056:4;4130:10;19107:64;4130:10;19123:7;19160:10;19132:25;4130:10;19123:7;19132:9;:25::i;:::-;:38;;;;:::i;:::-;19107:8;:64::i;28928:93::-;5227:13;:11;:13::i;:::-;28990:6:::1;:25:::0;;-1:-1:-1;;;;;28990:25:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;28990:25:0;;::::1;::::0;;;::::1;::::0;;28928:93::o;24607:203::-;16566:6;;24678:4;;16566:6;;;-1:-1:-1;;;;;16566:6:0;16544:10;:29;16536:66;;;;-1:-1:-1;;;16536:66:0;;6896:2:1;16536:66:0;;;6878:21:1;6935:2;6915:18;;;6908:30;-1:-1:-1;;;6954:18:1;;;6947:54;7018:18;;16536:66:0;6694:348:1;16536:66:0;-1:-1:-1;;;;;24691:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;:23;;24708:6;;24691:13;:23:::1;::::0;24708:6;;24691:23:::1;:::i;:::-;;;;;;;;24736:6;24721:11;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24754:32:0::1;::::0;160:25:1;;;-1:-1:-1;;;;;24754:32:0;::::1;::::0;24771:1:::1;::::0;-1:-1:-1;;;;;;;;;;;24754:32:0;148:2:1;133:18;24754:32:0::1;;;;;;;;-1:-1:-1::0;24800:4:0::1;24607:203:::0;;;;:::o;27579:219::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;27679:17:::1;:38:::0;;;27778:14:::1;::::0;27758:17:::1;::::0;27738:37:::1;::::0;27699:18;27738:37:::1;:::i;26791:139::-:0;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26889:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26889:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26791:139::o;5989:103::-;5227:13;:11;:13::i;:::-;6054:30:::1;6081:1;6054:18;:30::i;:::-;5989:103::o:0;26520:265::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;26655:1:::1;26634:17;:22;;26618:97;;;::::0;-1:-1:-1;;;26618:97:0;;7249:2:1;26618:97:0::1;::::0;::::1;7231:21:1::0;7288:2;7268:18;;;7261:30;7327:34;7307:18;;;7300:62;-1:-1:-1;;;7378:18:1;;;7371:39;7427:19;;26618:97:0::1;7047:405:1::0;26618:97:0::1;26776:3;26755:17;26741:11;;:31;;;;:::i;:::-;26740:39;;;;:::i;:::-;26722:15;:57:::0;-1:-1:-1;26520:265:0:o;26936:124::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27020:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;27020:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26936:124::o;26131:140::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;26229:16:::1;:36:::0;;-1:-1:-1;;;;;;26229:36:0::1;-1:-1:-1::0;;;;;26229:36:0;;;::::1;::::0;;;::::1;::::0;;26131:140::o;27458:115::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;27537:13:::1;:30:::0;27458:115::o;24816:227::-;16566:6;;24904:4;;16566:6;;;-1:-1:-1;;;;;16566:6:0;16544:10;:29;16536:66;;;;-1:-1:-1;;;16536:66:0;;6896:2:1;16536:66:0;;;6878:21:1;6935:2;6915:18;;;6908:30;-1:-1:-1;;;6954:18:1;;;6947:54;7018:18;;16536:66:0;6694:348:1;16536:66:0;-1:-1:-1;;;;;24920:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25;;24939:6;;24920:15;:25:::1;::::0;24939:6;;24920:25:::1;:::i;:::-;;;;;;;;24967:6;24952:11;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24985:34:0::1;::::0;160:25:1;;;25008:1:0::1;::::0;-1:-1:-1;;;;;24985:34:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;24985:34:0;148:2:1;133:18;24985:34:0::1;14:177:1::0;28029:194:0;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;28110:14:::1;:32:::0;;;28183:17:::1;::::0;28163::::1;::::0;28127:15;;28163:37:::1;::::0;::::1;:::i;19201:443::-:0;19309:4;4130:10;19309:4;19387:25;4130:10;19404:7;19387:9;:25::i;:::-;19360:52;;19455:15;19435:16;:35;;19419:106;;;;-1:-1:-1;;;19419:106:0;;7965:2:1;19419:106:0;;;7947:21:1;8004:2;7984:18;;;7977:30;8043:34;8023:18;;;8016:62;-1:-1:-1;;;8094:18:1;;;8087:35;8139:19;;19419:106:0;7763:401:1;19419:106:0;19551:60;19560:5;19567:7;19595:15;19576:16;:34;19551:8;:60::i;:::-;-1:-1:-1;19634:4:0;;19201:443;-1:-1:-1;;;;19201:443:0:o;18032:202::-;18131:4;4130:10;18182:28;4130:10;18199:2;18203:6;18182:9;:28::i;27217:113::-;5227:13;:11;:13::i;:::-;27292:14:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;27292:32:0;;::::1;::::0;;;::::1;::::0;;27217:113::o;25890:235::-;5227:13;:11;:13::i;:::-;26011:2:::1;25987:20;:26;;25971:99;;;::::0;-1:-1:-1;;;25971:99:0;;8371:2:1;25971:99:0::1;::::0;::::1;8353:21:1::0;8410:2;8390:18;;;8383:30;8449:34;8429:18;;;8422:62;-1:-1:-1;;;8500:18:1;;;8493:37;8547:19;;25971:99:0::1;8169:403:1::0;25971:99:0::1;26077:19;:42:::0;25890:235::o;27336:116::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;27414:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27414:32:0;;::::1;::::0;;;::::1;::::0;;27336:116::o;26277:237::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;26387:1:::1;26370:13;:18;;26354:98;;;::::0;-1:-1:-1;;;26354:98:0;;8779:2:1;26354:98:0::1;::::0;::::1;8761:21:1::0;8818:2;8798:18;;;8791:30;8857:34;8837:18;;;8830:62;-1:-1:-1;;;8908:18:1;;;8901:44;8962:19;;26354:98:0::1;8577:410:1::0;26354:98:0::1;26505:3;26488:13;26474:11;;:27;;;;:::i;:::-;26473:35;;;;:::i;:::-;26459:11;:49:::0;-1:-1:-1;26277:237:0:o;18289:173::-;-1:-1:-1;;;;;18429:18:0;;;18403:7;18429:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18289:173::o;28229:179::-;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;28308:8:::1;::::0;28300:56:::1;::::0;28282:12:::1;::::0;-1:-1:-1;;;;;28308:8:0::1;::::0;28330:21:::1;::::0;28282:12;28300:56;28282:12;28300:56;28330:21;28308:8;28300:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28281:75;;;28371:7;28363:39;;;::::0;-1:-1:-1;;;28363:39:0;;9194:2:1;28363:39:0::1;::::0;::::1;9176:21:1::0;9233:2;9213:18;;;9206:30;-1:-1:-1;;;9252:18:1;;;9245:49;9311:18;;28363:39:0::1;8992:343:1::0;28363:39:0::1;28274:134;28229:179::o:0;6247:201::-;5227:13;:11;:13::i;:::-;-1:-1:-1;;;;;6336:22:0;::::1;6328:73;;;::::0;-1:-1:-1;;;6328:73:0;;9542:2:1;6328:73:0::1;::::0;::::1;9524:21:1::0;9581:2;9561:18;;;9554:30;9620:34;9600:18;;;9593:62;-1:-1:-1;;;9671:18:1;;;9664:36;9717:19;;6328:73:0::1;9340:402:1::0;6328:73:0::1;6412:28;6431:8;6412:18;:28::i;28414:229::-:0;16400:8;;-1:-1:-1;;;;;16400:8:0;16386:10;:22;;:47;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;16412:10;:21;16386:47;16370:117;;;;-1:-1:-1;;;16370:117:0;;;;;;;:::i;:::-;28548:8:::1;::::0;28558:30:::1;::::0;-1:-1:-1;;;28558:30:0;;28582:4:::1;28558:30;::::0;::::1;1752:51:1::0;28504:6:0;;28482:12:::1;::::0;-1:-1:-1;;;;;28533:14:0;;::::1;::::0;::::1;::::0;28548:8;::::1;::::0;28533:14;;28558:15:::1;::::0;1725:18:1;;28558:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28533:56;::::0;-1:-1:-1;;;;;;28533:56:0::1;::::0;;;;;;-1:-1:-1;;;;;10128:32:1;;;28533:56:0::1;::::0;::::1;10110:51:1::0;10177:18;;;10170:34;10083:18;;28533:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28518:71;;28604:7;28596:41;;;::::0;-1:-1:-1;;;28596:41:0;;10667:2:1;28596:41:0::1;::::0;::::1;10649:21:1::0;10706:2;10686:18;;;10679:30;-1:-1:-1;;;10725:18:1;;;10718:51;10786:18;;28596:41:0::1;10465:345:1::0;28596:41:0::1;28475:168;;28414:229:::0;:::o;23848:348::-;-1:-1:-1;;;;;23966:19:0;;23958:68;;;;-1:-1:-1;;;23958:68:0;;11017:2:1;23958:68:0;;;10999:21:1;11056:2;11036:18;;;11029:30;11095:34;11075:18;;;11068:62;-1:-1:-1;;;11146:18:1;;;11139:34;11190:19;;23958:68:0;10815:400:1;23958:68:0;-1:-1:-1;;;;;24041:21:0;;24033:68;;;;-1:-1:-1;;;24033:68:0;;11422:2:1;24033:68:0;;;11404:21:1;11461:2;11441:18;;;11434:30;11500:34;11480:18;;;11473:62;-1:-1:-1;;;11551:18:1;;;11544:32;11593:19;;24033:68:0;11220:398:1;24033:68:0;-1:-1:-1;;;;;24110:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24158:32;;160:25:1;;;24158:32:0;;133:18:1;24158:32:0;;;;;;;23848:348;;;:::o;5506:132::-;5387:7;5414:6;-1:-1:-1;;;;;5414:6:0;4130:10;5570:23;5562:68;;;;-1:-1:-1;;;5562:68:0;;11825:2:1;5562:68:0;;;11807:21:1;;;11844:18;;;11837:30;11903:34;11883:18;;;11876:62;11955:18;;5562:68:0;11623:356:1;24202:399:0;24319:24;24346:25;24356:5;24363:7;24346:9;:25::i;:::-;24319:52;;-1:-1:-1;;24382:16:0;:37;24378:218;;24458:6;24438:16;:26;;24430:68;;;;-1:-1:-1;;;24430:68:0;;12186:2:1;24430:68:0;;;12168:21:1;12225:2;12205:18;;;12198:30;12264:31;12244:18;;;12237:59;12313:18;;24430:68:0;11984:353:1;24430:68:0;24528:51;24537:5;24544:7;24572:6;24553:16;:25;24528:8;:51::i;:::-;24312:289;24202:399;;;:::o;19650:1497::-;-1:-1:-1;;;;;19763:18:0;;19755:68;;;;-1:-1:-1;;;19755:68:0;;12544:2:1;19755:68:0;;;12526:21:1;12583:2;12563:18;;;12556:30;12622:34;12602:18;;;12595:62;-1:-1:-1;;;12673:18:1;;;12666:35;12718:19;;19755:68:0;12342:401:1;19755:68:0;-1:-1:-1;;;;;19838:16:0;;19830:64;;;;-1:-1:-1;;;19830:64:0;;12950:2:1;19830:64:0;;;12932:21:1;12989:2;12969:18;;;12962:30;13028:34;13008:18;;;13001:62;-1:-1:-1;;;13079:18:1;;;13072:33;13122:19;;19830:64:0;12748:399:1;19830:64:0;-1:-1:-1;;;;;19917:15:0;;;;;;:9;:15;;;;;;:25;-1:-1:-1;19917:25:0;19901:97;;;;-1:-1:-1;;;19901:97:0;;13354:2:1;19901:97:0;;;13336:21:1;13393:2;13373:18;;;13366:30;13432:34;13412:18;;;13405:62;-1:-1:-1;;;13483:18:1;;;13476:36;13529:19;;19901:97:0;13152:402:1;19901:97:0;20062:8;;20007:17;;-1:-1:-1;;;;;20062:8:0;20049:9;:21;;;;:52;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;5414:6:0;20081:9;:20;;20049:52;:78;;;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;20112:15:0;;;5414:6;;20112:15;;20049:78;:102;;;;-1:-1:-1;5387:7:0;5414:6;-1:-1:-1;;;;;20138:13:0;;;5414:6;;20138:13;;20049:102;:136;;;;-1:-1:-1;20178:6:0;;-1:-1:-1;;;;;20162:23:0;;;20178:6;;;;;20162:23;;20049:136;:168;;;;-1:-1:-1;20210:6:0;;-1:-1:-1;;;;;20196:21:0;;;20210:6;;;;;20196:21;;20049:168;20037:862;;;-1:-1:-1;;;;;20239:23:0;;;;;;:17;:23;;;;;;;;20238:24;:50;;;;-1:-1:-1;;;;;;20267:21:0;;;;;;:17;:21;;;;;;;;20266:22;20238:50;20234:142;;;20319:11;;20309:6;:21;;20301:65;;;;-1:-1:-1;;;20301:65:0;;13761:2:1;20301:65:0;;;13743:21:1;13800:2;13780:18;;;13773:30;13839:33;13819:18;;;13812:61;13890:18;;20301:65:0;13559:355:1;20301:65:0;-1:-1:-1;;;;;20391:25:0;;;;;;:21;:25;;;;;;;;20386:166;;20475:15;;20465:6;20449:13;20459:2;-1:-1:-1;;;;;18002:18:0;17976:7;18002:18;;;:9;:18;;;;;;;17877:149;20449:13;:22;;;;:::i;:::-;:41;;20429:113;;;;-1:-1:-1;;;20429:113:0;;14121:2:1;20429:113:0;;;14103:21:1;14160:2;14140:18;;;14133:30;14199:28;14179:18;;;14172:56;14245:18;;20429:113:0;13919:350:1;20429:113:0;20566:15;20572:4;20578:2;20566:5;:15::i;:::-;:37;;;;20586:16;20593:4;20599:2;20586:6;:16::i;:::-;20562:330;;;20624:14;;;;;;;20616:53;;;;-1:-1:-1;;;20616:53:0;;14476:2:1;20616:53:0;;;14458:21:1;14515:2;14495:18;;;14488:30;14554:28;14534:18;;;14527:56;14600:18;;20616:53:0;14274:350:1;20616:53:0;20686:23;20700:4;20706:2;20686:13;:23::i;:::-;20682:96;;;20736:30;20749:4;20755:2;20759:6;20736:12;:30::i;:::-;20724:42;;20682:96;20794:21;;;;;;;:32;;;;-1:-1:-1;20820:6:0;;;;20819:7;20794:32;:52;;;;;20830:16;20837:4;20843:2;20830:6;:16::i;:::-;20790:93;;;20861:10;:8;:10::i;:::-;-1:-1:-1;;;;;20907:15:0;;;;;;:9;:15;;;;;:25;;20926:6;;20907:15;:25;;20926:6;;20907:25;:::i;:::-;;;;-1:-1:-1;20956:18:0;;-1:-1:-1;20965:9:0;20956:6;:18;:::i;:::-;-1:-1:-1;;;;;20939:13:0;;;;;;:9;:13;;;;;:35;;:13;;;:35;;;;;:::i;:::-;;;;-1:-1:-1;;20999:4:0;20981:24;;;;:9;:24;;;;;:37;;21009:9;;20981:24;:37;;21009:9;;20981:37;:::i;:::-;;;;-1:-1:-1;;;;;;;21032:38:0;;;;;;-1:-1:-1;;;;;;;;;;;21051:18:0;21060:9;21051:6;:18;:::i;:::-;21032:38;;160:25:1;;;148:2;133:18;21032:38:0;;;;;;;21081:13;;21077:64;;21101:40;;160:25:1;;;21124:4:0;;-1:-1:-1;;;;;21101:40:0;;;-1:-1:-1;;;;;;;;;;;21101:40:0;148:2:1;133:18;21101:40:0;;;;;;;19748:1399;19650:1497;;;:::o;23191:349::-;23278:16;;;23292:1;23278:16;;;;;;;;23254:21;;23278:16;;;;;;;;;;-1:-1:-1;23278:16:0;23254:40;;23319:4;23301;23306:1;23301:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23301:23:0;;;:7;;;;;;;;;;:23;;;;23341:15;;:22;;;-1:-1:-1;;;23341:22:0;;;;:15;;;;;:20;;:22;;;;;23301:7;;23341:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23331:4;23336:1;23331:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23331:32:0;;;:7;;;;;;;;;:32;23372:15;;:162;;-1:-1:-1;;;23372:162:0;;:15;;;:66;;:162;;23447:11;;23372:15;;23477:4;;23498;;23512:15;;23372:162;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23247:293;23191:349;:::o;23546:296::-;23623:15;;23797:8;;23623:213;;-1:-1:-1;;;23623:213:0;;23689:4;23623:213;;;16343:34:1;16393:18;;;16386:34;;;23623:15:0;16436:18:1;;;16429:34;;;16479:18;;;16472:34;-1:-1:-1;;;;;23797:8:0;;;16522:19:1;;;16515:44;23814:15:0;16575:19:1;;;16568:35;23623:15:0;;;:31;;23662:9;;16277:19:1;;23623:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23546:296;;:::o;6608:191::-;6682:16;6701:6;;-1:-1:-1;;;;;6718:17:0;;;-1:-1:-1;;;;;;6718:17:0;;;;;;6751:40;;6701:6;;;;;;;6751:40;;6682:16;6751:40;6671:128;6608:191;:::o;28649:133::-;28740:13;;28712:4;;-1:-1:-1;;;;;28732:21:0;;;28740:13;;28732:21;:44;;;;-1:-1:-1;;28763:13:0;;-1:-1:-1;;;;;28763:13:0;;;28757:19;;;;;28725:51;-1:-1:-1;28649:133:0:o;28788:134::-;28880:13;;28852:4;;-1:-1:-1;;;;;28872:21:0;;;28880:13;;28872:21;;;;:44;;-1:-1:-1;;28903:13:0;;-1:-1:-1;;;;;28903:13:0;;;28897:19;;;;28788:134;-1:-1:-1;28788:134:0:o;25049:149::-;-1:-1:-1;;;;;25141:24:0;;25120:4;25141:24;;;:18;:24;;;;;;;;25140:25;:52;;;;-1:-1:-1;;;;;;;25170:22:0;;;;;:18;:22;;;;;;;;25169:23;;25049:149;-1:-1:-1;25049:149:0:o;25204:445::-;25310:11;25365:16;25372:4;25378:2;25365:6;:16::i;:::-;25346:35;;:15;25352:4;25358:2;25346:5;:15::i;:::-;:35;;;25330:123;;;;-1:-1:-1;;;25330:123:0;;17127:2:1;25330:123:0;;;17109:21:1;17166:2;17146:18;;;17139:30;17205:34;17185:18;;;17178:62;-1:-1:-1;;;17256:18:1;;;17249:52;17318:19;;25330:123:0;16925:418:1;25330:123:0;-1:-1:-1;25468:1:0;25482:15;25488:4;25494:2;25482:5;:15::i;:::-;25478:166;;;25546:3;25524:18;;25515:6;:27;;;;:::i;:::-;25514:35;;;;:::i;:::-;25508:41;;25478:166;;;25567:16;25574:4;25580:2;25567:6;:16::i;:::-;25563:81;;;25633:3;25610:19;;25601:6;:28;;;;:::i;:::-;25600:36;;;;:::i;:::-;25594:42;25204:445;-1:-1:-1;;;;25204:445:0:o;21153:1694::-;9057:21;:19;:21::i;:::-;21250:4:::1;21201:28;18002:18:::0;;;:9;:18;;;;;;21293:13:::1;::::0;21269:37;::::1;21265:1577;;21317:29;21332:13;;21317:14;:29::i;:::-;21384:21;21355:26;21461:23:::0;;21457:1378:::1;;21509:6;::::0;;;::::1;-1:-1:-1::0;;;;;21509:6:0::1;21501:29:::0;21497:805:::1;;21545:22;21570:6;;;;;;;;;-1:-1:-1::0;;;;;21570:6:0::1;-1:-1:-1::0;;;;;21570:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21545:51;;21719:14;;21699:17;;:34;;;;:::i;:::-;21667:14;::::0;21646:35:::1;::::0;:18;:35:::1;:::i;:::-;21645:89;;;;:::i;:::-;21609:125:::0;-1:-1:-1;21753:25:0;;21749:542:::1;;21953:13;21980:14;-1:-1:-1::0;;;;;21972:28:0::1;22024:20;21972:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21952:111;;;22125:14;-1:-1:-1::0;;;;;22083:108:0::1;;22156:20;22083:108;;;;160:25:1::0;;148:2;133:18;;14:177;22083:108:0::1;;;;;;;;22211:8;22206:72;;22261:1;22238:24;;22206:72;21780:511;21749:542;21532:770;21497:805;22532:23;22558:41;22579:20:::0;22558:18;:41:::1;:::i;:::-;22532:67:::0;-1:-1:-1;22614:20:0;;22610:216:::1;;22676:16;::::0;22668:84:::1;::::0;22650:12:::1;::::0;-1:-1:-1;;;;;22676:16:0::1;::::0;22720:15;;22650:12;22668:84;22650:12;22668:84;22720:15;22676:16;22668:84:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22649:103;;;22773:7;22765:49;;;::::0;-1:-1:-1;;;22765:49:0;;17550:2:1;22765:49:0::1;::::0;::::1;17532:21:1::0;17589:2;17569:18;;;17562:30;17628:31;17608:18;;;17601:59;17677:18;;22765:49:0::1;17348:353:1::0;22765:49:0::1;22636:190;22610:216;21486:1349;21457:1378;21308:1534;;21265:1577;21194:1653;9101:20:::0;8495:1;9621:22;;9438:213;9137:293;8539:1;9271:7;;:19;9263:63;;;;-1:-1:-1;;;9263:63:0;;17908:2:1;9263:63:0;;;17890:21:1;17947:2;17927:18;;;17920:30;17986:33;17966:18;;;17959:61;18037:18;;9263:63:0;17706:355:1;9263:63:0;8539:1;9404:7;:18;9137:293::o;22853:332::-;16652:6;:13;;-1:-1:-1;;16652:13:0;16661:4;16652:13;;;22998:11:::1;::::0;22970:17:::1;::::0;16652:6;;23013:1:::1;::::0;22956:31:::1;::::0;:11;:31:::1;:::i;:::-;22955:54;;;;:::i;:::-;22954:60;;;;:::i;:::-;22925:89:::0;-1:-1:-1;23021:20:0::1;23044:32;22925:89:::0;23044:11;:32:::1;:::i;:::-;23021:55;;23085:30;23102:12;23085:16;:30::i;:::-;23124:55;23137:18;23157:21;23124:12;:55::i;:::-;-1:-1:-1::0;;16680:6:0;:14;;-1:-1:-1;;16680:14:0;;;-1:-1:-1;22853:332:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1814:118::-;1900:5;1893:13;1886:21;1879:5;1876:32;1866:60;;1922:1;1919;1912:12;1937:382;2002:6;2010;2063:2;2051:9;2042:7;2038:23;2034:32;2031:52;;;2079:1;2076;2069:12;2031:52;2118:9;2105:23;2137:31;2162:5;2137:31;:::i;:::-;2187:5;-1:-1:-1;2244:2:1;2229:18;;2216:32;2257:30;2216:32;2257:30;:::i;:::-;2306:7;2296:17;;;1937:382;;;;;:::o;2324:456::-;2401:6;2409;2417;2470:2;2458:9;2449:7;2445:23;2441:32;2438:52;;;2486:1;2483;2476:12;2438:52;2525:9;2512:23;2544:31;2569:5;2544:31;:::i;:::-;2594:5;-1:-1:-1;2651:2:1;2636:18;;2623:32;2664:33;2623:32;2664:33;:::i;:::-;2324:456;;2716:7;;-1:-1:-1;;;2770:2:1;2755:18;;;;2742:32;;2324:456::o;2974:615::-;3060:6;3068;3121:2;3109:9;3100:7;3096:23;3092:32;3089:52;;;3137:1;3134;3127:12;3089:52;3177:9;3164:23;3206:18;3247:2;3239:6;3236:14;3233:34;;;3263:1;3260;3253:12;3233:34;3301:6;3290:9;3286:22;3276:32;;3346:7;3339:4;3335:2;3331:13;3327:27;3317:55;;3368:1;3365;3358:12;3317:55;3408:2;3395:16;3434:2;3426:6;3423:14;3420:34;;;3450:1;3447;3440:12;3420:34;3503:7;3498:2;3488:6;3485:1;3481:14;3477:2;3473:23;3469:32;3466:45;3463:65;;;3524:1;3521;3514:12;3463:65;3555:2;3547:11;;;;;3577:6;;-1:-1:-1;2974:615:1;;-1:-1:-1;;;;2974:615:1:o;3594:247::-;3653:6;3706:2;3694:9;3685:7;3681:23;3677:32;3674:52;;;3722:1;3719;3712:12;3674:52;3761:9;3748:23;3780:31;3805:5;3780:31;:::i;4277:241::-;4333:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:52;;;4402:1;4399;4392:12;4354:52;4441:9;4428:23;4460:28;4482:5;4460:28;:::i;4523:388::-;4591:6;4599;4652:2;4640:9;4631:7;4627:23;4623:32;4620:52;;;4668:1;4665;4658:12;4620:52;4707:9;4694:23;4726:31;4751:5;4726:31;:::i;:::-;4776:5;-1:-1:-1;4833:2:1;4818:18;;4805:32;4846:33;4805:32;4846:33;:::i;5323:400::-;5525:2;5507:21;;;5564:2;5544:18;;;5537:30;5603:34;5598:2;5583:18;;5576:62;-1:-1:-1;;;5669:2:1;5654:18;;5647:34;5713:3;5698:19;;5323:400::o;5728:127::-;5789:10;5784:3;5780:20;5777:1;5770:31;5820:4;5817:1;5810:15;5844:4;5841:1;5834:15;5860:125;5925:9;;;5946:10;;;5943:36;;;5959:18;;:::i;5990:127::-;6051:10;6046:3;6042:20;6039:1;6032:31;6082:4;6079:1;6072:15;6106:4;6103:1;6096:15;6122:135;6161:3;6182:17;;;6179:43;;6202:18;;:::i;:::-;-1:-1:-1;6249:1:1;6238:13;;6122:135::o;6262:217::-;6302:1;6328;6318:132;;6372:10;6367:3;6363:20;6360:1;6353:31;6407:4;6404:1;6397:15;6435:4;6432:1;6425:15;6318:132;-1:-1:-1;6464:9:1;;6262:217::o;7457:168::-;7497:7;7563:1;7559;7555:6;7551:14;7548:1;7545:21;7540:1;7533:9;7526:17;7522:45;7519:71;;;7570:18;;:::i;:::-;-1:-1:-1;7610:9:1;;7457:168::o;7630:128::-;7697:9;;;7718:11;;;7715:37;;;7732:18;;:::i;9747:184::-;9817:6;9870:2;9858:9;9849:7;9845:23;9841:32;9838:52;;;9886:1;9883;9876:12;9838:52;-1:-1:-1;9909:16:1;;9747:184;-1:-1:-1;9747:184:1:o;10215:245::-;10282:6;10335:2;10323:9;10314:7;10310:23;10306:32;10303:52;;;10351:1;10348;10341:12;10303:52;10383:9;10377:16;10402:28;10424:5;10402:28;:::i;14761:251::-;14831:6;14884:2;14872:9;14863:7;14859:23;14855:32;14852:52;;;14900:1;14897;14890:12;14852:52;14932:9;14926:16;14951:31;14976:5;14951:31;:::i;15017:980::-;15279:4;15327:3;15316:9;15312:19;15358:6;15347:9;15340:25;15384:2;15422:6;15417:2;15406:9;15402:18;15395:34;15465:3;15460:2;15449:9;15445:18;15438:31;15489:6;15524;15518:13;15555:6;15547;15540:22;15593:3;15582:9;15578:19;15571:26;;15632:2;15624:6;15620:15;15606:29;;15653:1;15663:195;15677:6;15674:1;15671:13;15663:195;;;15742:13;;-1:-1:-1;;;;;15738:39:1;15726:52;;15833:15;;;;15798:12;;;;15774:1;15692:9;15663:195;;;-1:-1:-1;;;;;;;15914:32:1;;;;15909:2;15894:18;;15887:60;-1:-1:-1;;;15978:3:1;15963:19;15956:35;15875:3;15017:980;-1:-1:-1;;;15017:980:1:o;16614:306::-;16702:6;16710;16718;16771:2;16759:9;16750:7;16746:23;16742:32;16739:52;;;16787:1;16784;16777:12;16739:52;16816:9;16810:16;16800:26;;16866:2;16855:9;16851:18;16845:25;16835:35;;16910:2;16899:9;16895:18;16889:25;16879:35;;16614:306;;;;;:::o

Swarm Source

ipfs://9a83a223bad363f75d9db5cf54b3557e90f4db4c21893b9cda4bcb826c332118
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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