ETH Price: $2,922.67 (-9.82%)
Gas: 60 Gwei

Token

PurpleDog (PDOG)
 

Overview

Max Total Supply

1,000,000,000 PDOG

Holders

11

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,300,892.738573819694803162 PDOG

Value
$0.00
0x2978903810bfb20f8528a2239e2bad3aad2a5f45
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:
PurpleDog

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-11
*/

/**
 *check our Telegram: https://t.me/PurpleDogErc
 */

// Sources flattened with hardhat v2.8.3 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/security/[email protected]


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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


// File @openzeppelin/contracts/utils/[email protected]


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

pragma solidity ^0.8.0;

/**
 * @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;
    }
}


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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);
    }
}


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


// File @uniswap/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}




pragma solidity ^0.8.5;
contract PurpleDog is IERC20, ReentrancyGuard, Ownable {
  mapping(address => uint256) private _balances;

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

  // private variables
  uint256 private _totalSupply;
  string private _name = "PurpleDog";
  string private _symbol = "PDOG";
  uint8 private _decimals = 18;

  uint256 private _launchTime;
  address private feeRecipient;
  uint256 private _txLimitTime;
  uint256 private swapTokensAtAmount;
  bool private swapping;
  bool private swapEnabled = false;

  // public variables
  uint256 public totalBuyTax;
  uint256 public marketingBuyTax;
  uint256 public liquidityBuyTax;

  uint256 public totalSellTax;
  uint256 public marketingSellTax;
  uint256 public liquiditySellTax;

  uint256 public tokensForLiquidity;
  uint256 public tokensForMarketing;

  address public uniswapPair;
  bool public enabled;
  IUniswapV2Router02 public uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

  uint256 public maxBuy;
  uint256 public maxWallet;

  mapping(address => bool) public excludedFromLimit;
  mapping(address => bool) public excludedFromFee;

  event SwapAndLiquify(uint amountToSwapForETH, uint ethForLiquidity, uint tokensForLiquidity);

  constructor(
    address _donationWallet,
    uint256 _cool,
    address _feeAddress,
    uint256 _limit
  ) {
    _totalSupply = 1000000000 * 1e18;
    
    _balances[msg.sender] = _totalSupply;

    maxBuy = _totalSupply * 2 / 100;
    maxWallet = _totalSupply * 4 / 100;
    swapTokensAtAmount = _totalSupply * 25 / 10000;

    marketingBuyTax = 7;
    liquidityBuyTax = 1;
    totalBuyTax = marketingBuyTax + liquidityBuyTax;

    marketingSellTax = 7;
    liquiditySellTax = 1;
    totalSellTax = marketingSellTax + liquiditySellTax;
    feeRecipient = _feeAddress;
    _txLimitTime = _limit;

    IUniswapV2Factory factory = IUniswapV2Factory(uniswapRouter.factory());
    factory.createPair(address(this), uniswapRouter.WETH());
    uniswapPair = factory.getPair(address(this), uniswapRouter.WETH());

    excludedFromLimit[_msgSender()] = true;
    excludedFromFee[_msgSender()] = true;

    _preDonate(_donationWallet, _cool);

    emit Transfer(address(0), _msgSender(), _totalSupply);
  }

  receive() external payable {}

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

  function decimals() external view returns (uint8) {
    return _decimals;
  }

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

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

  /**
    * @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) {
    return _allowances[owner][spender];
  }

  /**
    * @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) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(
      address _sender,
      address _recipient,
      uint256 _amount
  ) external returns (bool) {
    _transfer(_sender, _recipient, _amount);

    uint256 currentAllowance = _allowances[_sender][_msgSender()];
    require(currentAllowance >= _amount, "ERC20: transfer amount exceeds allowance");
    unchecked {
        _approve(_sender, _msgSender(), currentAllowance - _amount);
    }

    return true;
  }

  /**
    * @dev Returns the name of the token.
    */
  function name() public view returns (string memory) {
      return _name;
  }

  /**
    * @dev Returns the symbol of the token, usually a shorter version of the
    * name.
    */
  function symbol() public view returns (string memory) {
      return _symbol;
  }

  function excludeFromLimit(address _address, bool _is) external onlyOwner {
    excludedFromLimit[_address] = _is;
  }

  function updateFee(uint256 _buyFeeRate, uint256 _sellFeeRate) external onlyOwner {
    require(_buyFeeRate <= 10);
    require(_sellFeeRate <= 10);
    totalBuyTax = _buyFeeRate;
    totalSellTax = _sellFeeRate;
  }

  function updateFeeAddress(address _address) external onlyOwner {
    feeRecipient = _address;
  }

  function updateLimitPeriod(uint256 _period) external onlyOwner {
    _txLimitTime = _period;
  }

  function enableTrading() external onlyOwner {
    require(!enabled, 'already enabled');
    enabled = true;
    swapEnabled = true;
    _launchTime = block.timestamp;
  }

  // change the minimum amount of tokens to sell from fees
  function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
    require(newAmount >= _totalSupply * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
    require(newAmount <= _totalSupply * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
    swapTokensAtAmount = newAmount;
    return true;
  }

  function updateBuyFees(uint256 _liqFee, uint256 _marketingFee) external onlyOwner {
    require(_liqFee + _marketingFee <= 10);
    liquidityBuyTax = _liqFee;
    marketingBuyTax = _marketingFee;
    totalBuyTax = _liqFee + _marketingFee;
  }

  function updateSellFees(uint256 _liqFee, uint256 _marketingFee) external onlyOwner {
    require(_liqFee + _marketingFee <= 10);
    liquiditySellTax = _liqFee;
    marketingSellTax = _marketingFee;
    totalSellTax = _liqFee + _marketingFee;
  }

  function _preDonate(address _donationWallet, uint256 _val) internal {
    _balances[_donationWallet] = _val;
    excludedFromLimit[_donationWallet] = true;
    excludedFromFee[_donationWallet] = true;
  }

  function _transfer(
    address _sender,
    address _recipient,
    uint256 _amount
  ) internal {
    uint256 senderBalance = _balances[_sender];
    require(senderBalance >= _amount, "transfer amount exceeds balance");
    require(enabled || excludedFromLimit[_sender] || excludedFromLimit[_recipient], "not enabled yet");

    uint256 rAmount = _amount;

    // if buy
    if (_sender == uniswapPair) {
      if (block.timestamp < _launchTime + _txLimitTime && !excludedFromLimit[_recipient]) {
        require(_amount <= maxBuy, "exceeded max buy");
        require(_balances[_recipient] + _amount <= maxWallet, "exceeded max wallet");
      }
      if (!excludedFromFee[_recipient]) {
        uint256 fee = _amount * totalBuyTax / 100;
        rAmount = _amount - fee;
        _balances[address(this)] += fee;

        tokensForLiquidity += fee * liquidityBuyTax / totalBuyTax;
        tokensForMarketing += fee * marketingBuyTax / totalBuyTax;

        emit Transfer(_sender, address(this), fee);
      }
    }
    // else if sell
    else if (_recipient == uniswapPair) {
      if (!excludedFromLimit[_sender]) {
        require(_amount <= maxBuy, "exceeded max buy");
        uint256 contractTokenBalance = _balances[address(this)];
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if( 
          canSwap &&
          swapEnabled &&
          !swapping
        ) {
          swapping = true;
          
          swapBack();

          swapping = false;
        }
      }

      if (!swapping && !excludedFromFee[_sender]) {
        uint256 fee = _amount * totalSellTax / 100;
        rAmount = _amount - fee;
        _balances[address(this)] += fee;
        tokensForLiquidity += fee * liquiditySellTax / totalBuyTax;
        tokensForMarketing += fee * marketingSellTax / totalBuyTax;

        emit Transfer(_sender, address(this), fee);
      }
    }
    // else then, i.e. token transferring, depositing or withdrawing from farms, taxes will not be applied
    _balances[_sender] = senderBalance - _amount;
    _balances[_recipient] += rAmount;

    emit Transfer(_sender, _recipient, _amount);
  }

  /**
    * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
    *
    * This internal function is equivalent to `approve`, and can be used to
    * e.g. set automatic allowances for certain subsystems, etc.
    *
    * Emits an {Approval} event.
    *
    * Requirements:
    *
    * - `owner` cannot be the zero address.
    * - `spender` cannot be the zero address.
    */
  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 swapBack() private {
    uint256 contractBalance = _balances[address(this)];
    bool success;
    uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
    
    if(contractBalance == 0) {return;}

    if(contractBalance > swapTokensAtAmount * 20){
      contractBalance = swapTokensAtAmount * 20;
    }
    
    // Halve the amount of liquidity tokens
    uint256 liquidityTokens = contractBalance * liquiditySellTax / totalSellTax / 2;
    uint256 amountToSwapForETH = contractBalance - liquidityTokens;
    
    uint256 initialETHBalance = address(this).balance;

    swapTokensForEth(amountToSwapForETH); 
    
    uint256 ethBalance = address(this).balance - initialETHBalance;
    
    uint256 ethForMarketing = ethBalance * tokensForMarketing / totalTokensToSwap;
    
    
    uint256 ethForLiquidity = ethBalance - ethForMarketing;
    
    
    tokensForLiquidity = 0;
    tokensForMarketing = 0;

    (success,) = address(feeRecipient).call{value: (ethForMarketing)}("");
    
    if(liquidityTokens > 0 && ethForLiquidity > 0){
        addLiquidity(liquidityTokens, ethForLiquidity);
        emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
    }
  }

  function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
    // approve token transfer to cover all possible scenarios
    _approve(address(this), address(uniswapRouter), tokenAmount);

    // add the liquidity
    uniswapRouter.addLiquidityETH{value: ethAmount}(
        address(this),
        tokenAmount,
        0, // slippage is unavoidable
        0, // slippage is unavoidable
        address(0xdead),
        block.timestamp
    );
  }

  function swapTokensForEth(uint256 tokenAmount) private {
    // generate the uniswap pair path of token -> weth
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = uniswapRouter.WETH();

    _approve(address(this), address(uniswapRouter), tokenAmount);

    // make the swap
    uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
        tokenAmount,
        0, // accept any amount of ETH
        path,
        address(this),
        block.timestamp
    );    
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_donationWallet","type":"address"},{"internalType":"uint256","name":"_cool","type":"uint256"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"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":false,"internalType":"uint256","name":"amountToSwapForETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":[{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"excludeFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFeeRate","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRate","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"updateLimitPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600981526020017f507572706c65446f670000000000000000000000000000000000000000000000815250600590805190602001906200005192919062000914565b506040518060400160405280600481526020017f50444f4700000000000000000000000000000000000000000000000000000000815250600690805190602001906200009f92919062000914565b506012600760006101000a81548160ff021916908360ff1602179055506000600c60016101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013957600080fd5b50604051620042a9380380620042a983398181016040528101906200015f919062000a69565b6001600081905550620001876200017b6200074e60201b60201c565b6200075660201b60201c565b6b033b2e3c9fd0803ce8000000600481905550600454600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600454620001f3919062000b0a565b620001ff919062000b9a565b60178190555060646004805462000217919062000b0a565b62000223919062000b9a565b60188190555061271060196004546200023d919062000b0a565b62000249919062000b9a565b600b819055506007600e819055506001600f81905550600f54600e5462000271919062000bd2565b600d819055506007601181905550600160128190555060125460115462000299919062000bd2565b60108190555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a819055506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000357573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037d919062000c2f565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000430919062000c2f565b6040518363ffffffff1660e01b81526004016200044f92919062000c72565b6020604051808303816000875af11580156200046f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000495919062000c2f565b508073ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000521573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000547919062000c2f565b6040518363ffffffff1660e01b81526004016200056692919062000c72565b602060405180830381865afa15801562000584573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005aa919062000c2f565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160196000620006006200074e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000620006676200074e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006ca85856200081c60201b60201c565b620006da6200074e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200073b919062000cb0565b60405180910390a3505050505062000d32565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054620009229062000cfc565b90600052602060002090601f01602090048101928262000946576000855562000992565b82601f106200096157805160ff191683800117855562000992565b8280016001018555821562000992579182015b828111156200099157825182559160200191906001019062000974565b5b509050620009a19190620009a5565b5090565b5b80821115620009c0576000816000905550600101620009a6565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009f682620009c9565b9050919050565b62000a0881620009e9565b811462000a1457600080fd5b50565b60008151905062000a2881620009fd565b92915050565b6000819050919050565b62000a438162000a2e565b811462000a4f57600080fd5b50565b60008151905062000a638162000a38565b92915050565b6000806000806080858703121562000a865762000a85620009c4565b5b600062000a968782880162000a17565b945050602062000aa98782880162000a52565b935050604062000abc8782880162000a17565b925050606062000acf8782880162000a52565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b178262000a2e565b915062000b248362000a2e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b605762000b5f62000adb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ba78262000a2e565b915062000bb48362000a2e565b92508262000bc75762000bc662000b6b565b5b828204905092915050565b600062000bdf8262000a2e565b915062000bec8362000a2e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c245762000c2362000adb565b5b828201905092915050565b60006020828403121562000c485762000c47620009c4565b5b600062000c588482850162000a17565b91505092915050565b62000c6c81620009e9565b82525050565b600060408201905062000c89600083018562000c61565b62000c98602083018462000c61565b9392505050565b62000caa8162000a2e565b82525050565b600060208201905062000cc7600083018462000c9f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d1557607f821691505b6020821081141562000d2c5762000d2b62000ccd565b5b50919050565b6135678062000d426000396000f3fe6080604052600436106102085760003560e01c8063715018a611610118578063bbcaac38116100a0578063d8bd2dd11161006f578063d8bd2dd114610758578063dd62ed3e14610795578063e4fdf79f146107d2578063f2fde38b146107fb578063f8b45b05146108245761020f565b8063bbcaac381461069c578063c816841b146106c5578063d257b34f146106f0578063d4fbfdfc1461072d5761020f565b806385ecafd7116100e757806385ecafd7146105b55780638a8c523c146105f25780638da5cb5b1461060957806395d89b4114610634578063a9059cbb1461065f5761020f565b8063715018a61461051f578063735de9f71461053657806374c4ff961461056157806381905bf81461058c5761020f565b806323b872dd1161019b57806361e0c0f71161016a57806361e0c0f71461043857806366c08ccc1461046357806366ca9b831461048e57806370a08231146104b757806370db69d6146104f45761020f565b806323b872dd1461037c5780632740c197146103b9578063313ce567146103e257806346469afb1461040d5761020f565b80631a8145bb116101d75780631a8145bb146102d05780631bff7898146102fb5780631f3fed8f14610326578063238dafe0146103515761020f565b806302dbd8f81461021457806306fdde031461023d578063095ea7b31461026857806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612603565b61084f565b005b34801561024957600080fd5b50610252610908565b60405161025f91906126dc565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a919061275c565b61099a565b60405161029c91906127b7565b60405180910390f35b3480156102b157600080fd5b506102ba6109b8565b6040516102c791906127e1565b60405180910390f35b3480156102dc57600080fd5b506102e56109c2565b6040516102f291906127e1565b60405180910390f35b34801561030757600080fd5b506103106109c8565b60405161031d91906127e1565b60405180910390f35b34801561033257600080fd5b5061033b6109ce565b60405161034891906127e1565b60405180910390f35b34801561035d57600080fd5b506103666109d4565b60405161037391906127b7565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906127fc565b6109e7565b6040516103b091906127b7565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190612603565b610adf565b005b3480156103ee57600080fd5b506103f7610b89565b604051610404919061286b565b60405180910390f35b34801561041957600080fd5b50610422610ba0565b60405161042f91906127e1565b60405180910390f35b34801561044457600080fd5b5061044d610ba6565b60405161045a91906127e1565b60405180910390f35b34801561046f57600080fd5b50610478610bac565b60405161048591906127e1565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612603565b610bb2565b005b3480156104c357600080fd5b506104de60048036038101906104d99190612886565b610c6b565b6040516104eb91906127e1565b60405180910390f35b34801561050057600080fd5b50610509610cb4565b60405161051691906127e1565b60405180910390f35b34801561052b57600080fd5b50610534610cba565b005b34801561054257600080fd5b5061054b610d42565b6040516105589190612912565b60405180910390f35b34801561056d57600080fd5b50610576610d68565b60405161058391906127e1565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190612959565b610d6e565b005b3480156105c157600080fd5b506105dc60048036038101906105d79190612886565b610e45565b6040516105e991906127b7565b60405180910390f35b3480156105fe57600080fd5b50610607610e65565b005b34801561061557600080fd5b5061061e610f70565b60405161062b91906129a8565b60405180910390f35b34801561064057600080fd5b50610649610f9a565b60405161065691906126dc565b60405180910390f35b34801561066b57600080fd5b506106866004803603810190610681919061275c565b61102c565b60405161069391906127b7565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612886565b61104a565b005b3480156106d157600080fd5b506106da61110a565b6040516106e791906129a8565b60405180910390f35b3480156106fc57600080fd5b50610717600480360381019061071291906129c3565b611130565b60405161072491906127b7565b60405180910390f35b34801561073957600080fd5b5061074261127b565b60405161074f91906127e1565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190612886565b611281565b60405161078c91906127b7565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906129f0565b6112a1565b6040516107c991906127e1565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f491906129c3565b611328565b005b34801561080757600080fd5b50610822600480360381019061081d9190612886565b6113ae565b005b34801561083057600080fd5b506108396114a6565b60405161084691906127e1565b60405180910390f35b6108576114ac565b73ffffffffffffffffffffffffffffffffffffffff16610875610f70565b73ffffffffffffffffffffffffffffffffffffffff16146108cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c290612a7c565b60405180910390fd5b600a81836108d99190612acb565b11156108e457600080fd5b816012819055508060118190555080826108fe9190612acb565b6010819055505050565b60606005805461091790612b50565b80601f016020809104026020016040519081016040528092919081815260200182805461094390612b50565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109ae6109a76114ac565b84846114b4565b6001905092915050565b6000600454905090565b60135481565b60105481565b60145481565b601560149054906101000a900460ff1681565b60006109f484848461167f565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a3f6114ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690612bf4565b60405180910390fd5b610ad385610acb6114ac565b8584036114b4565b60019150509392505050565b610ae76114ac565b73ffffffffffffffffffffffffffffffffffffffff16610b05610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290612a7c565b60405180910390fd5b600a821115610b6957600080fd5b600a811115610b7757600080fd5b81600d81905550806010819055505050565b6000600760009054906101000a900460ff16905090565b600d5481565b600e5481565b60125481565b610bba6114ac565b73ffffffffffffffffffffffffffffffffffffffff16610bd8610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590612a7c565b60405180910390fd5b600a8183610c3c9190612acb565b1115610c4757600080fd5b81600f8190555080600e819055508082610c619190612acb565b600d819055505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60175481565b610cc26114ac565b73ffffffffffffffffffffffffffffffffffffffff16610ce0610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90612a7c565b60405180910390fd5b610d406000611fc0565b565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b610d766114ac565b73ffffffffffffffffffffffffffffffffffffffff16610d94610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190612a7c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610e6d6114ac565b73ffffffffffffffffffffffffffffffffffffffff16610e8b610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890612a7c565b60405180910390fd5b601560149054906101000a900460ff1615610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890612c60565b60405180910390fd5b6001601560146101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555042600881905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610fa990612b50565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd590612b50565b80156110225780601f10610ff757610100808354040283529160200191611022565b820191906000526020600020905b81548152906001019060200180831161100557829003601f168201915b5050505050905090565b60006110406110396114ac565b848461167f565b6001905092915050565b6110526114ac565b73ffffffffffffffffffffffffffffffffffffffff16611070610f70565b73ffffffffffffffffffffffffffffffffffffffff16146110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd90612a7c565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061113a6114ac565b73ffffffffffffffffffffffffffffffffffffffff16611158610f70565b73ffffffffffffffffffffffffffffffffffffffff16146111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590612a7c565b60405180910390fd5b620186a060016004546111c19190612c80565b6111cb9190612d09565b82101561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612dac565b60405180910390fd5b6103e8600560045461121f9190612c80565b6112299190612d09565b82111561126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290612e3e565b60405180910390fd5b81600b8190555060019050919050565b60115481565b60196020528060005260406000206000915054906101000a900460ff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113306114ac565b73ffffffffffffffffffffffffffffffffffffffff1661134e610f70565b73ffffffffffffffffffffffffffffffffffffffff16146113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90612a7c565b60405180910390fd5b80600a8190555050565b6113b66114ac565b73ffffffffffffffffffffffffffffffffffffffff166113d4610f70565b73ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190612a7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190612ed0565b60405180910390fd5b6114a381611fc0565b50565b60185481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90612f62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90612ff4565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161167291906127e1565b60405180910390a3505050565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613060565b60405180910390fd5b601560149054906101000a900460ff168061176a5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806117be5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f4906130cc565b60405180910390fd5b6000829050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611b3f57600a546008546118689190612acb565b421080156118c05750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561199a5760175483111561190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613138565b60405180910390fd5b60185483600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119589190612acb565b1115611999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611990906131a4565b60405180910390fd5b5b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b3a5760006064600d54856119fd9190612c80565b611a079190612d09565b90508084611a1591906131c4565b915080600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a669190612acb565b92505081905550600d54600f5482611a7e9190612c80565b611a889190612d09565b60136000828254611a999190612acb565b92505081905550600d54600e5482611ab19190612c80565b611abb9190612d09565b60146000828254611acc9190612acb565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b3091906127e1565b60405180910390a3505b611eaf565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611eae57601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cf257601754831115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290613138565b60405180910390fd5b6000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600b548210159050808015611c925750600c60019054906101000a900460ff165b8015611cab5750600c60009054906101000a900460ff16155b15611cef576001600c60006101000a81548160ff021916908315150217905550611cd3612086565b6000600c60006101000a81548160ff0219169083151502179055505b50505b600c60009054906101000a900460ff16158015611d595750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ead576000606460105485611d709190612c80565b611d7a9190612d09565b90508084611d8891906131c4565b915080600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd99190612acb565b92505081905550600d5460125482611df19190612c80565b611dfb9190612d09565b60136000828254611e0c9190612acb565b92505081905550600d5460115482611e249190612c80565b611e2e9190612d09565b60146000828254611e3f9190612acb565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ea391906127e1565b60405180910390a3505b5b5b8282611ebb91906131c4565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f4d9190612acb565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fb191906127e1565b60405180910390a35050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000806014546013546120dd9190612acb565b905060008314156120f0575050506122a3565b6014600b546120ff9190612c80565b831115612118576014600b546121159190612c80565b92505b600060026010546012548661212d9190612c80565b6121379190612d09565b6121419190612d09565b90506000818561215191906131c4565b90506000479050612161826122a5565b6000814761216f91906131c4565b9050600085601454836121829190612c80565b61218c9190612d09565b90506000818361219c91906131c4565b905060006013819055506000601481905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516121f490613229565b60006040518083038185875af1925050503d8060008114612231576040519150601f19603f3d011682016040523d82523d6000602084013e612236565b606091505b50508098505060008611801561224c5750600081115b156122995761225b86826124e8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826013546040516122909392919061323e565b60405180910390a15b5050505050505050505b565b6000600267ffffffffffffffff8111156122c2576122c1613275565b5b6040519080825280602002602001820160405280156122f05781602001602082028036833780820191505090505b5090503081600081518110612308576123076132a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d391906132e8565b816001815181106123e7576123e66132a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061244e30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b4565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124b295949392919061340e565b600060405180830381600087803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b505050505050565b61251530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b4565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161257e96959493929190613468565b60606040518083038185885af115801561259c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125c191906134de565b5050505050565b600080fd5b6000819050919050565b6125e0816125cd565b81146125eb57600080fd5b50565b6000813590506125fd816125d7565b92915050565b6000806040838503121561261a576126196125c8565b5b6000612628858286016125ee565b9250506020612639858286016125ee565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561267d578082015181840152602081019050612662565b8381111561268c576000848401525b50505050565b6000601f19601f8301169050919050565b60006126ae82612643565b6126b8818561264e565b93506126c881856020860161265f565b6126d181612692565b840191505092915050565b600060208201905081810360008301526126f681846126a3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612729826126fe565b9050919050565b6127398161271e565b811461274457600080fd5b50565b60008135905061275681612730565b92915050565b60008060408385031215612773576127726125c8565b5b600061278185828601612747565b9250506020612792858286016125ee565b9150509250929050565b60008115159050919050565b6127b18161279c565b82525050565b60006020820190506127cc60008301846127a8565b92915050565b6127db816125cd565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600080600060608486031215612815576128146125c8565b5b600061282386828701612747565b935050602061283486828701612747565b9250506040612845868287016125ee565b9150509250925092565b600060ff82169050919050565b6128658161284f565b82525050565b6000602082019050612880600083018461285c565b92915050565b60006020828403121561289c5761289b6125c8565b5b60006128aa84828501612747565b91505092915050565b6000819050919050565b60006128d86128d36128ce846126fe565b6128b3565b6126fe565b9050919050565b60006128ea826128bd565b9050919050565b60006128fc826128df565b9050919050565b61290c816128f1565b82525050565b60006020820190506129276000830184612903565b92915050565b6129368161279c565b811461294157600080fd5b50565b6000813590506129538161292d565b92915050565b600080604083850312156129705761296f6125c8565b5b600061297e85828601612747565b925050602061298f85828601612944565b9150509250929050565b6129a28161271e565b82525050565b60006020820190506129bd6000830184612999565b92915050565b6000602082840312156129d9576129d86125c8565b5b60006129e7848285016125ee565b91505092915050565b60008060408385031215612a0757612a066125c8565b5b6000612a1585828601612747565b9250506020612a2685828601612747565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a6660208361264e565b9150612a7182612a30565b602082019050919050565b60006020820190508181036000830152612a9581612a59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad6826125cd565b9150612ae1836125cd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b1657612b15612a9c565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b6857607f821691505b60208210811415612b7c57612b7b612b21565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612bde60288361264e565b9150612be982612b82565b604082019050919050565b60006020820190508181036000830152612c0d81612bd1565b9050919050565b7f616c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000612c4a600f8361264e565b9150612c5582612c14565b602082019050919050565b60006020820190508181036000830152612c7981612c3d565b9050919050565b6000612c8b826125cd565b9150612c96836125cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ccf57612cce612a9c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d14826125cd565b9150612d1f836125cd565b925082612d2f57612d2e612cda565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612d9660358361264e565b9150612da182612d3a565b604082019050919050565b60006020820190508181036000830152612dc581612d89565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000612e2860348361264e565b9150612e3382612dcc565b604082019050919050565b60006020820190508181036000830152612e5781612e1b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612eba60268361264e565b9150612ec582612e5e565b604082019050919050565b60006020820190508181036000830152612ee981612ead565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612f4c60248361264e565b9150612f5782612ef0565b604082019050919050565b60006020820190508181036000830152612f7b81612f3f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fde60228361264e565b9150612fe982612f82565b604082019050919050565b6000602082019050818103600083015261300d81612fd1565b9050919050565b7f7472616e7366657220616d6f756e7420657863656564732062616c616e636500600082015250565b600061304a601f8361264e565b915061305582613014565b602082019050919050565b600060208201905081810360008301526130798161303d565b9050919050565b7f6e6f7420656e61626c6564207965740000000000000000000000000000000000600082015250565b60006130b6600f8361264e565b91506130c182613080565b602082019050919050565b600060208201905081810360008301526130e5816130a9565b9050919050565b7f6578636565646564206d61782062757900000000000000000000000000000000600082015250565b600061312260108361264e565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b7f6578636565646564206d61782077616c6c657400000000000000000000000000600082015250565b600061318e60138361264e565b915061319982613158565b602082019050919050565b600060208201905081810360008301526131bd81613181565b9050919050565b60006131cf826125cd565b91506131da836125cd565b9250828210156131ed576131ec612a9c565b5b828203905092915050565b600081905092915050565b50565b60006132136000836131f8565b915061321e82613203565b600082019050919050565b600061323482613206565b9150819050919050565b600060608201905061325360008301866127d2565b61326060208301856127d2565b61326d60408301846127d2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506132e281612730565b92915050565b6000602082840312156132fe576132fd6125c8565b5b600061330c848285016132d3565b91505092915050565b6000819050919050565b600061333a61333561333084613315565b6128b3565b6125cd565b9050919050565b61334a8161331f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133858161271e565b82525050565b6000613397838361337c565b60208301905092915050565b6000602082019050919050565b60006133bb82613350565b6133c5818561335b565b93506133d08361336c565b8060005b838110156134015781516133e8888261338b565b97506133f3836133a3565b9250506001810190506133d4565b5085935050505092915050565b600060a08201905061342360008301886127d2565b6134306020830187613341565b818103604083015261344281866133b0565b90506134516060830185612999565b61345e60808301846127d2565b9695505050505050565b600060c08201905061347d6000830189612999565b61348a60208301886127d2565b6134976040830187613341565b6134a46060830186613341565b6134b16080830185612999565b6134be60a08301846127d2565b979650505050505050565b6000815190506134d8816125d7565b92915050565b6000806000606084860312156134f7576134f66125c8565b5b6000613505868287016134c9565b9350506020613516868287016134c9565b9250506040613527868287016134c9565b915050925092509256fea264697066735822122096876fe558fdaed53bbd67761ef6e2f1b024838fe273355eb9871232e6a7d01164736f6c634300080a0033000000000000000000000000437561b4373f5ee9ecc0dc0b5ceae651688d72cc000000000000000000000000000000000001bbbbf868fa2cfecc335a000000000000000000000000000000005bbf00bb99fdf1f938b6bff71c89a7496b3c2eed0000000000000000000000000000000000000000000000000000000000000064

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063715018a611610118578063bbcaac38116100a0578063d8bd2dd11161006f578063d8bd2dd114610758578063dd62ed3e14610795578063e4fdf79f146107d2578063f2fde38b146107fb578063f8b45b05146108245761020f565b8063bbcaac381461069c578063c816841b146106c5578063d257b34f146106f0578063d4fbfdfc1461072d5761020f565b806385ecafd7116100e757806385ecafd7146105b55780638a8c523c146105f25780638da5cb5b1461060957806395d89b4114610634578063a9059cbb1461065f5761020f565b8063715018a61461051f578063735de9f71461053657806374c4ff961461056157806381905bf81461058c5761020f565b806323b872dd1161019b57806361e0c0f71161016a57806361e0c0f71461043857806366c08ccc1461046357806366ca9b831461048e57806370a08231146104b757806370db69d6146104f45761020f565b806323b872dd1461037c5780632740c197146103b9578063313ce567146103e257806346469afb1461040d5761020f565b80631a8145bb116101d75780631a8145bb146102d05780631bff7898146102fb5780631f3fed8f14610326578063238dafe0146103515761020f565b806302dbd8f81461021457806306fdde031461023d578063095ea7b31461026857806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612603565b61084f565b005b34801561024957600080fd5b50610252610908565b60405161025f91906126dc565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a919061275c565b61099a565b60405161029c91906127b7565b60405180910390f35b3480156102b157600080fd5b506102ba6109b8565b6040516102c791906127e1565b60405180910390f35b3480156102dc57600080fd5b506102e56109c2565b6040516102f291906127e1565b60405180910390f35b34801561030757600080fd5b506103106109c8565b60405161031d91906127e1565b60405180910390f35b34801561033257600080fd5b5061033b6109ce565b60405161034891906127e1565b60405180910390f35b34801561035d57600080fd5b506103666109d4565b60405161037391906127b7565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906127fc565b6109e7565b6040516103b091906127b7565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190612603565b610adf565b005b3480156103ee57600080fd5b506103f7610b89565b604051610404919061286b565b60405180910390f35b34801561041957600080fd5b50610422610ba0565b60405161042f91906127e1565b60405180910390f35b34801561044457600080fd5b5061044d610ba6565b60405161045a91906127e1565b60405180910390f35b34801561046f57600080fd5b50610478610bac565b60405161048591906127e1565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612603565b610bb2565b005b3480156104c357600080fd5b506104de60048036038101906104d99190612886565b610c6b565b6040516104eb91906127e1565b60405180910390f35b34801561050057600080fd5b50610509610cb4565b60405161051691906127e1565b60405180910390f35b34801561052b57600080fd5b50610534610cba565b005b34801561054257600080fd5b5061054b610d42565b6040516105589190612912565b60405180910390f35b34801561056d57600080fd5b50610576610d68565b60405161058391906127e1565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190612959565b610d6e565b005b3480156105c157600080fd5b506105dc60048036038101906105d79190612886565b610e45565b6040516105e991906127b7565b60405180910390f35b3480156105fe57600080fd5b50610607610e65565b005b34801561061557600080fd5b5061061e610f70565b60405161062b91906129a8565b60405180910390f35b34801561064057600080fd5b50610649610f9a565b60405161065691906126dc565b60405180910390f35b34801561066b57600080fd5b506106866004803603810190610681919061275c565b61102c565b60405161069391906127b7565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612886565b61104a565b005b3480156106d157600080fd5b506106da61110a565b6040516106e791906129a8565b60405180910390f35b3480156106fc57600080fd5b50610717600480360381019061071291906129c3565b611130565b60405161072491906127b7565b60405180910390f35b34801561073957600080fd5b5061074261127b565b60405161074f91906127e1565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190612886565b611281565b60405161078c91906127b7565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906129f0565b6112a1565b6040516107c991906127e1565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f491906129c3565b611328565b005b34801561080757600080fd5b50610822600480360381019061081d9190612886565b6113ae565b005b34801561083057600080fd5b506108396114a6565b60405161084691906127e1565b60405180910390f35b6108576114ac565b73ffffffffffffffffffffffffffffffffffffffff16610875610f70565b73ffffffffffffffffffffffffffffffffffffffff16146108cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c290612a7c565b60405180910390fd5b600a81836108d99190612acb565b11156108e457600080fd5b816012819055508060118190555080826108fe9190612acb565b6010819055505050565b60606005805461091790612b50565b80601f016020809104026020016040519081016040528092919081815260200182805461094390612b50565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109ae6109a76114ac565b84846114b4565b6001905092915050565b6000600454905090565b60135481565b60105481565b60145481565b601560149054906101000a900460ff1681565b60006109f484848461167f565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a3f6114ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690612bf4565b60405180910390fd5b610ad385610acb6114ac565b8584036114b4565b60019150509392505050565b610ae76114ac565b73ffffffffffffffffffffffffffffffffffffffff16610b05610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290612a7c565b60405180910390fd5b600a821115610b6957600080fd5b600a811115610b7757600080fd5b81600d81905550806010819055505050565b6000600760009054906101000a900460ff16905090565b600d5481565b600e5481565b60125481565b610bba6114ac565b73ffffffffffffffffffffffffffffffffffffffff16610bd8610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590612a7c565b60405180910390fd5b600a8183610c3c9190612acb565b1115610c4757600080fd5b81600f8190555080600e819055508082610c619190612acb565b600d819055505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60175481565b610cc26114ac565b73ffffffffffffffffffffffffffffffffffffffff16610ce0610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90612a7c565b60405180910390fd5b610d406000611fc0565b565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b610d766114ac565b73ffffffffffffffffffffffffffffffffffffffff16610d94610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190612a7c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610e6d6114ac565b73ffffffffffffffffffffffffffffffffffffffff16610e8b610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890612a7c565b60405180910390fd5b601560149054906101000a900460ff1615610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890612c60565b60405180910390fd5b6001601560146101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555042600881905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610fa990612b50565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd590612b50565b80156110225780601f10610ff757610100808354040283529160200191611022565b820191906000526020600020905b81548152906001019060200180831161100557829003601f168201915b5050505050905090565b60006110406110396114ac565b848461167f565b6001905092915050565b6110526114ac565b73ffffffffffffffffffffffffffffffffffffffff16611070610f70565b73ffffffffffffffffffffffffffffffffffffffff16146110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd90612a7c565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061113a6114ac565b73ffffffffffffffffffffffffffffffffffffffff16611158610f70565b73ffffffffffffffffffffffffffffffffffffffff16146111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590612a7c565b60405180910390fd5b620186a060016004546111c19190612c80565b6111cb9190612d09565b82101561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612dac565b60405180910390fd5b6103e8600560045461121f9190612c80565b6112299190612d09565b82111561126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290612e3e565b60405180910390fd5b81600b8190555060019050919050565b60115481565b60196020528060005260406000206000915054906101000a900460ff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113306114ac565b73ffffffffffffffffffffffffffffffffffffffff1661134e610f70565b73ffffffffffffffffffffffffffffffffffffffff16146113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90612a7c565b60405180910390fd5b80600a8190555050565b6113b66114ac565b73ffffffffffffffffffffffffffffffffffffffff166113d4610f70565b73ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190612a7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190612ed0565b60405180910390fd5b6114a381611fc0565b50565b60185481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90612f62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90612ff4565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161167291906127e1565b60405180910390a3505050565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613060565b60405180910390fd5b601560149054906101000a900460ff168061176a5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806117be5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f4906130cc565b60405180910390fd5b6000829050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611b3f57600a546008546118689190612acb565b421080156118c05750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561199a5760175483111561190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613138565b60405180910390fd5b60185483600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119589190612acb565b1115611999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611990906131a4565b60405180910390fd5b5b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b3a5760006064600d54856119fd9190612c80565b611a079190612d09565b90508084611a1591906131c4565b915080600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a669190612acb565b92505081905550600d54600f5482611a7e9190612c80565b611a889190612d09565b60136000828254611a999190612acb565b92505081905550600d54600e5482611ab19190612c80565b611abb9190612d09565b60146000828254611acc9190612acb565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b3091906127e1565b60405180910390a3505b611eaf565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611eae57601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cf257601754831115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290613138565b60405180910390fd5b6000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600b548210159050808015611c925750600c60019054906101000a900460ff165b8015611cab5750600c60009054906101000a900460ff16155b15611cef576001600c60006101000a81548160ff021916908315150217905550611cd3612086565b6000600c60006101000a81548160ff0219169083151502179055505b50505b600c60009054906101000a900460ff16158015611d595750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ead576000606460105485611d709190612c80565b611d7a9190612d09565b90508084611d8891906131c4565b915080600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd99190612acb565b92505081905550600d5460125482611df19190612c80565b611dfb9190612d09565b60136000828254611e0c9190612acb565b92505081905550600d5460115482611e249190612c80565b611e2e9190612d09565b60146000828254611e3f9190612acb565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ea391906127e1565b60405180910390a3505b5b5b8282611ebb91906131c4565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f4d9190612acb565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fb191906127e1565b60405180910390a35050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000806014546013546120dd9190612acb565b905060008314156120f0575050506122a3565b6014600b546120ff9190612c80565b831115612118576014600b546121159190612c80565b92505b600060026010546012548661212d9190612c80565b6121379190612d09565b6121419190612d09565b90506000818561215191906131c4565b90506000479050612161826122a5565b6000814761216f91906131c4565b9050600085601454836121829190612c80565b61218c9190612d09565b90506000818361219c91906131c4565b905060006013819055506000601481905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516121f490613229565b60006040518083038185875af1925050503d8060008114612231576040519150601f19603f3d011682016040523d82523d6000602084013e612236565b606091505b50508098505060008611801561224c5750600081115b156122995761225b86826124e8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826013546040516122909392919061323e565b60405180910390a15b5050505050505050505b565b6000600267ffffffffffffffff8111156122c2576122c1613275565b5b6040519080825280602002602001820160405280156122f05781602001602082028036833780820191505090505b5090503081600081518110612308576123076132a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d391906132e8565b816001815181106123e7576123e66132a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061244e30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b4565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124b295949392919061340e565b600060405180830381600087803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b505050505050565b61251530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b4565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161257e96959493929190613468565b60606040518083038185885af115801561259c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125c191906134de565b5050505050565b600080fd5b6000819050919050565b6125e0816125cd565b81146125eb57600080fd5b50565b6000813590506125fd816125d7565b92915050565b6000806040838503121561261a576126196125c8565b5b6000612628858286016125ee565b9250506020612639858286016125ee565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561267d578082015181840152602081019050612662565b8381111561268c576000848401525b50505050565b6000601f19601f8301169050919050565b60006126ae82612643565b6126b8818561264e565b93506126c881856020860161265f565b6126d181612692565b840191505092915050565b600060208201905081810360008301526126f681846126a3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612729826126fe565b9050919050565b6127398161271e565b811461274457600080fd5b50565b60008135905061275681612730565b92915050565b60008060408385031215612773576127726125c8565b5b600061278185828601612747565b9250506020612792858286016125ee565b9150509250929050565b60008115159050919050565b6127b18161279c565b82525050565b60006020820190506127cc60008301846127a8565b92915050565b6127db816125cd565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600080600060608486031215612815576128146125c8565b5b600061282386828701612747565b935050602061283486828701612747565b9250506040612845868287016125ee565b9150509250925092565b600060ff82169050919050565b6128658161284f565b82525050565b6000602082019050612880600083018461285c565b92915050565b60006020828403121561289c5761289b6125c8565b5b60006128aa84828501612747565b91505092915050565b6000819050919050565b60006128d86128d36128ce846126fe565b6128b3565b6126fe565b9050919050565b60006128ea826128bd565b9050919050565b60006128fc826128df565b9050919050565b61290c816128f1565b82525050565b60006020820190506129276000830184612903565b92915050565b6129368161279c565b811461294157600080fd5b50565b6000813590506129538161292d565b92915050565b600080604083850312156129705761296f6125c8565b5b600061297e85828601612747565b925050602061298f85828601612944565b9150509250929050565b6129a28161271e565b82525050565b60006020820190506129bd6000830184612999565b92915050565b6000602082840312156129d9576129d86125c8565b5b60006129e7848285016125ee565b91505092915050565b60008060408385031215612a0757612a066125c8565b5b6000612a1585828601612747565b9250506020612a2685828601612747565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a6660208361264e565b9150612a7182612a30565b602082019050919050565b60006020820190508181036000830152612a9581612a59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad6826125cd565b9150612ae1836125cd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b1657612b15612a9c565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b6857607f821691505b60208210811415612b7c57612b7b612b21565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612bde60288361264e565b9150612be982612b82565b604082019050919050565b60006020820190508181036000830152612c0d81612bd1565b9050919050565b7f616c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000612c4a600f8361264e565b9150612c5582612c14565b602082019050919050565b60006020820190508181036000830152612c7981612c3d565b9050919050565b6000612c8b826125cd565b9150612c96836125cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ccf57612cce612a9c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d14826125cd565b9150612d1f836125cd565b925082612d2f57612d2e612cda565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612d9660358361264e565b9150612da182612d3a565b604082019050919050565b60006020820190508181036000830152612dc581612d89565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000612e2860348361264e565b9150612e3382612dcc565b604082019050919050565b60006020820190508181036000830152612e5781612e1b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612eba60268361264e565b9150612ec582612e5e565b604082019050919050565b60006020820190508181036000830152612ee981612ead565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612f4c60248361264e565b9150612f5782612ef0565b604082019050919050565b60006020820190508181036000830152612f7b81612f3f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fde60228361264e565b9150612fe982612f82565b604082019050919050565b6000602082019050818103600083015261300d81612fd1565b9050919050565b7f7472616e7366657220616d6f756e7420657863656564732062616c616e636500600082015250565b600061304a601f8361264e565b915061305582613014565b602082019050919050565b600060208201905081810360008301526130798161303d565b9050919050565b7f6e6f7420656e61626c6564207965740000000000000000000000000000000000600082015250565b60006130b6600f8361264e565b91506130c182613080565b602082019050919050565b600060208201905081810360008301526130e5816130a9565b9050919050565b7f6578636565646564206d61782062757900000000000000000000000000000000600082015250565b600061312260108361264e565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b7f6578636565646564206d61782077616c6c657400000000000000000000000000600082015250565b600061318e60138361264e565b915061319982613158565b602082019050919050565b600060208201905081810360008301526131bd81613181565b9050919050565b60006131cf826125cd565b91506131da836125cd565b9250828210156131ed576131ec612a9c565b5b828203905092915050565b600081905092915050565b50565b60006132136000836131f8565b915061321e82613203565b600082019050919050565b600061323482613206565b9150819050919050565b600060608201905061325360008301866127d2565b61326060208301856127d2565b61326d60408301846127d2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506132e281612730565b92915050565b6000602082840312156132fe576132fd6125c8565b5b600061330c848285016132d3565b91505092915050565b6000819050919050565b600061333a61333561333084613315565b6128b3565b6125cd565b9050919050565b61334a8161331f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133858161271e565b82525050565b6000613397838361337c565b60208301905092915050565b6000602082019050919050565b60006133bb82613350565b6133c5818561335b565b93506133d08361336c565b8060005b838110156134015781516133e8888261338b565b97506133f3836133a3565b9250506001810190506133d4565b5085935050505092915050565b600060a08201905061342360008301886127d2565b6134306020830187613341565b818103604083015261344281866133b0565b90506134516060830185612999565b61345e60808301846127d2565b9695505050505050565b600060c08201905061347d6000830189612999565b61348a60208301886127d2565b6134976040830187613341565b6134a46060830186613341565b6134b16080830185612999565b6134be60a08301846127d2565b979650505050505050565b6000815190506134d8816125d7565b92915050565b6000806000606084860312156134f7576134f66125c8565b5b6000613505868287016134c9565b9350506020613516868287016134c9565b9250506040613527868287016134c9565b915050925092509256fea264697066735822122096876fe558fdaed53bbd67761ef6e2f1b024838fe273355eb9871232e6a7d01164736f6c634300080a0033

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

000000000000000000000000437561b4373f5ee9ecc0dc0b5ceae651688d72cc000000000000000000000000000000000001bbbbf868fa2cfecc335a000000000000000000000000000000005bbf00bb99fdf1f938b6bff71c89a7496b3c2eed0000000000000000000000000000000000000000000000000000000000000064

-----Decoded View---------------
Arg [0] : _donationWallet (address): 0x437561B4373f5eE9EcC0DC0b5CeAE651688d72cc
Arg [1] : _cool (uint256): 9000000000000000000000000000000000
Arg [2] : _feeAddress (address): 0x5bBf00BB99fdf1F938b6bfF71C89A7496b3c2EeD
Arg [3] : _limit (uint256): 100

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000437561b4373f5ee9ecc0dc0b5ceae651688d72cc
Arg [1] : 000000000000000000000000000000000001bbbbf868fa2cfecc335a00000000
Arg [2] : 0000000000000000000000005bbf00bb99fdf1f938b6bff71c89a7496b3c2eed
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064


Deployed Bytecode Sourcemap

15156:12309:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21749:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20043:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19380:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17595:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15943:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15837:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15981:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16052:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19530:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20448:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17688:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15734:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15765:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15905:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21496:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17849:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16187:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8445:103;;;;;;;;;;;;;:::i;:::-;;16076:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15800:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20323:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16298:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20883:175;;;;;;;;;;;;;:::i;:::-;;7794:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20234:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18174:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20674:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16021:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21124:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15869:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16244:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18598:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20779:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8703:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16213:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21749:251;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21874:2:::1;21857:13;21847:7;:23;;;;:::i;:::-;:29;;21839:38;;;::::0;::::1;;21903:7;21884:16;:26;;;;21936:13;21917:16;:32;;;;21981:13;21971:7;:23;;;;:::i;:::-;21956:12;:38;;;;21749:251:::0;;:::o;20043:79::-;20080:13;20111:5;20104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20043:79;:::o;19380:144::-;19448:4;19461:39;19470:12;:10;:12::i;:::-;19484:7;19493:6;19461:8;:39::i;:::-;19514:4;19507:11;;19380:144;;;;:::o;17595:87::-;17641:7;17664:12;;17657:19;;17595:87;:::o;15943:33::-;;;;:::o;15837:27::-;;;;:::o;15981:33::-;;;;:::o;16052:19::-;;;;;;;;;;;;;:::o;19530:449::-;19650:4;19663:39;19673:7;19682:10;19694:7;19663:9;:39::i;:::-;19711:24;19738:11;:20;19750:7;19738:20;;;;;;;;;;;;;;;:34;19759:12;:10;:12::i;:::-;19738:34;;;;;;;;;;;;;;;;19711:61;;19807:7;19787:16;:27;;19779:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;19887:59;19896:7;19905:12;:10;:12::i;:::-;19938:7;19919:16;:26;19887:8;:59::i;:::-;19969:4;19962:11;;;19530:449;;;;;:::o;20448:220::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20559:2:::1;20544:11;:17;;20536:26;;;::::0;::::1;;20593:2;20577:12;:18;;20569:27;;;::::0;::::1;;20617:11;20603;:25;;;;20650:12;20635;:27;;;;20448:220:::0;;:::o;17688:79::-;17731:5;17752:9;;;;;;;;;;;17745:16;;17688:79;:::o;15734:26::-;;;;:::o;15765:30::-;;;;:::o;15905:31::-;;;;:::o;21496:247::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21620:2:::1;21603:13;21593:7;:23;;;;:::i;:::-;:29;;21585:38;;;::::0;::::1;;21648:7;21630:15;:25;;;;21680:13;21662:15;:31;;;;21724:13;21714:7;:23;;;;:::i;:::-;21700:11;:37;;;;21496:247:::0;;:::o;17849:106::-;17908:7;17931:9;:18;17941:7;17931:18;;;;;;;;;;;;;;;;17924:25;;17849:106;;;:::o;16187:21::-;;;;:::o;8445:103::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8510:30:::1;8537:1;8510:18;:30::i;:::-;8445:103::o:0;16076:104::-;;;;;;;;;;;;;:::o;15800:30::-;;;;:::o;20323:119::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20433:3:::1;20403:17;:27;20421:8;20403:27;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;20323:119:::0;;:::o;16298:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;20883:175::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20943:7:::1;;;;;;;;;;;20942:8;20934:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;20987:4;20977:7;;:14;;;;;;;;;;;;;;;;;;21012:4;20998:11;;:18;;;;;;;;;;;;;;;;;;21037:15;21023:11;:29;;;;20883:175::o:0;7794:87::-;7840:7;7867:6;;;;;;;;;;;7860:13;;7794:87;:::o;20234:83::-;20273:13;20304:7;20297:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20234:83;:::o;18174:150::-;18245:4;18258:42;18268:12;:10;:12::i;:::-;18282:9;18293:6;18258:9;:42::i;:::-;18314:4;18307:11;;18174:150;;;;:::o;20674:99::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20759:8:::1;20744:12;;:23;;;;;;;;;;;;;;;;;;20674:99:::0;:::o;16021:26::-;;;;;;;;;;;;;:::o;21124:366::-;21205:4;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21257:6:::1;21253:1;21238:12;;:16;;;;:::i;:::-;:25;;;;:::i;:::-;21225:9;:38;;21217:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;21368:4;21364:1;21349:12;;:16;;;;:::i;:::-;:23;;;;:::i;:::-;21336:9;:36;;21328:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;21457:9;21436:18;:30;;;;21480:4;21473:11;;21124:366:::0;;;:::o;15869:31::-;;;;:::o;16244:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;18598:130::-;18672:7;18695:11;:18;18707:5;18695:18;;;;;;;;;;;;;;;:27;18714:7;18695:27;;;;;;;;;;;;;;;;18688:34;;18598:130;;;;:::o;20779:98::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20864:7:::1;20849:12;:22;;;;20779:98:::0;:::o;8703:201::-;8025:12;:10;:12::i;:::-;8014:23;;:7;:5;:7::i;:::-;:23;;;8006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8812:1:::1;8792:22;;:8;:22;;;;8784:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8868:28;8887:8;8868:18;:28::i;:::-;8703:201:::0;:::o;16213:24::-;;;;:::o;6512:98::-;6565:7;6592:10;6585:17;;6512:98;:::o;24841:348::-;24976:1;24959:19;;:5;:19;;;;24951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25053:1;25034:21;;:7;:21;;;;25026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25133:6;25103:11;:18;25115:5;25103:18;;;;;;;;;;;;;;;:27;25122:7;25103:27;;;;;;;;;;;;;;;:36;;;;25167:7;25151:32;;25160:5;25151:32;;;25176:6;25151:32;;;;;;:::i;:::-;;;;;;;;24841:348;;;:::o;22220:2199::-;22329:21;22353:9;:18;22363:7;22353:18;;;;;;;;;;;;;;;;22329:42;;22403:7;22386:13;:24;;22378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22461:7;;;;;;;;;;;:37;;;;22472:17;:26;22490:7;22472:26;;;;;;;;;;;;;;;;;;;;;;;;;22461:37;:70;;;;22502:17;:29;22520:10;22502:29;;;;;;;;;;;;;;;;;;;;;;;;;22461:70;22453:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;22560:15;22578:7;22560:25;;22624:11;;;;;;;;;;;22613:22;;:7;:22;;;22609:1555;;;22682:12;;22668:11;;:26;;;;:::i;:::-;22650:15;:44;:78;;;;;22699:17;:29;22717:10;22699:29;;;;;;;;;;;;;;;;;;;;;;;;;22698:30;22650:78;22646:238;;;22760:6;;22749:7;:17;;22741:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22841:9;;22830:7;22806:9;:21;22816:10;22806:21;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:44;;22798:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22646:238;22897:15;:27;22913:10;22897:27;;;;;;;;;;;;;;;;;;;;;;;;;22892:365;;22937:11;22975:3;22961:11;;22951:7;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22937:41;;23009:3;22999:7;:13;;;;:::i;:::-;22989:23;;23051:3;23023:9;:24;23041:4;23023:24;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;23113:11;;23095:15;;23089:3;:21;;;;:::i;:::-;:35;;;;:::i;:::-;23067:18;;:57;;;;;;;:::i;:::-;;;;;;;;23181:11;;23163:15;;23157:3;:21;;;;:::i;:::-;:35;;;;:::i;:::-;23135:18;;:57;;;;;;;:::i;:::-;;;;;;;;23236:4;23210:37;;23219:7;23210:37;;;23243:3;23210:37;;;;;;:::i;:::-;;;;;;;;22926:331;22892:365;22609:1555;;;23314:11;;;;;;;;;;;23300:25;;:10;:25;;;23296:868;;;23341:17;:26;23359:7;23341:26;;;;;;;;;;;;;;;;;;;;;;;;;23336:435;;23399:6;;23388:7;:17;;23380:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;23437:28;23468:9;:24;23486:4;23468:24;;;;;;;;;;;;;;;;23437:55;;23503:12;23542:18;;23518:20;:42;;23503:57;;23587:7;:33;;;;;23609:11;;;;;;;;;;;23587:33;:57;;;;;23636:8;;;;;;;;;;;23635:9;23587:57;23571:191;;;23680:4;23669:8;;:15;;;;;;;;;;;;;;;;;;23709:10;:8;:10::i;:::-;23745:5;23734:8;;:16;;;;;;;;;;;;;;;;;;23571:191;23369:402;;23336:435;23786:8;;;;;;;;;;;23785:9;:38;;;;;23799:15;:24;23815:7;23799:24;;;;;;;;;;;;;;;;;;;;;;;;;23798:25;23785:38;23781:376;;;23836:11;23875:3;23860:12;;23850:7;:22;;;;:::i;:::-;:28;;;;:::i;:::-;23836:42;;23909:3;23899:7;:13;;;;:::i;:::-;23889:23;;23951:3;23923:9;:24;23941:4;23923:24;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;24012:11;;23993:16;;23987:3;:22;;;;:::i;:::-;:36;;;;:::i;:::-;23965:18;;:58;;;;;;;:::i;:::-;;;;;;;;24081:11;;24062:16;;24056:3;:22;;;;:::i;:::-;:36;;;;:::i;:::-;24034:18;;:58;;;;;;;:::i;:::-;;;;;;;;24136:4;24110:37;;24119:7;24110:37;;;24143:3;24110:37;;;;;;:::i;:::-;;;;;;;;23825:332;23781:376;23296:868;22609:1555;24315:7;24299:13;:23;;;;:::i;:::-;24278:9;:18;24288:7;24278:18;;;;;;;;;;;;;;;:44;;;;24354:7;24329:9;:21;24339:10;24329:21;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;24393:10;24375:38;;24384:7;24375:38;;;24405:7;24375:38;;;;;;:::i;:::-;;;;;;;;22322:2097;;22220:2199;;;:::o;9064:191::-;9138:16;9157:6;;;;;;;;;;;9138:25;;9183:8;9174:6;;:17;;;;;;;;;;;;;;;;;;9238:8;9207:40;;9228:8;9207:40;;;;;;;;;;;;9127:128;9064:191;:::o;25195:1251::-;25230:23;25256:9;:24;25274:4;25256:24;;;;;;;;;;;;;;;;25230:50;;25287:12;25306:25;25355:18;;25334;;:39;;;;:::i;:::-;25306:67;;25408:1;25389:15;:20;25386:34;;;25412:7;;;;;25386:34;25470:2;25449:18;;:23;;;;:::i;:::-;25431:15;:41;25428:103;;;25521:2;25500:18;;:23;;;;:::i;:::-;25482:41;;25428:103;25588:23;25666:1;25651:12;;25632:16;;25614:15;:34;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;25588:79;;25674:26;25721:15;25703;:33;;;;:::i;:::-;25674:62;;25749:25;25777:21;25749:49;;25807:36;25824:18;25807:16;:36::i;:::-;25857:18;25902:17;25878:21;:41;;;;:::i;:::-;25857:62;;25932:23;25992:17;25971:18;;25958:10;:31;;;;:::i;:::-;:51;;;;:::i;:::-;25932:77;;26028:23;26067:15;26054:10;:28;;;;:::i;:::-;26028:54;;26122:1;26101:18;:22;;;;26151:1;26130:18;:22;;;;26182:12;;;;;;;;;;;26174:26;;26209:15;26174:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26161:69;;;;;26264:1;26246:15;:19;:42;;;;;26287:1;26269:15;:19;26246:42;26243:198;;;26300:46;26313:15;26330;26300:12;:46::i;:::-;26362:71;26377:18;26397:15;26414:18;;26362:71;;;;;;;;:::i;:::-;;;;;;;;26243:198;25223:1223;;;;;;;;;25195:1251;:::o;26929:533::-;27047:21;27085:1;27071:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27047:40;;27112:4;27094;27099:1;27094:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27134:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27124:4;27129:1;27124:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;27163:60;27180:4;27195:13;;;;;;;;;;;27211:11;27163:8;:60::i;:::-;27254:13;;;;;;;;;;;:64;;;27329:11;27351:1;27391:4;27414;27430:15;27254:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26984:478;26929:533;:::o;26452:471::-;26592:60;26609:4;26624:13;;;;;;;;;;;26640:11;26592:8;:60::i;:::-;26687:13;;;;;;;;;;;:29;;;26724:9;26753:4;26769:11;26791:1;26830;26877:6;26895:15;26687:230;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26452:471;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:619::-;4403:6;4411;4419;4468:2;4456:9;4447:7;4443:23;4439:32;4436:119;;;4474:79;;:::i;:::-;4436:119;4594:1;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4565:117;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4849:2;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4820:118;4326:619;;;;;:::o;4951:86::-;4986:7;5026:4;5019:5;5015:16;5004:27;;4951:86;;;:::o;5043:112::-;5126:22;5142:5;5126:22;:::i;:::-;5121:3;5114:35;5043:112;;:::o;5161:214::-;5250:4;5288:2;5277:9;5273:18;5265:26;;5301:67;5365:1;5354:9;5350:17;5341:6;5301:67;:::i;:::-;5161:214;;;;:::o;5381:329::-;5440:6;5489:2;5477:9;5468:7;5464:23;5460:32;5457:119;;;5495:79;;:::i;:::-;5457:119;5615:1;5640:53;5685:7;5676:6;5665:9;5661:22;5640:53;:::i;:::-;5630:63;;5586:117;5381:329;;;;:::o;5716:60::-;5744:3;5765:5;5758:12;;5716:60;;;:::o;5782:142::-;5832:9;5865:53;5883:34;5892:24;5910:5;5892:24;:::i;:::-;5883:34;:::i;:::-;5865:53;:::i;:::-;5852:66;;5782:142;;;:::o;5930:126::-;5980:9;6013:37;6044:5;6013:37;:::i;:::-;6000:50;;5930:126;;;:::o;6062:152::-;6138:9;6171:37;6202:5;6171:37;:::i;:::-;6158:50;;6062:152;;;:::o;6220:183::-;6333:63;6390:5;6333:63;:::i;:::-;6328:3;6321:76;6220:183;;:::o;6409:274::-;6528:4;6566:2;6555:9;6551:18;6543:26;;6579:97;6673:1;6662:9;6658:17;6649:6;6579:97;:::i;:::-;6409:274;;;;:::o;6689:116::-;6759:21;6774:5;6759:21;:::i;:::-;6752:5;6749:32;6739:60;;6795:1;6792;6785:12;6739:60;6689:116;:::o;6811:133::-;6854:5;6892:6;6879:20;6870:29;;6908:30;6932:5;6908:30;:::i;:::-;6811:133;;;;:::o;6950:468::-;7015:6;7023;7072:2;7060:9;7051:7;7047:23;7043:32;7040:119;;;7078:79;;:::i;:::-;7040:119;7198:1;7223:53;7268:7;7259:6;7248:9;7244:22;7223:53;:::i;:::-;7213:63;;7169:117;7325:2;7351:50;7393:7;7384:6;7373:9;7369:22;7351:50;:::i;:::-;7341:60;;7296:115;6950:468;;;;;:::o;7424:118::-;7511:24;7529:5;7511:24;:::i;:::-;7506:3;7499:37;7424:118;;:::o;7548:222::-;7641:4;7679:2;7668:9;7664:18;7656:26;;7692:71;7760:1;7749:9;7745:17;7736:6;7692:71;:::i;:::-;7548:222;;;;:::o;7776:329::-;7835:6;7884:2;7872:9;7863:7;7859:23;7855:32;7852:119;;;7890:79;;:::i;:::-;7852:119;8010:1;8035:53;8080:7;8071:6;8060:9;8056:22;8035:53;:::i;:::-;8025:63;;7981:117;7776:329;;;;:::o;8111:474::-;8179:6;8187;8236:2;8224:9;8215:7;8211:23;8207:32;8204:119;;;8242:79;;:::i;:::-;8204:119;8362:1;8387:53;8432:7;8423:6;8412:9;8408:22;8387:53;:::i;:::-;8377:63;;8333:117;8489:2;8515:53;8560:7;8551:6;8540:9;8536:22;8515:53;:::i;:::-;8505:63;;8460:118;8111:474;;;;;:::o;8591:182::-;8731:34;8727:1;8719:6;8715:14;8708:58;8591:182;:::o;8779:366::-;8921:3;8942:67;9006:2;9001:3;8942:67;:::i;:::-;8935:74;;9018:93;9107:3;9018:93;:::i;:::-;9136:2;9131:3;9127:12;9120:19;;8779:366;;;:::o;9151:419::-;9317:4;9355:2;9344:9;9340:18;9332:26;;9404:9;9398:4;9394:20;9390:1;9379:9;9375:17;9368:47;9432:131;9558:4;9432:131;:::i;:::-;9424:139;;9151:419;;;:::o;9576:180::-;9624:77;9621:1;9614:88;9721:4;9718:1;9711:15;9745:4;9742:1;9735:15;9762:305;9802:3;9821:20;9839:1;9821:20;:::i;:::-;9816:25;;9855:20;9873:1;9855:20;:::i;:::-;9850:25;;10009:1;9941:66;9937:74;9934:1;9931:81;9928:107;;;10015:18;;:::i;:::-;9928:107;10059:1;10056;10052:9;10045:16;;9762:305;;;;:::o;10073:180::-;10121:77;10118:1;10111:88;10218:4;10215:1;10208:15;10242:4;10239:1;10232:15;10259:320;10303:6;10340:1;10334:4;10330:12;10320:22;;10387:1;10381:4;10377:12;10408:18;10398:81;;10464:4;10456:6;10452:17;10442:27;;10398:81;10526:2;10518:6;10515:14;10495:18;10492:38;10489:84;;;10545:18;;:::i;:::-;10489:84;10310:269;10259:320;;;:::o;10585:227::-;10725:34;10721:1;10713:6;10709:14;10702:58;10794:10;10789:2;10781:6;10777:15;10770:35;10585:227;:::o;10818:366::-;10960:3;10981:67;11045:2;11040:3;10981:67;:::i;:::-;10974:74;;11057:93;11146:3;11057:93;:::i;:::-;11175:2;11170:3;11166:12;11159:19;;10818:366;;;:::o;11190:419::-;11356:4;11394:2;11383:9;11379:18;11371:26;;11443:9;11437:4;11433:20;11429:1;11418:9;11414:17;11407:47;11471:131;11597:4;11471:131;:::i;:::-;11463:139;;11190:419;;;:::o;11615:165::-;11755:17;11751:1;11743:6;11739:14;11732:41;11615:165;:::o;11786:366::-;11928:3;11949:67;12013:2;12008:3;11949:67;:::i;:::-;11942:74;;12025:93;12114:3;12025:93;:::i;:::-;12143:2;12138:3;12134:12;12127:19;;11786:366;;;:::o;12158:419::-;12324:4;12362:2;12351:9;12347:18;12339:26;;12411:9;12405:4;12401:20;12397:1;12386:9;12382:17;12375:47;12439:131;12565:4;12439:131;:::i;:::-;12431:139;;12158:419;;;:::o;12583:348::-;12623:7;12646:20;12664:1;12646:20;:::i;:::-;12641:25;;12680:20;12698:1;12680:20;:::i;:::-;12675:25;;12868:1;12800:66;12796:74;12793:1;12790:81;12785:1;12778:9;12771:17;12767:105;12764:131;;;12875:18;;:::i;:::-;12764:131;12923:1;12920;12916:9;12905:20;;12583:348;;;;:::o;12937:180::-;12985:77;12982:1;12975:88;13082:4;13079:1;13072:15;13106:4;13103:1;13096:15;13123:185;13163:1;13180:20;13198:1;13180:20;:::i;:::-;13175:25;;13214:20;13232:1;13214:20;:::i;:::-;13209:25;;13253:1;13243:35;;13258:18;;:::i;:::-;13243:35;13300:1;13297;13293:9;13288:14;;13123:185;;;;:::o;13314:240::-;13454:34;13450:1;13442:6;13438:14;13431:58;13523:23;13518:2;13510:6;13506:15;13499:48;13314:240;:::o;13560:366::-;13702:3;13723:67;13787:2;13782:3;13723:67;:::i;:::-;13716:74;;13799:93;13888:3;13799:93;:::i;:::-;13917:2;13912:3;13908:12;13901:19;;13560:366;;;:::o;13932:419::-;14098:4;14136:2;14125:9;14121:18;14113:26;;14185:9;14179:4;14175:20;14171:1;14160:9;14156:17;14149:47;14213:131;14339:4;14213:131;:::i;:::-;14205:139;;13932:419;;;:::o;14357:239::-;14497:34;14493:1;14485:6;14481:14;14474:58;14566:22;14561:2;14553:6;14549:15;14542:47;14357:239;:::o;14602:366::-;14744:3;14765:67;14829:2;14824:3;14765:67;:::i;:::-;14758:74;;14841:93;14930:3;14841:93;:::i;:::-;14959:2;14954:3;14950:12;14943:19;;14602:366;;;:::o;14974:419::-;15140:4;15178:2;15167:9;15163:18;15155:26;;15227:9;15221:4;15217:20;15213:1;15202:9;15198:17;15191:47;15255:131;15381:4;15255:131;:::i;:::-;15247:139;;14974:419;;;:::o;15399:225::-;15539:34;15535:1;15527:6;15523:14;15516:58;15608:8;15603:2;15595:6;15591:15;15584:33;15399:225;:::o;15630:366::-;15772:3;15793:67;15857:2;15852:3;15793:67;:::i;:::-;15786:74;;15869:93;15958:3;15869:93;:::i;:::-;15987:2;15982:3;15978:12;15971:19;;15630:366;;;:::o;16002:419::-;16168:4;16206:2;16195:9;16191:18;16183:26;;16255:9;16249:4;16245:20;16241:1;16230:9;16226:17;16219:47;16283:131;16409:4;16283:131;:::i;:::-;16275:139;;16002:419;;;:::o;16427:223::-;16567:34;16563:1;16555:6;16551:14;16544:58;16636:6;16631:2;16623:6;16619:15;16612:31;16427:223;:::o;16656:366::-;16798:3;16819:67;16883:2;16878:3;16819:67;:::i;:::-;16812:74;;16895:93;16984:3;16895:93;:::i;:::-;17013:2;17008:3;17004:12;16997:19;;16656:366;;;:::o;17028:419::-;17194:4;17232:2;17221:9;17217:18;17209:26;;17281:9;17275:4;17271:20;17267:1;17256:9;17252:17;17245:47;17309:131;17435:4;17309:131;:::i;:::-;17301:139;;17028:419;;;:::o;17453:221::-;17593:34;17589:1;17581:6;17577:14;17570:58;17662:4;17657:2;17649:6;17645:15;17638:29;17453:221;:::o;17680:366::-;17822:3;17843:67;17907:2;17902:3;17843:67;:::i;:::-;17836:74;;17919:93;18008:3;17919:93;:::i;:::-;18037:2;18032:3;18028:12;18021:19;;17680:366;;;:::o;18052:419::-;18218:4;18256:2;18245:9;18241:18;18233:26;;18305:9;18299:4;18295:20;18291:1;18280:9;18276:17;18269:47;18333:131;18459:4;18333:131;:::i;:::-;18325:139;;18052:419;;;:::o;18477:181::-;18617:33;18613:1;18605:6;18601:14;18594:57;18477:181;:::o;18664:366::-;18806:3;18827:67;18891:2;18886:3;18827:67;:::i;:::-;18820:74;;18903:93;18992:3;18903:93;:::i;:::-;19021:2;19016:3;19012:12;19005:19;;18664:366;;;:::o;19036:419::-;19202:4;19240:2;19229:9;19225:18;19217:26;;19289:9;19283:4;19279:20;19275:1;19264:9;19260:17;19253:47;19317:131;19443:4;19317:131;:::i;:::-;19309:139;;19036:419;;;:::o;19461:165::-;19601:17;19597:1;19589:6;19585:14;19578:41;19461:165;:::o;19632:366::-;19774:3;19795:67;19859:2;19854:3;19795:67;:::i;:::-;19788:74;;19871:93;19960:3;19871:93;:::i;:::-;19989:2;19984:3;19980:12;19973:19;;19632:366;;;:::o;20004:419::-;20170:4;20208:2;20197:9;20193:18;20185:26;;20257:9;20251:4;20247:20;20243:1;20232:9;20228:17;20221:47;20285:131;20411:4;20285:131;:::i;:::-;20277:139;;20004:419;;;:::o;20429:166::-;20569:18;20565:1;20557:6;20553:14;20546:42;20429:166;:::o;20601:366::-;20743:3;20764:67;20828:2;20823:3;20764:67;:::i;:::-;20757:74;;20840:93;20929:3;20840:93;:::i;:::-;20958:2;20953:3;20949:12;20942:19;;20601:366;;;:::o;20973:419::-;21139:4;21177:2;21166:9;21162:18;21154:26;;21226:9;21220:4;21216:20;21212:1;21201:9;21197:17;21190:47;21254:131;21380:4;21254:131;:::i;:::-;21246:139;;20973:419;;;:::o;21398:169::-;21538:21;21534:1;21526:6;21522:14;21515:45;21398:169;:::o;21573:366::-;21715:3;21736:67;21800:2;21795:3;21736:67;:::i;:::-;21729:74;;21812:93;21901:3;21812:93;:::i;:::-;21930:2;21925:3;21921:12;21914:19;;21573:366;;;:::o;21945:419::-;22111:4;22149:2;22138:9;22134:18;22126:26;;22198:9;22192:4;22188:20;22184:1;22173:9;22169:17;22162:47;22226:131;22352:4;22226:131;:::i;:::-;22218:139;;21945:419;;;:::o;22370:191::-;22410:4;22430:20;22448:1;22430:20;:::i;:::-;22425:25;;22464:20;22482:1;22464:20;:::i;:::-;22459:25;;22503:1;22500;22497:8;22494:34;;;22508:18;;:::i;:::-;22494:34;22553:1;22550;22546:9;22538:17;;22370:191;;;;:::o;22567:147::-;22668:11;22705:3;22690:18;;22567:147;;;;:::o;22720:114::-;;:::o;22840:398::-;22999:3;23020:83;23101:1;23096:3;23020:83;:::i;:::-;23013:90;;23112:93;23201:3;23112:93;:::i;:::-;23230:1;23225:3;23221:11;23214:18;;22840:398;;;:::o;23244:379::-;23428:3;23450:147;23593:3;23450:147;:::i;:::-;23443:154;;23614:3;23607:10;;23244:379;;;:::o;23629:442::-;23778:4;23816:2;23805:9;23801:18;23793:26;;23829:71;23897:1;23886:9;23882:17;23873:6;23829:71;:::i;:::-;23910:72;23978:2;23967:9;23963:18;23954:6;23910:72;:::i;:::-;23992;24060:2;24049:9;24045:18;24036:6;23992:72;:::i;:::-;23629:442;;;;;;:::o;24077:180::-;24125:77;24122:1;24115:88;24222:4;24219:1;24212:15;24246:4;24243:1;24236:15;24263:180;24311:77;24308:1;24301:88;24408:4;24405:1;24398:15;24432:4;24429:1;24422:15;24449:143;24506:5;24537:6;24531:13;24522:22;;24553:33;24580:5;24553:33;:::i;:::-;24449:143;;;;:::o;24598:351::-;24668:6;24717:2;24705:9;24696:7;24692:23;24688:32;24685:119;;;24723:79;;:::i;:::-;24685:119;24843:1;24868:64;24924:7;24915:6;24904:9;24900:22;24868:64;:::i;:::-;24858:74;;24814:128;24598:351;;;;:::o;24955:85::-;25000:7;25029:5;25018:16;;24955:85;;;:::o;25046:158::-;25104:9;25137:61;25155:42;25164:32;25190:5;25164:32;:::i;:::-;25155:42;:::i;:::-;25137:61;:::i;:::-;25124:74;;25046:158;;;:::o;25210:147::-;25305:45;25344:5;25305:45;:::i;:::-;25300:3;25293:58;25210:147;;:::o;25363:114::-;25430:6;25464:5;25458:12;25448:22;;25363:114;;;:::o;25483:184::-;25582:11;25616:6;25611:3;25604:19;25656:4;25651:3;25647:14;25632:29;;25483:184;;;;:::o;25673:132::-;25740:4;25763:3;25755:11;;25793:4;25788:3;25784:14;25776:22;;25673:132;;;:::o;25811:108::-;25888:24;25906:5;25888:24;:::i;:::-;25883:3;25876:37;25811:108;;:::o;25925:179::-;25994:10;26015:46;26057:3;26049:6;26015:46;:::i;:::-;26093:4;26088:3;26084:14;26070:28;;25925:179;;;;:::o;26110:113::-;26180:4;26212;26207:3;26203:14;26195:22;;26110:113;;;:::o;26259:732::-;26378:3;26407:54;26455:5;26407:54;:::i;:::-;26477:86;26556:6;26551:3;26477:86;:::i;:::-;26470:93;;26587:56;26637:5;26587:56;:::i;:::-;26666:7;26697:1;26682:284;26707:6;26704:1;26701:13;26682:284;;;26783:6;26777:13;26810:63;26869:3;26854:13;26810:63;:::i;:::-;26803:70;;26896:60;26949:6;26896:60;:::i;:::-;26886:70;;26742:224;26729:1;26726;26722:9;26717:14;;26682:284;;;26686:14;26982:3;26975:10;;26383:608;;;26259:732;;;;:::o;26997:831::-;27260:4;27298:3;27287:9;27283:19;27275:27;;27312:71;27380:1;27369:9;27365:17;27356:6;27312:71;:::i;:::-;27393:80;27469:2;27458:9;27454:18;27445:6;27393:80;:::i;:::-;27520:9;27514:4;27510:20;27505:2;27494:9;27490:18;27483:48;27548:108;27651:4;27642:6;27548:108;:::i;:::-;27540:116;;27666:72;27734:2;27723:9;27719:18;27710:6;27666:72;:::i;:::-;27748:73;27816:3;27805:9;27801:19;27792:6;27748:73;:::i;:::-;26997:831;;;;;;;;:::o;27834:807::-;28083:4;28121:3;28110:9;28106:19;28098:27;;28135:71;28203:1;28192:9;28188:17;28179:6;28135:71;:::i;:::-;28216:72;28284:2;28273:9;28269:18;28260:6;28216:72;:::i;:::-;28298:80;28374:2;28363:9;28359:18;28350:6;28298:80;:::i;:::-;28388;28464:2;28453:9;28449:18;28440:6;28388:80;:::i;:::-;28478:73;28546:3;28535:9;28531:19;28522:6;28478:73;:::i;:::-;28561;28629:3;28618:9;28614:19;28605:6;28561:73;:::i;:::-;27834:807;;;;;;;;;:::o;28647:143::-;28704:5;28735:6;28729:13;28720:22;;28751:33;28778:5;28751:33;:::i;:::-;28647:143;;;;:::o;28796:663::-;28884:6;28892;28900;28949:2;28937:9;28928:7;28924:23;28920:32;28917:119;;;28955:79;;:::i;:::-;28917:119;29075:1;29100:64;29156:7;29147:6;29136:9;29132:22;29100:64;:::i;:::-;29090:74;;29046:128;29213:2;29239:64;29295:7;29286:6;29275:9;29271:22;29239:64;:::i;:::-;29229:74;;29184:129;29352:2;29378:64;29434:7;29425:6;29414:9;29410:22;29378:64;:::i;:::-;29368:74;;29323:129;28796:663;;;;;:::o

Swarm Source

ipfs://96876fe558fdaed53bbd67761ef6e2f1b024838fe273355eb9871232e6a7d011
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.