ETH Price: $3,452.86 (+1.59%)

Token

Pennywise (IT)
 

Overview

Max Total Supply

99,999,999,999 IT

Holders

349

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
183,967,274.020205956390668636 IT

Value
$0.00
0x8522811cfcf77487a7c64facef027153738b6580
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:
Pennywise

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-27
*/

///          I'm every nightmare you've ever had.  I'm your worst dream come true.  I'm everything you ever were afraid of.
///          https://pennywise.ltd

/*

                              ██████████████████                            
                          ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▓▓                        
                      ████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████                    
                  ▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓                
                ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓██              
              ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██            
            ██▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██          
          ▒▒▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒        
        ██▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██      
        ██▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██      
      ██▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██    
      ██▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██    
      ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██    
    ▒▒▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒  
    ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██  
    ▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░
  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  ░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
    ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██  
    ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██  
    ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██  
    ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██  
    ░░██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░  
      ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██    
        ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░    
        ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██      
        ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██      
          ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██        
            ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░        
            ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██          
            ░░██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░          
                ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██              
                ░░██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██                
                    ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██                  
                    ░░██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██                    
                        ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██                      
                          ▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓                        
                              ████▒▒▒▒▒▒▒▒▒▒████                            
                                  ██████████                                
                                    ██  ██                                  
                                    ██  ██                                  
                                  ▒▒  ▒▒                                    
                                ▓▓  ██                                      
                                ██  ██▒▒                                    
                                  ██    ██                                  
                                    ████  ██                                
                                    ██  ▓▓                                  
                                  ██  ██                                    
                                ▒▒░░▒▒░░                                    
                                ██  ██                                      
                                ██  ██                                      
                                ██  ██                                      
                                ██  ██                                      
                                ██  ██                                      
                                  ██                                        
*/

pragma solidity 0.8.21;

// SPDX-License-Identifier: MIT

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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), 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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

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

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}


contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            SafeERC20.safeTransfer(IERC20(token),owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IWETH {
    function deposit() external payable; 
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(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 swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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 getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

contract Pennywise is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingActive;

    mapping (address => bool) public isAMMPair;

    uint256 public maxTransaction;
    uint256 public maxWallet;

    address public operationsAddress;
    address public prizeAddress;

    uint256 public buyTotalTax;
    uint256 public buyOperationsTax;
    uint256 public buyLiquidityTax;
    uint256 public buyPrizeTax;

    uint256 public sellTotalTax;
    uint256 public sellOperationsTax;
    uint256 public sellLiquidityTax;
    uint256 public sellPrizeTax;
    uint256 public sellBurnTax;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForPrize;

    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    bool public limitsInEffect = true;

    bool private swapping;
    uint256 public swapTokensAtAmt;

    address public lpPair;
    IDexRouter public dexRouter;
    IERC20Metadata public eth;
    IWETH public WETH;

    uint256 public constant FEE_DIVISOR = 10000;

    // events

    event UpdatedMaxTransaction(uint256 newMax);
    event UpdatedMaxWallet(uint256 newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint256 newAmt);
    event UpdatedSellTax(uint256 newAmt);

    // constructor

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {   
        _mint(msg.sender, 99_999_999_999 * 1e18);
        uint256 _totalSupply = totalSupply();

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 42161){
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        maxTransaction = _totalSupply * 2 / 1000;
        maxWallet = _totalSupply * 2/ 100;
        swapTokensAtAmt = _totalSupply * 25 / 100000;

        operationsAddress = 0xab7ee9A412ea89f8984eAA5CDc85B5E1F397560E;
        prizeAddress = 0xD3F560a7951978071217875AE1D9d78622619F32;

        buyOperationsTax = 300;
        buyLiquidityTax = 300;
        buyPrizeTax = 100;
        buyTotalTax = buyOperationsTax + buyLiquidityTax + buyPrizeTax;

        sellOperationsTax = 1500;
        sellLiquidityTax = 500;
        sellPrizeTax = 1000;
        sellTotalTax = sellOperationsTax + sellLiquidityTax + sellPrizeTax;

        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());

        WETH = IWETH(dexRouter.WETH());
        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[prizeAddress] = true;
        exemptFromLimits[address(dexRouter)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[prizeAddress] = true;
        exemptFromFees[address(dexRouter)] = true;
 
        _approve(address(msg.sender), address(dexRouter), _totalSupply);
        _approve(address(this), address(dexRouter), type(uint256).max);

        super._transfer(msg.sender, 0xD3F560a7951978071217875AE1D9d78622619F32, _totalSupply / 100);
    }

    receive() external payable {}

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        checkLimits(from, to, amount);

        if(!exemptFromFees[from] && !exemptFromFees[to]){
            amount -= handleTax(from, to, amount);
        }

        super._transfer(from,to,amount);
    }

    function checkLimits(address from, address to, uint256 amount) internal {

        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingActive, "Trading not active");
        }

        if(limitsInEffect){
            if (transferDelayEnabled){
                if (to != address(dexRouter) && !isAMMPair[to]){
                    require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "Transfer Delay enabled.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }

            // buy
            if (isAMMPair[from] && !exemptFromLimits[to]) {
                require(amount <= maxTransaction, "Buy transfer amount exceeded.");
                require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= maxTransaction, "Sell transfer amount exceeded.");
            }
            else if(!exemptFromLimits[to]) {
                require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){
        if(balanceOf(address(this)) >= swapTokensAtAmt && !swapping && isAMMPair[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }
        
        uint256 tax = 0;

        // on sell
        if (isAMMPair[to] && sellTotalTax > 0){
            tax = amount * sellTotalTax / FEE_DIVISOR;
            tokensForLiquidity += tax * sellLiquidityTax / sellTotalTax;
            tokensForOperations += tax * sellOperationsTax / sellTotalTax;
            tokensForPrize += tax * sellPrizeTax / sellTotalTax;
        }

        // on buy
        else if(isAMMPair[from] && buyTotalTax > 0) {
            tax = amount * buyTotalTax / FEE_DIVISOR;
            tokensForOperations += tax * buyOperationsTax / buyTotalTax;
            tokensForLiquidity += tax * buyLiquidityTax / buyTotalTax;
            tokensForPrize += tax * buyPrizeTax / buyTotalTax;
        }
        
        if(tax > 0){    
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForPrize;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 40){
            contractBalance = swapTokensAtAmt * 40;
        }
        
        if(tokensForLiquidity > 0){
            uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap;
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForLiquidity;
            tokensForLiquidity = 0;
        }
        
        if(totalTokensToSwap > 0 && contractBalance > 0){
            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            uint256 ethForPrize = ethBalance * tokensForPrize / totalTokensToSwap;

            bool success;
            if(ethForPrize > 0){
                (success, ) = prizeAddress.call{value: ethForPrize}("");
                tokensForPrize = 0;
            }

            if(address(this).balance > 0){
                (success, ) = operationsAddress.call{value: address(this).balance}("");
                tokensForOperations = 0;
            }
        }
    }

    // owner functions

    function increaseMaxTxnSetAmount() external onlyOwner {
        maxTransaction = totalSupply() * 5 / 1000;
    }

    function increaseMaxTxnToMaxWallet() external onlyOwner {
        maxTransaction = maxWallet;
    }

    function setExemptFromFees(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimits(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low");
        maxTransaction = newNumInTokens * (10**decimals());
        emit UpdatedMaxTransaction(maxTransaction);
    }

    function updateMaxWallet(uint256 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 100)/(10**decimals()), "Too low");
        maxWallet = newNumInTokens * (10**decimals());
        emit UpdatedMaxWallet(maxWallet);
    }

    function updateBuyTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _prizeTax) external onlyOwner {
        buyOperationsTax = _operationsTax;
        buyLiquidityTax = _liquidityTax;
        buyPrizeTax = _prizeTax;
        buyTotalTax = buyOperationsTax + buyLiquidityTax + buyPrizeTax;
        emit UpdatedBuyTax(buyTotalTax);
    }

    function updateSellTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _prizeTax) external onlyOwner {
        sellOperationsTax = _operationsTax;
        sellLiquidityTax = _liquidityTax;
        sellPrizeTax = _prizeTax;
        sellTotalTax = sellOperationsTax + sellLiquidityTax + sellPrizeTax;
        emit UpdatedSellTax(sellTotalTax);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxTransaction = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInWei) external onlyOwner {
        require(wallets.length == amountsInWei.length, "arrays length mismatch");
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInWei[i]);
        }
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
    }

    function updateOperationsAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        operationsAddress = _address;
    }

    function updatePrizeAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        prizeAddress = _address;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyPrizeTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"increaseMaxTxnSetAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"increaseMaxTxnToMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","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":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prizeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellPrizeTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_prizeTax","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updatePrizeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_prizeTax","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052601b805461ffff19166101011790553480156200001f575f80fd5b506040516200378b3803806200378b833981016040819052620000429162000a4b565b8181600362000052838262000b3c565b50600462000061828262000b3c565b5050505f620000756200061760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000db336c01431e0fae5f916116f89c00006200061b565b5f620000e660025490565b90505f466001036200010e5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001cb565b46600503620001335750737a250d5630b4cf539739df2c5dacb4c659f2488d620001cb565b4660610362000158575073d99d1c33f9fc3444f8101754abc46c52416550d1620001cb565b4661a4b1036200017e5750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001cb565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b601e80546001600160a01b0319166001600160a01b0383161790556103e8620001f683600262000c18565b62000202919062000c38565b600a5560646200021483600262000c18565b62000220919062000c38565b600b55620186a06200023483601962000c18565b62000240919062000c38565b601c55600c80546001600160a01b031990811673ab7ee9a412ea89f8984eaa5cdc85b5e1f397560e17909155600d805490911673d3f560a7951978071217875ae1d9d78622619f3217905561012c600f81905560108190556064601181905590620002ac908062000c58565b620002b8919062000c58565b600e556105dc60138190556101f460148190556103e8601581905591620002e0919062000c58565b620002ec919062000c58565b601255601e546040805163c45a015560e01b815290516001600160a01b039092169163c45a0155916004808201926020929091908290030181865afa15801562000338573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200035e919062000c6e565b6001600160a01b031663c9c6539630601e5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003be573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e4919062000c6e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200042f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000455919062000c6e565b601d80546001600160a01b0319166001600160a01b03928316179055601e54604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa158015620004b2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004d8919062000c6e565b602080546001600160a01b0319166001600160a01b03928316178155601d805483165f908152600983526040808220805460ff199081166001908117909255935486168352600785528183208054851682179055338084528284208054861683179055308085528385208054871684179055600d8054891686528486208054881685179055601e80548a1687528587208054891686179055838752600690985284862080548816851790559085528385208054871684179055548716845282842080548616831790558554871684529190922080549093169091179091559054620005c5921684620006ca565b601e54620005e09030906001600160a01b03165f19620006ca565b6200060d3373d3f560a7951978071217875ae1d9d78622619f326200060760648662000c38565b620007f1565b5050505062000c9d565b3390565b6001600160a01b038216620006735760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001c2565b8060025f82825462000686919062000c58565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481525f805160206200376b833981519152910160405180910390a35050565b6001600160a01b0383166200072e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001c2565b6001600160a01b038216620007915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001c2565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316620008575760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401620001c2565b6001600160a01b038216620008bb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401620001c2565b6001600160a01b0383165f9081526020819052604090205481811015620009345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401620001c2565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290925f805160206200376b833981519152910160405180910390a350505050565b505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620009b1575f80fd5b81516001600160401b0380821115620009ce57620009ce6200098d565b604051601f8301601f19908116603f01168101908282118183101715620009f957620009f96200098d565b8160405283815260209250868385880101111562000a15575f80fd5b5f91505b8382101562000a38578582018301518183018401529082019062000a19565b5f93810190920192909252949350505050565b5f806040838503121562000a5d575f80fd5b82516001600160401b038082111562000a74575f80fd5b62000a8286838701620009a1565b9350602085015191508082111562000a98575f80fd5b5062000aa785828601620009a1565b9150509250929050565b600181811c9082168062000ac657607f821691505b60208210810362000ae557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000988575f81815260208120601f850160051c8101602086101562000b135750805b601f850160051c820191505b8181101562000b345782815560010162000b1f565b505050505050565b81516001600160401b0381111562000b585762000b586200098d565b62000b708162000b69845462000ab1565b8462000aeb565b602080601f83116001811462000ba6575f841562000b8e5750858301515b5f19600386901b1c1916600185901b17855562000b34565b5f85815260208120601f198616915b8281101562000bd65788860151825594840194600190910190840162000bb5565b508582101562000bf457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000c325762000c3262000c04565b92915050565b5f8262000c5357634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000c325762000c3262000c04565b5f6020828403121562000c7f575f80fd5b81516001600160a01b038116811462000c96575f80fd5b9392505050565b612ac08062000cab5f395ff3fe608060405260043610610369575f3560e01c80638a8c523c116101c8578063bbc0c742116100fd578063e27a55fe1161009d578063f2fde38b1161006d578063f2fde38b14610974578063f8b45b0514610993578063fb002c97146109a8578063fb591a14146109bd575f80fd5b8063e27a55fe1461090d578063e884f26014610922578063ea4cfe1214610936578063ea6debd014610955575f80fd5b8063c78d0fa0116100d8578063c78d0fa0146108ab578063c876d0b9146108c0578063d1d13835146108d9578063dd62ed3e146108ee575f80fd5b8063bbc0c74214610868578063c3f70b5214610881578063c43c0f5814610896575f80fd5b8063a0a485ca11610168578063a457c2d711610143578063a457c2d7146107dd578063a9059cbb146107fc578063ad5c46481461081b578063b0249cc61461083a575f80fd5b8063a0a485ca1461078a578063a13d1a2b146107a9578063a2cbba28146107c8575f80fd5b80638da5cb5b116101a35780638da5cb5b1461072557806395d89b411461074257806398733dc8146107565780639e93ad8e14610775575f80fd5b80638a8c523c146106c45780638c7c9e0c146106d85780638d3e6e40146106f7575f80fd5b8063441f078a1161029e5780636161b8811161023e57806370a082311161021957806370a0823114610649578063715018a61461067d578063751039fc1461069157806377b27d1f146106a5575f80fd5b80636161b8811461060b57806366cdc1de1461061f5780636ab9120614610634575f80fd5b80635431c94e116102795780635431c94e146105945780635a90a49e146105b35780635df6e68e146105e15780635ec13e45146105f6575f80fd5b8063441f078a14610542578063452ed4f1146105575780634a62bb6514610576575f80fd5b80631a8145bb116103095780632307b441116102e45780632307b441146104ca57806323b872dd146104e9578063313ce567146105085780633950935114610523575f80fd5b80631a8145bb146104815780631c499ab0146104965780631f3ecf65146104b5575f80fd5b80630758d924116103445780630758d924146103de578063095ea7b3146104155780630de372871461044457806318160ddd14610463575f80fd5b80630517d13d1461037457806305f936501461039557806306fdde03146103b4575f80fd5b3661037057005b5f80fd5b34801561037f575f80fd5b5061039361038e366004612568565b6109d1565b005b3480156103a0575f80fd5b506103936103af36600461257f565b610ac6565b3480156103bf575f80fd5b506103c8610b52565b6040516103d591906125ca565b60405180910390f35b3480156103e9575f80fd5b50601e546103fd906001600160a01b031681565b6040516001600160a01b0390911681526020016103d5565b348015610420575f80fd5b5061043461042f366004612613565b610be2565b60405190151581526020016103d5565b34801561044f575f80fd5b50600d546103fd906001600160a01b031681565b34801561046e575f80fd5b506002545b6040519081526020016103d5565b34801561048c575f80fd5b5061047360185481565b3480156104a1575f80fd5b506103936104b0366004612568565b610bfb565b3480156104c0575f80fd5b5061047360165481565b3480156104d5575f80fd5b506103936104e4366004612685565b610cdf565b3480156104f4575f80fd5b506104346105033660046126ec565b610dbd565b348015610513575f80fd5b50604051601281526020016103d5565b34801561052e575f80fd5b5061043461053d366004612613565b610de0565b34801561054d575f80fd5b5061047360155481565b348015610562575f80fd5b50601d546103fd906001600160a01b031681565b348015610581575f80fd5b50601b5461043490610100900460ff1681565b34801561059f575f80fd5b506103936105ae36600461272a565b610e01565b3480156105be575f80fd5b506104346105cd366004612761565b60066020525f908152604090205460ff1681565b3480156105ec575f80fd5b50610473600e5481565b348015610601575f80fd5b50610473600f5481565b348015610616575f80fd5b50610393610efb565b34801561062a575f80fd5b5061047360115481565b34801561063f575f80fd5b5061047360145481565b348015610654575f80fd5b50610473610663366004612761565b6001600160a01b03165f9081526020819052604090205490565b348015610688575f80fd5b50610393610f2d565b34801561069c575f80fd5b50610393610fa0565b3480156106b0575f80fd5b506103936106bf366004612790565b61100b565b3480156106cf575f80fd5b506103936110dd565b3480156106e3575f80fd5b50601f546103fd906001600160a01b031681565b348015610702575f80fd5b50610434610711366004612761565b60076020525f908152604090205460ff1681565b348015610730575f80fd5b506005546001600160a01b03166103fd565b34801561074d575f80fd5b506103c8611116565b348015610761575f80fd5b50610393610770366004612761565b611125565b348015610780575f80fd5b5061047361271081565b348015610795575f80fd5b506103936107a436600461257f565b6111b6565b3480156107b4575f80fd5b506103936107c3366004612790565b611239565b3480156107d3575f80fd5b5061047360105481565b3480156107e8575f80fd5b506104346107f7366004612613565b61135b565b348015610807575f80fd5b50610434610816366004612613565b6113d5565b348015610826575f80fd5b506020546103fd906001600160a01b031681565b348015610845575f80fd5b50610434610854366004612761565b60096020525f908152604090205460ff1681565b348015610873575f80fd5b506008546104349060ff1681565b34801561088c575f80fd5b50610473600a5481565b3480156108a1575f80fd5b5061047360135481565b3480156108b6575f80fd5b50610473601c5481565b3480156108cb575f80fd5b50601b546104349060ff1681565b3480156108e4575f80fd5b5061047360195481565b3480156108f9575f80fd5b5061047361090836600461272a565b6113e2565b348015610918575f80fd5b5061047360125481565b34801561092d575f80fd5b5061039361140c565b348015610941575f80fd5b50600c546103fd906001600160a01b031681565b348015610960575f80fd5b5061039361096f366004612761565b611442565b34801561097f575f80fd5b5061039361098e366004612761565b6114d3565b34801561099e575f80fd5b50610473600b5481565b3480156109b3575f80fd5b5061047360175481565b3480156109c8575f80fd5b506103936115bd565b6005546001600160a01b03163314610a045760405162461bcd60e51b81526004016109fb906127bc565b60405180910390fd5b610a106012600a6128e5565b6103e8610a1c60025490565b610a279060056128f3565b610a31919061290a565b610a3b919061290a565b811015610a745760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109fb565b610a806012600a6128e5565b610a8a90826128f3565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b6005546001600160a01b03163314610af05760405162461bcd60e51b81526004016109fb906127bc565b60138390556014829055601581905580610b0a8385612929565b610b149190612929565b60128190556040519081527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97906020015b60405180910390a1505050565b606060038054610b619061293c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8d9061293c565b8015610bd85780601f10610baf57610100808354040283529160200191610bd8565b820191905f5260205f20905b815481529060010190602001808311610bbb57829003601f168201915b5050505050905090565b5f33610bef81858561160d565b60019150505b92915050565b6005546001600160a01b03163314610c255760405162461bcd60e51b81526004016109fb906127bc565b610c316012600a6128e5565b6064610c3c60025490565b610c479060016128f3565b610c51919061290a565b610c5b919061290a565b811015610c945760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109fb565b610ca06012600a6128e5565b610caa90826128f3565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610abb565b6005546001600160a01b03163314610d095760405162461bcd60e51b81526004016109fb906127bc565b828114610d515760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016109fb565b5f5b83811015610db657610da433868684818110610d7157610d71612974565b9050602002016020810190610d869190612761565b858585818110610d9857610d98612974565b90506020020135611730565b80610dae81612988565b915050610d53565b5050505050565b5f33610dca8582856118d4565b610dd5858585611946565b506001949350505050565b5f33610bef818585610df283836113e2565b610dfc9190612929565b61160d565b6005546001600160a01b03163314610e2b5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b038216610e815760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109fb565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610ec5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee991906129a0565b9050610ef68383836119b9565b505050565b6005546001600160a01b03163314610f255760405162461bcd60e51b81526004016109fb906127bc565b600b54600a55565b6005546001600160a01b03163314610f575760405162461bcd60e51b81526004016109fb906127bc565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fca5760405162461bcd60e51b81526004016109fb906127bc565b601b805461ffff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110355760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b03821661107a5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109fb565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146111075760405162461bcd60e51b81526004016109fb906127bc565b6008805460ff19166001179055565b606060048054610b619061293c565b6005546001600160a01b0316331461114f5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0381166111945760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016109fb565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111e05760405162461bcd60e51b81526004016109fb906127bc565b600f83905560108290556011819055806111fa8385612929565b6112049190612929565b600e8190556040519081527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece050890602001610b45565b6005546001600160a01b031633146112635760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0382166112a85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109fb565b8061130057601d546001600160a01b03908116908316036113005760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109fb565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce91016110d1565b5f338161136882866113e2565b9050838110156113c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109fb565b610dd5828686840361160d565b5f33610bef818585611946565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146114365760405162461bcd60e51b81526004016109fb906127bc565b601b805460ff19169055565b6005546001600160a01b0316331461146c5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0381166114b15760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016109fb565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114fd5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0381166115625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115e75760405162461bcd60e51b81526004016109fb906127bc565b6103e86115f360025490565b6115fe9060056128f3565b611608919061290a565b600a55565b6001600160a01b03831661166f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109fb565b6001600160a01b0382166116d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109fb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117945760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109fb565b6001600160a01b0382166117f65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109fb565b6001600160a01b0383165f908152602081905260409020548181101561186d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109fb565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b5f6118df84846113e2565b90505f1981146118ce57818110156119395760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109fb565b6118ce848484840361160d565b611951838383611a0b565b6001600160a01b0383165f9081526006602052604090205460ff1615801561199157506001600160a01b0382165f9081526006602052604090205460ff16155b156119ae576119a1838383611d6f565b6119ab90826129b7565b90505b610ef6838383611730565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ef6908490611fb8565b6001600160a01b0383165f9081526006602052604090205460ff16158015611a4b57506001600160a01b0382165f9081526006602052604090205460ff16155b15611a975760085460ff16611a975760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b60448201526064016109fb565b601b54610100900460ff1615610ef657601b5460ff1615611b9057601e546001600160a01b03838116911614801590611ae857506001600160a01b0382165f9081526009602052604090205460ff16155b15611b9057325f908152601a602052604090205443118015611b2057506001600160a01b0382165f908152601a602052604090205443115b611b6c5760405162461bcd60e51b815260206004820152601760248201527f5472616e736665722044656c617920656e61626c65642e00000000000000000060448201526064016109fb565b325f908152601a602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f9081526009602052604090205460ff168015611bcf57506001600160a01b0382165f9081526007602052604090205460ff16155b15611c9a57600a54811115611c265760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e00000060448201526064016109fb565b600b546001600160a01b0383165f908152602081905260409020545b611c4c9083612929565b1115610ef65760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c6574000000000060448201526064016109fb565b6001600160a01b0382165f9081526009602052604090205460ff168015611cd957506001600160a01b0383165f9081526007602052604090205460ff16155b15611d3057600a54811115610ef65760405162461bcd60e51b815260206004820152601e60248201527f53656c6c207472616e7366657220616d6f756e742065786365656465642e000060448201526064016109fb565b6001600160a01b0382165f9081526007602052604090205460ff16610ef657600b546001600160a01b0383165f90815260208190526040902054611c42565b601c54305f90815260208190526040812054909111158015611d9a5750601b5462010000900460ff16155b8015611dbd57506001600160a01b0383165f9081526009602052604090205460ff165b15611de857601b805462ff0000191662010000179055611ddb612089565b601b805462ff0000191690555b6001600160a01b0383165f9081526009602052604081205460ff168015611e1057505f601254115b15611ec65761271060125484611e2691906128f3565b611e30919061290a565b905060125460145482611e4391906128f3565b611e4d919061290a565b60185f828254611e5d9190612929565b9091555050601254601354611e7290836128f3565b611e7c919061290a565b60175f828254611e8c9190612929565b9091555050601254601554611ea190836128f3565b611eab919061290a565b60195f828254611ebb9190612929565b90915550611f9f9050565b6001600160a01b0385165f9081526009602052604090205460ff168015611eee57505f600e54115b15611f9f57612710600e5484611f0491906128f3565b611f0e919061290a565b9050600e54600f5482611f2191906128f3565b611f2b919061290a565b60175f828254611f3b9190612929565b9091555050600e54601054611f5090836128f3565b611f5a919061290a565b60185f828254611f6a9190612929565b9091555050600e54601154611f7f90836128f3565b611f89919061290a565b60195f828254611f999190612929565b90915550505b8015611fb057611fb0853083611730565b949350505050565b5f61200c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122af9092919063ffffffff16565b805190915015610ef6578080602001905181019061202a91906129ca565b610ef65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fb565b305f9081526020819052604081205490505f6019546017546018546120ae9190612929565b6120b89190612929565b90508115806120c5575080155b156120ce575050565b601c546120dc9060286128f3565b8211156120f457601c546120f19060286128f3565b91505b601854156121b1575f816018548461210c91906128f3565b612116919061290a565b601d549091506121319030906001600160a01b031683611730565b601d5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561217d575f80fd5b505af192505050801561218e575060015b5061219981846129b7565b9250601854826121a991906129b7565b5f6018559150505b5f811180156121bf57505f82115b156122ab576121cd826122bd565b60195447905f9083906121e090846128f3565b6121ea919061290a565b90505f811561224b57600d546040516001600160a01b039091169083905f81818185875af1925050503d805f811461223d576040519150601f19603f3d011682016040523d82523d5f602084013e612242565b606091505b50505f60195590505b4715610db657600c546040516001600160a01b039091169047905f81818185875af1925050503d805f811461229b576040519150601f19603f3d011682016040523d82523d5f602084013e6122a0565b606091505b50505f601755505050505b5050565b6060611fb084845f856123f4565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122f0576122f0612974565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236b91906129e5565b8160018151811061237e5761237e612974565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815291169063791ac947906123c39085905f90869030904290600401612a00565b5f604051808303815f87803b1580156123da575f80fd5b505af11580156123ec573d5f803e3d5ffd5b505050505050565b6060824710156124555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fb565b5f80866001600160a01b031685876040516124709190612a6f565b5f6040518083038185875af1925050503d805f81146124aa576040519150601f19603f3d011682016040523d82523d5f602084013e6124af565b606091505b50915091506124c0878383876124cb565b979650505050505050565b606083156125395782515f03612532576001600160a01b0385163b6125325760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fb565b5081611fb0565b611fb0838381511561254e5781518083602001fd5b8060405162461bcd60e51b81526004016109fb91906125ca565b5f60208284031215612578575f80fd5b5035919050565b5f805f60608486031215612591575f80fd5b505081359360208301359350604090920135919050565b5f5b838110156125c25781810151838201526020016125aa565b50505f910152565b602081525f82518060208401526125e88160408501602087016125a8565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612610575f80fd5b50565b5f8060408385031215612624575f80fd5b823561262f816125fc565b946020939093013593505050565b5f8083601f84011261264d575f80fd5b50813567ffffffffffffffff811115612664575f80fd5b6020830191508360208260051b850101111561267e575f80fd5b9250929050565b5f805f8060408587031215612698575f80fd5b843567ffffffffffffffff808211156126af575f80fd5b6126bb8883890161263d565b909650945060208701359150808211156126d3575f80fd5b506126e08782880161263d565b95989497509550505050565b5f805f606084860312156126fe575f80fd5b8335612709816125fc565b92506020840135612719816125fc565b929592945050506040919091013590565b5f806040838503121561273b575f80fd5b8235612746816125fc565b91506020830135612756816125fc565b809150509250929050565b5f60208284031215612771575f80fd5b813561277c816125fc565b9392505050565b8015158114612610575f80fd5b5f80604083850312156127a1575f80fd5b82356127ac816125fc565b9150602083013561275681612783565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561283f57815f1904821115612825576128256127f1565b8085161561283257918102915b93841c939080029061280a565b509250929050565b5f8261285557506001610bf5565b8161286157505f610bf5565b816001811461287757600281146128815761289d565b6001915050610bf5565b60ff841115612892576128926127f1565b50506001821b610bf5565b5060208310610133831016604e8410600b84101617156128c0575081810a610bf5565b6128ca8383612805565b805f19048211156128dd576128dd6127f1565b029392505050565b5f61277c60ff841683612847565b8082028115828204841417610bf557610bf56127f1565b5f8261292457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610bf557610bf56127f1565b600181811c9082168061295057607f821691505b60208210810361296e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612999576129996127f1565b5060010190565b5f602082840312156129b0575f80fd5b5051919050565b81810381811115610bf557610bf56127f1565b5f602082840312156129da575f80fd5b815161277c81612783565b5f602082840312156129f5575f80fd5b815161277c816125fc565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612a4e5784516001600160a01b031683529383019391830191600101612a29565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251612a808184602087016125a8565b919091019291505056fea2646970667358221220f2bdcaf27af5bdb91f1aa07c8a10b73289f68325c743aea0010cddb47f24984264736f6c63430008150033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000950656e6e7977697365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024954000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610369575f3560e01c80638a8c523c116101c8578063bbc0c742116100fd578063e27a55fe1161009d578063f2fde38b1161006d578063f2fde38b14610974578063f8b45b0514610993578063fb002c97146109a8578063fb591a14146109bd575f80fd5b8063e27a55fe1461090d578063e884f26014610922578063ea4cfe1214610936578063ea6debd014610955575f80fd5b8063c78d0fa0116100d8578063c78d0fa0146108ab578063c876d0b9146108c0578063d1d13835146108d9578063dd62ed3e146108ee575f80fd5b8063bbc0c74214610868578063c3f70b5214610881578063c43c0f5814610896575f80fd5b8063a0a485ca11610168578063a457c2d711610143578063a457c2d7146107dd578063a9059cbb146107fc578063ad5c46481461081b578063b0249cc61461083a575f80fd5b8063a0a485ca1461078a578063a13d1a2b146107a9578063a2cbba28146107c8575f80fd5b80638da5cb5b116101a35780638da5cb5b1461072557806395d89b411461074257806398733dc8146107565780639e93ad8e14610775575f80fd5b80638a8c523c146106c45780638c7c9e0c146106d85780638d3e6e40146106f7575f80fd5b8063441f078a1161029e5780636161b8811161023e57806370a082311161021957806370a0823114610649578063715018a61461067d578063751039fc1461069157806377b27d1f146106a5575f80fd5b80636161b8811461060b57806366cdc1de1461061f5780636ab9120614610634575f80fd5b80635431c94e116102795780635431c94e146105945780635a90a49e146105b35780635df6e68e146105e15780635ec13e45146105f6575f80fd5b8063441f078a14610542578063452ed4f1146105575780634a62bb6514610576575f80fd5b80631a8145bb116103095780632307b441116102e45780632307b441146104ca57806323b872dd146104e9578063313ce567146105085780633950935114610523575f80fd5b80631a8145bb146104815780631c499ab0146104965780631f3ecf65146104b5575f80fd5b80630758d924116103445780630758d924146103de578063095ea7b3146104155780630de372871461044457806318160ddd14610463575f80fd5b80630517d13d1461037457806305f936501461039557806306fdde03146103b4575f80fd5b3661037057005b5f80fd5b34801561037f575f80fd5b5061039361038e366004612568565b6109d1565b005b3480156103a0575f80fd5b506103936103af36600461257f565b610ac6565b3480156103bf575f80fd5b506103c8610b52565b6040516103d591906125ca565b60405180910390f35b3480156103e9575f80fd5b50601e546103fd906001600160a01b031681565b6040516001600160a01b0390911681526020016103d5565b348015610420575f80fd5b5061043461042f366004612613565b610be2565b60405190151581526020016103d5565b34801561044f575f80fd5b50600d546103fd906001600160a01b031681565b34801561046e575f80fd5b506002545b6040519081526020016103d5565b34801561048c575f80fd5b5061047360185481565b3480156104a1575f80fd5b506103936104b0366004612568565b610bfb565b3480156104c0575f80fd5b5061047360165481565b3480156104d5575f80fd5b506103936104e4366004612685565b610cdf565b3480156104f4575f80fd5b506104346105033660046126ec565b610dbd565b348015610513575f80fd5b50604051601281526020016103d5565b34801561052e575f80fd5b5061043461053d366004612613565b610de0565b34801561054d575f80fd5b5061047360155481565b348015610562575f80fd5b50601d546103fd906001600160a01b031681565b348015610581575f80fd5b50601b5461043490610100900460ff1681565b34801561059f575f80fd5b506103936105ae36600461272a565b610e01565b3480156105be575f80fd5b506104346105cd366004612761565b60066020525f908152604090205460ff1681565b3480156105ec575f80fd5b50610473600e5481565b348015610601575f80fd5b50610473600f5481565b348015610616575f80fd5b50610393610efb565b34801561062a575f80fd5b5061047360115481565b34801561063f575f80fd5b5061047360145481565b348015610654575f80fd5b50610473610663366004612761565b6001600160a01b03165f9081526020819052604090205490565b348015610688575f80fd5b50610393610f2d565b34801561069c575f80fd5b50610393610fa0565b3480156106b0575f80fd5b506103936106bf366004612790565b61100b565b3480156106cf575f80fd5b506103936110dd565b3480156106e3575f80fd5b50601f546103fd906001600160a01b031681565b348015610702575f80fd5b50610434610711366004612761565b60076020525f908152604090205460ff1681565b348015610730575f80fd5b506005546001600160a01b03166103fd565b34801561074d575f80fd5b506103c8611116565b348015610761575f80fd5b50610393610770366004612761565b611125565b348015610780575f80fd5b5061047361271081565b348015610795575f80fd5b506103936107a436600461257f565b6111b6565b3480156107b4575f80fd5b506103936107c3366004612790565b611239565b3480156107d3575f80fd5b5061047360105481565b3480156107e8575f80fd5b506104346107f7366004612613565b61135b565b348015610807575f80fd5b50610434610816366004612613565b6113d5565b348015610826575f80fd5b506020546103fd906001600160a01b031681565b348015610845575f80fd5b50610434610854366004612761565b60096020525f908152604090205460ff1681565b348015610873575f80fd5b506008546104349060ff1681565b34801561088c575f80fd5b50610473600a5481565b3480156108a1575f80fd5b5061047360135481565b3480156108b6575f80fd5b50610473601c5481565b3480156108cb575f80fd5b50601b546104349060ff1681565b3480156108e4575f80fd5b5061047360195481565b3480156108f9575f80fd5b5061047361090836600461272a565b6113e2565b348015610918575f80fd5b5061047360125481565b34801561092d575f80fd5b5061039361140c565b348015610941575f80fd5b50600c546103fd906001600160a01b031681565b348015610960575f80fd5b5061039361096f366004612761565b611442565b34801561097f575f80fd5b5061039361098e366004612761565b6114d3565b34801561099e575f80fd5b50610473600b5481565b3480156109b3575f80fd5b5061047360175481565b3480156109c8575f80fd5b506103936115bd565b6005546001600160a01b03163314610a045760405162461bcd60e51b81526004016109fb906127bc565b60405180910390fd5b610a106012600a6128e5565b6103e8610a1c60025490565b610a279060056128f3565b610a31919061290a565b610a3b919061290a565b811015610a745760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109fb565b610a806012600a6128e5565b610a8a90826128f3565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b6005546001600160a01b03163314610af05760405162461bcd60e51b81526004016109fb906127bc565b60138390556014829055601581905580610b0a8385612929565b610b149190612929565b60128190556040519081527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97906020015b60405180910390a1505050565b606060038054610b619061293c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8d9061293c565b8015610bd85780601f10610baf57610100808354040283529160200191610bd8565b820191905f5260205f20905b815481529060010190602001808311610bbb57829003601f168201915b5050505050905090565b5f33610bef81858561160d565b60019150505b92915050565b6005546001600160a01b03163314610c255760405162461bcd60e51b81526004016109fb906127bc565b610c316012600a6128e5565b6064610c3c60025490565b610c479060016128f3565b610c51919061290a565b610c5b919061290a565b811015610c945760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109fb565b610ca06012600a6128e5565b610caa90826128f3565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610abb565b6005546001600160a01b03163314610d095760405162461bcd60e51b81526004016109fb906127bc565b828114610d515760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016109fb565b5f5b83811015610db657610da433868684818110610d7157610d71612974565b9050602002016020810190610d869190612761565b858585818110610d9857610d98612974565b90506020020135611730565b80610dae81612988565b915050610d53565b5050505050565b5f33610dca8582856118d4565b610dd5858585611946565b506001949350505050565b5f33610bef818585610df283836113e2565b610dfc9190612929565b61160d565b6005546001600160a01b03163314610e2b5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b038216610e815760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109fb565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610ec5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee991906129a0565b9050610ef68383836119b9565b505050565b6005546001600160a01b03163314610f255760405162461bcd60e51b81526004016109fb906127bc565b600b54600a55565b6005546001600160a01b03163314610f575760405162461bcd60e51b81526004016109fb906127bc565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fca5760405162461bcd60e51b81526004016109fb906127bc565b601b805461ffff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110355760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b03821661107a5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109fb565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146111075760405162461bcd60e51b81526004016109fb906127bc565b6008805460ff19166001179055565b606060048054610b619061293c565b6005546001600160a01b0316331461114f5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0381166111945760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016109fb565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111e05760405162461bcd60e51b81526004016109fb906127bc565b600f83905560108290556011819055806111fa8385612929565b6112049190612929565b600e8190556040519081527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece050890602001610b45565b6005546001600160a01b031633146112635760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0382166112a85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109fb565b8061130057601d546001600160a01b03908116908316036113005760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109fb565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce91016110d1565b5f338161136882866113e2565b9050838110156113c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109fb565b610dd5828686840361160d565b5f33610bef818585611946565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146114365760405162461bcd60e51b81526004016109fb906127bc565b601b805460ff19169055565b6005546001600160a01b0316331461146c5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0381166114b15760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016109fb565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114fd5760405162461bcd60e51b81526004016109fb906127bc565b6001600160a01b0381166115625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115e75760405162461bcd60e51b81526004016109fb906127bc565b6103e86115f360025490565b6115fe9060056128f3565b611608919061290a565b600a55565b6001600160a01b03831661166f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109fb565b6001600160a01b0382166116d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109fb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117945760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109fb565b6001600160a01b0382166117f65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109fb565b6001600160a01b0383165f908152602081905260409020548181101561186d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109fb565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b5f6118df84846113e2565b90505f1981146118ce57818110156119395760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109fb565b6118ce848484840361160d565b611951838383611a0b565b6001600160a01b0383165f9081526006602052604090205460ff1615801561199157506001600160a01b0382165f9081526006602052604090205460ff16155b156119ae576119a1838383611d6f565b6119ab90826129b7565b90505b610ef6838383611730565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ef6908490611fb8565b6001600160a01b0383165f9081526006602052604090205460ff16158015611a4b57506001600160a01b0382165f9081526006602052604090205460ff16155b15611a975760085460ff16611a975760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b60448201526064016109fb565b601b54610100900460ff1615610ef657601b5460ff1615611b9057601e546001600160a01b03838116911614801590611ae857506001600160a01b0382165f9081526009602052604090205460ff16155b15611b9057325f908152601a602052604090205443118015611b2057506001600160a01b0382165f908152601a602052604090205443115b611b6c5760405162461bcd60e51b815260206004820152601760248201527f5472616e736665722044656c617920656e61626c65642e00000000000000000060448201526064016109fb565b325f908152601a602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f9081526009602052604090205460ff168015611bcf57506001600160a01b0382165f9081526007602052604090205460ff16155b15611c9a57600a54811115611c265760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e00000060448201526064016109fb565b600b546001600160a01b0383165f908152602081905260409020545b611c4c9083612929565b1115610ef65760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c6574000000000060448201526064016109fb565b6001600160a01b0382165f9081526009602052604090205460ff168015611cd957506001600160a01b0383165f9081526007602052604090205460ff16155b15611d3057600a54811115610ef65760405162461bcd60e51b815260206004820152601e60248201527f53656c6c207472616e7366657220616d6f756e742065786365656465642e000060448201526064016109fb565b6001600160a01b0382165f9081526007602052604090205460ff16610ef657600b546001600160a01b0383165f90815260208190526040902054611c42565b601c54305f90815260208190526040812054909111158015611d9a5750601b5462010000900460ff16155b8015611dbd57506001600160a01b0383165f9081526009602052604090205460ff165b15611de857601b805462ff0000191662010000179055611ddb612089565b601b805462ff0000191690555b6001600160a01b0383165f9081526009602052604081205460ff168015611e1057505f601254115b15611ec65761271060125484611e2691906128f3565b611e30919061290a565b905060125460145482611e4391906128f3565b611e4d919061290a565b60185f828254611e5d9190612929565b9091555050601254601354611e7290836128f3565b611e7c919061290a565b60175f828254611e8c9190612929565b9091555050601254601554611ea190836128f3565b611eab919061290a565b60195f828254611ebb9190612929565b90915550611f9f9050565b6001600160a01b0385165f9081526009602052604090205460ff168015611eee57505f600e54115b15611f9f57612710600e5484611f0491906128f3565b611f0e919061290a565b9050600e54600f5482611f2191906128f3565b611f2b919061290a565b60175f828254611f3b9190612929565b9091555050600e54601054611f5090836128f3565b611f5a919061290a565b60185f828254611f6a9190612929565b9091555050600e54601154611f7f90836128f3565b611f89919061290a565b60195f828254611f999190612929565b90915550505b8015611fb057611fb0853083611730565b949350505050565b5f61200c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122af9092919063ffffffff16565b805190915015610ef6578080602001905181019061202a91906129ca565b610ef65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fb565b305f9081526020819052604081205490505f6019546017546018546120ae9190612929565b6120b89190612929565b90508115806120c5575080155b156120ce575050565b601c546120dc9060286128f3565b8211156120f457601c546120f19060286128f3565b91505b601854156121b1575f816018548461210c91906128f3565b612116919061290a565b601d549091506121319030906001600160a01b031683611730565b601d5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561217d575f80fd5b505af192505050801561218e575060015b5061219981846129b7565b9250601854826121a991906129b7565b5f6018559150505b5f811180156121bf57505f82115b156122ab576121cd826122bd565b60195447905f9083906121e090846128f3565b6121ea919061290a565b90505f811561224b57600d546040516001600160a01b039091169083905f81818185875af1925050503d805f811461223d576040519150601f19603f3d011682016040523d82523d5f602084013e612242565b606091505b50505f60195590505b4715610db657600c546040516001600160a01b039091169047905f81818185875af1925050503d805f811461229b576040519150601f19603f3d011682016040523d82523d5f602084013e6122a0565b606091505b50505f601755505050505b5050565b6060611fb084845f856123f4565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122f0576122f0612974565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236b91906129e5565b8160018151811061237e5761237e612974565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815291169063791ac947906123c39085905f90869030904290600401612a00565b5f604051808303815f87803b1580156123da575f80fd5b505af11580156123ec573d5f803e3d5ffd5b505050505050565b6060824710156124555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fb565b5f80866001600160a01b031685876040516124709190612a6f565b5f6040518083038185875af1925050503d805f81146124aa576040519150601f19603f3d011682016040523d82523d5f602084013e6124af565b606091505b50915091506124c0878383876124cb565b979650505050505050565b606083156125395782515f03612532576001600160a01b0385163b6125325760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fb565b5081611fb0565b611fb0838381511561254e5781518083602001fd5b8060405162461bcd60e51b81526004016109fb91906125ca565b5f60208284031215612578575f80fd5b5035919050565b5f805f60608486031215612591575f80fd5b505081359360208301359350604090920135919050565b5f5b838110156125c25781810151838201526020016125aa565b50505f910152565b602081525f82518060208401526125e88160408501602087016125a8565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612610575f80fd5b50565b5f8060408385031215612624575f80fd5b823561262f816125fc565b946020939093013593505050565b5f8083601f84011261264d575f80fd5b50813567ffffffffffffffff811115612664575f80fd5b6020830191508360208260051b850101111561267e575f80fd5b9250929050565b5f805f8060408587031215612698575f80fd5b843567ffffffffffffffff808211156126af575f80fd5b6126bb8883890161263d565b909650945060208701359150808211156126d3575f80fd5b506126e08782880161263d565b95989497509550505050565b5f805f606084860312156126fe575f80fd5b8335612709816125fc565b92506020840135612719816125fc565b929592945050506040919091013590565b5f806040838503121561273b575f80fd5b8235612746816125fc565b91506020830135612756816125fc565b809150509250929050565b5f60208284031215612771575f80fd5b813561277c816125fc565b9392505050565b8015158114612610575f80fd5b5f80604083850312156127a1575f80fd5b82356127ac816125fc565b9150602083013561275681612783565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561283f57815f1904821115612825576128256127f1565b8085161561283257918102915b93841c939080029061280a565b509250929050565b5f8261285557506001610bf5565b8161286157505f610bf5565b816001811461287757600281146128815761289d565b6001915050610bf5565b60ff841115612892576128926127f1565b50506001821b610bf5565b5060208310610133831016604e8410600b84101617156128c0575081810a610bf5565b6128ca8383612805565b805f19048211156128dd576128dd6127f1565b029392505050565b5f61277c60ff841683612847565b8082028115828204841417610bf557610bf56127f1565b5f8261292457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610bf557610bf56127f1565b600181811c9082168061295057607f821691505b60208210810361296e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612999576129996127f1565b5060010190565b5f602082840312156129b0575f80fd5b5051919050565b81810381811115610bf557610bf56127f1565b5f602082840312156129da575f80fd5b815161277c81612783565b5f602082840312156129f5575f80fd5b815161277c816125fc565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612a4e5784516001600160a01b031683529383019391830191600101612a29565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251612a808184602087016125a8565b919091019291505056fea2646970667358221220f2bdcaf27af5bdb91f1aa07c8a10b73289f68325c743aea0010cddb47f24984264736f6c63430008150033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000950656e6e7977697365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024954000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Pennywise
Arg [1] : _symbol (string): IT

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 50656e6e79776973650000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 4954000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40759:12338:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50370:287;;;;;;;;;;-1:-1:-1;50370:287:0;;;;;:::i;:::-;;:::i;:::-;;51297:360;;;;;;;;;;-1:-1:-1;51297:360:0;;;;;:::i;:::-;;:::i;14072:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41892:27;;;;;;;;;;-1:-1:-1;41892:27:0;;;;-1:-1:-1;;;;;41892:27:0;;;;;;-1:-1:-1;;;;;1359:32:1;;;1341:51;;1329:2;1314:18;41892:27:0;1176:222:1;16432:201:0;;;;;;;;;;-1:-1:-1;16432:201:0;;;;;:::i;:::-;;:::i;:::-;;;2024:14:1;;2017:22;1999:41;;1987:2;1972:18;16432:201:0;1859:187:1;41110:27:0;;;;;;;;;;-1:-1:-1;41110:27:0;;;;-1:-1:-1;;;;;41110:27:0;;;15201:108;;;;;;;;;;-1:-1:-1;15289:12:0;;15201:108;;;2405:25:1;;;2393:2;2378:18;15201:108:0;2259:177:1;41510:33:0;;;;;;;;;;;;;;;;50665:266;;;;;;;;;;-1:-1:-1;50665:266:0;;;;;:::i;:::-;;:::i;41434:26::-;;;;;;;;;;;;;;;;52101:333;;;;;;;;;;-1:-1:-1;52101:333:0;;;;;:::i;:::-;;:::i;17213:261::-;;;;;;;;;;-1:-1:-1;17213:261:0;;;;;:::i;:::-;;:::i;15043:93::-;;;;;;;;;;-1:-1:-1;15043:93:0;;15126:2;4194:36:1;;4182:2;4167:18;15043:93:0;4052:184:1;17883:238:0;;;;;;;;;;-1:-1:-1;17883:238:0;;;;;:::i;:::-;;:::i;41400:27::-;;;;;;;;;;;;;;;;41864:21;;;;;;;;;;-1:-1:-1;41864:21:0;;;;-1:-1:-1;;;;;41864:21:0;;;41755:33;;;;;;;;;;-1:-1:-1;41755:33:0;;;;;;;;;;;52442:296;;;;;;;;;;-1:-1:-1;52442:296:0;;;;;:::i;:::-;;:::i;40805:47::-;;;;;;;;;;-1:-1:-1;40805:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;41146:26;;;;;;;;;;;;;;;;41179:31;;;;;;;;;;;;;;;;49645:101;;;;;;;;;;;;;:::i;41254:26::-;;;;;;;;;;;;;;;;41362:31;;;;;;;;;;;;;;;;15372:127;;;;;;;;;;-1:-1:-1;15372:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15473:18:0;15446:7;15473:18;;;;;;;;;;;;15372:127;25603:150;;;;;;;;;;;;;:::i;51756:231::-;;;;;;;;;;;;;:::i;49754:247::-;;;;;;;;;;-1:-1:-1;49754:247:0;;;;;:::i;:::-;;:::i;51665:83::-;;;;;;;;;;;;;:::i;41926:25::-;;;;;;;;;;-1:-1:-1;41926:25:0;;;;-1:-1:-1;;;;;41926:25:0;;;40859:49;;;;;;;;;;-1:-1:-1;40859:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25389:79;;;;;;;;;;-1:-1:-1;25454:6:0;;-1:-1:-1;;;;;25454:6:0;25389:79;;14291:104;;;;;;;;;;;;;:::i;52929:165::-;;;;;;;;;;-1:-1:-1;52929:165:0;;;;;:::i;:::-;;:::i;41984:43::-;;;;;;;;;;;;42022:5;41984:43;;50939:350;;;;;;;;;;-1:-1:-1;50939:350:0;;;;;:::i;:::-;;:::i;50009:353::-;;;;;;;;;;-1:-1:-1;50009:353:0;;;;;:::i;:::-;;:::i;41217:30::-;;;;;;;;;;;;;;;;18624:436;;;;;;;;;;-1:-1:-1;18624:436:0;;;;;:::i;:::-;;:::i;15705:193::-;;;;;;;;;;-1:-1:-1;15705:193:0;;;;;:::i;:::-;;:::i;41958:17::-;;;;;;;;;;-1:-1:-1;41958:17:0;;;;-1:-1:-1;;;;;41958:17:0;;;40951:42;;;;;;;;;;-1:-1:-1;40951:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40917:25;;;;;;;;;;-1:-1:-1;40917:25:0;;;;;;;;41002:29;;;;;;;;;;;;;;;;41323:32;;;;;;;;;;;;;;;;41825:30;;;;;;;;;;;;;;;;41707:39;;;;;;;;;;-1:-1:-1;41707:39:0;;;;;;;;41550:29;;;;;;;;;;;;;;;;15961:151;;;;;;;;;;-1:-1:-1;15961:151:0;;;;;:::i;:::-;;:::i;41289:27::-;;;;;;;;;;;;;;;;51995:98;;;;;;;;;;;;;:::i;41071:32::-;;;;;;;;;;-1:-1:-1;41071:32:0;;;;-1:-1:-1;;;;;41071:32:0;;;52746:175;;;;;;;;;;-1:-1:-1;52746:175:0;;;;;:::i;:::-;;:::i;25761:244::-;;;;;;;;;;-1:-1:-1;25761:244:0;;;;;:::i;:::-;;:::i;41038:24::-;;;;;;;;;;;;;;;;41469:34;;;;;;;;;;;;;;;;49523:114;;;;;;;;;;;;;:::i;50370:287::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;;;;;;;;;50508:14:::1;15126:2:::0;50508::::1;:14;:::i;:::-;50501:4;50481:13;15289:12:::0;;;15201:108;50481:13:::1;:17;::::0;50497:1:::1;50481:17;:::i;:::-;:24;;;;:::i;:::-;50480:43;;;;:::i;:::-;50462:14;:61;;50454:81;;;::::0;-1:-1:-1;;;50454:81:0;;8321:2:1;50454:81:0::1;::::0;::::1;8303:21:1::0;8360:1;8340:18;;;8333:29;-1:-1:-1;;;8378:18:1;;;8371:37;8425:18;;50454:81:0::1;8119:330:1::0;50454:81:0::1;50581:14;15126:2:::0;50581::::1;:14;:::i;:::-;50563:33;::::0;:14;:33:::1;:::i;:::-;50546:14;:50:::0;;;50612:37:::1;::::0;2405:25:1;;;50612:37:0::1;::::0;2393:2:1;2378:18;50612:37:0::1;;;;;;;;50370:287:::0;:::o;51297:360::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;51416:17:::1;:34:::0;;;51461:16:::1;:32:::0;;;51504:12:::1;:24:::0;;;51519:9;51554:36:::1;51480:13:::0;51436:14;51554:36:::1;:::i;:::-;:51;;;;:::i;:::-;51539:12;:66:::0;;;51621:28:::1;::::0;2405:25:1;;;51621:28:0::1;::::0;2393:2:1;2378:18;51621:28:0::1;;;;;;;;51297:360:::0;;;:::o;14072:100::-;14126:13;14159:5;14152:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14072:100;:::o;16432:201::-;16515:4;10058:10;16571:32;10058:10;16587:7;16596:6;16571:8;:32::i;:::-;16621:4;16614:11;;;16432:201;;;;;:::o;50665:266::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;50797:14:::1;15126:2:::0;50797::::1;:14;:::i;:::-;50791:3;50771:13;15289:12:::0;;;15201:108;50771:13:::1;:17;::::0;50787:1:::1;50771:17;:::i;:::-;:23;;;;:::i;:::-;50770:42;;;;:::i;:::-;50752:14;:60;;50744:80;;;::::0;-1:-1:-1;;;50744:80:0;;8321:2:1;50744:80:0::1;::::0;::::1;8303:21:1::0;8360:1;8340:18;;;8333:29;-1:-1:-1;;;8378:18:1;;;8371:37;8425:18;;50744:80:0::1;8119:330:1::0;50744:80:0::1;50865:14;15126:2:::0;50865::::1;:14;:::i;:::-;50847:33;::::0;:14;:33:::1;:::i;:::-;50835:9;:45:::0;;;50896:27:::1;::::0;2405:25:1;;;50896:27:0::1;::::0;2393:2:1;2378:18;50896:27:0::1;2259:177:1::0;52101:333:0;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;52226:37;;::::1;52218:72;;;::::0;-1:-1:-1;;;52218:72:0;;9171:2:1;52218:72:0::1;::::0;::::1;9153:21:1::0;9210:2;9190:18;;;9183:30;-1:-1:-1;;;9229:18:1;;;9222:52;9291:18;;52218:72:0::1;8969:346:1::0;52218:72:0::1;52305:9;52301:126;52320:18:::0;;::::1;52301:126;;;52359:56;52375:10;52387:7;;52395:1;52387:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;52399:12;;52412:1;52399:15;;;;;;;:::i;:::-;;;;;;;52359;:56::i;:::-;52340:3:::0;::::1;::::0;::::1;:::i;:::-;;;;52301:126;;;;52101:333:::0;;;;:::o;17213:261::-;17310:4;10058:10;17368:38;17384:4;10058:10;17399:6;17368:15;:38::i;:::-;17417:27;17427:4;17433:2;17437:6;17417:9;:27::i;:::-;-1:-1:-1;17462:4:0;;17213:261;-1:-1:-1;;;;17213:261:0:o;17883:238::-;17971:4;10058:10;18027:64;10058:10;18043:7;18080:10;18052:25;10058:10;18043:7;18052:9;:25::i;:::-;:38;;;;:::i;:::-;18027:8;:64::i;52442:296::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52531:20:0;::::1;52523:59;;;::::0;-1:-1:-1;;;52523:59:0;;9794:2:1;52523:59:0::1;::::0;::::1;9776:21:1::0;9833:2;9813:18;;;9806:30;9872:28;9852:18;;;9845:56;9918:18;;52523:59:0::1;9592:350:1::0;52523:59:0::1;52620:39;::::0;-1:-1:-1;;;52620:39:0;;52653:4:::1;52620:39;::::0;::::1;1341:51:1::0;52593:24:0::1;::::0;-1:-1:-1;;;;;52620:24:0;::::1;::::0;::::1;::::0;1314:18:1;;52620:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52593:66;;52670:60;52700:6;52708:3;52713:16;52670:22;:60::i;:::-;52512:226;52442:296:::0;;:::o;49645:101::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;49729:9:::1;::::0;49712:14:::1;:26:::0;49645:101::o;25603:150::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;25696:6:::1;::::0;25675:40:::1;::::0;25712:1:::1;::::0;-1:-1:-1;;;;;25696:6:0::1;::::0;25675:40:::1;::::0;25712:1;;25675:40:::1;25726:6;:19:::0;;-1:-1:-1;;;;;;25726:19:0::1;::::0;;25603:150::o;51756:231::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;51810:14:::1;:22:::0;;-1:-1:-1;;51843:28:0;;;15289:12;;51882:14:::1;:30:::0;15289:12;;51923:9:::1;:25:::0;51964:15:::1;::::0;::::1;::::0;;;::::1;51756:231::o:0;49754:247::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49853:22:0;::::1;49845:47;;;::::0;-1:-1:-1;;;49845:47:0;;10338:2:1;49845:47:0::1;::::0;::::1;10320:21:1::0;10377:2;10357:18;;;10350:30;-1:-1:-1;;;10396:18:1;;;10389:42;10448:18;;49845:47:0::1;10136:336:1::0;49845:47:0::1;-1:-1:-1::0;;;;;49903:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;49903:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;49955:38;;10645:51:1;;;10712:18;;;10705:50;49955:38:0::1;::::0;10618:18:1;49955:38:0::1;;;;;;;;49754:247:::0;;:::o;51665:83::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;51720:13:::1;:20:::0;;-1:-1:-1;;51720:20:0::1;51736:4;51720:20;::::0;;51665:83::o;14291:104::-;14347:13;14380:7;14373:14;;;;;:::i;52929:165::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53013:22:0;::::1;53005:47;;;::::0;-1:-1:-1;;;53005:47:0;;10968:2:1;53005:47:0::1;::::0;::::1;10950:21:1::0;11007:2;10987:18;;;10980:30;-1:-1:-1;;;11026:18:1;;;11019:42;11078:18;;53005:47:0::1;10766:336:1::0;53005:47:0::1;53063:12;:23:::0;;-1:-1:-1;;;;;;53063:23:0::1;-1:-1:-1::0;;;;;53063:23:0;;;::::1;::::0;;;::::1;::::0;;52929:165::o;50939:350::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;51057:16:::1;:33:::0;;;51101:15:::1;:31:::0;;;51143:11:::1;:23:::0;;;51157:9;51191:34:::1;51119:13:::0;51076:14;51191:34:::1;:::i;:::-;:48;;;;:::i;:::-;51177:11;:62:::0;;;51255:26:::1;::::0;2405:25:1;;;51255:26:0::1;::::0;2393:2:1;2378:18;51255:26:0::1;2259:177:1::0;50009:353:0;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50110:22:0;::::1;50102:47;;;::::0;-1:-1:-1;;;50102:47:0;;10338:2:1;50102:47:0::1;::::0;::::1;10320:21:1::0;10377:2;10357:18;;;10350:30;-1:-1:-1;;;10396:18:1;;;10389:42;10448:18;;50102:47:0::1;10136:336:1::0;50102:47:0::1;50164:9;50160:90;;50209:6;::::0;-1:-1:-1;;;;;50209:6:0;;::::1;50197:18:::0;;::::1;::::0;50189:49:::1;;;::::0;-1:-1:-1;;;50189:49:0;;11309:2:1;50189:49:0::1;::::0;::::1;11291:21:1::0;11348:2;11328:18;;;11321:30;-1:-1:-1;;;11367:18:1;;;11360:48;11425:18;;50189:49:0::1;11107:342:1::0;50189:49:0::1;-1:-1:-1::0;;;;;50260:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;50260:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;50314:40;;10645:51:1;;;10712:18;;;10705:50;50314:40:0::1;::::0;10618:18:1;50314:40:0::1;10477:284:1::0;18624:436:0;18717:4;10058:10;18717:4;18800:25;10058:10;18817:7;18800:9;:25::i;:::-;18773:52;;18864:15;18844:16;:35;;18836:85;;;;-1:-1:-1;;;18836:85:0;;11656:2:1;18836:85:0;;;11638:21:1;11695:2;11675:18;;;11668:30;11734:34;11714:18;;;11707:62;-1:-1:-1;;;11785:18:1;;;11778:35;11830:19;;18836:85:0;11454:401:1;18836:85:0;18957:60;18966:5;18973:7;19001:15;18982:16;:34;18957:8;:60::i;15705:193::-;15784:4;10058:10;15840:28;10058:10;15857:2;15861:6;15840:9;:28::i;15961:151::-;-1:-1:-1;;;;;16077:18:0;;;16050:7;16077:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15961:151::o;51995:98::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;52057:20:::1;:28:::0;;-1:-1:-1;;52057:28:0::1;::::0;;51995:98::o;52746:175::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52835:22:0;::::1;52827:47;;;::::0;-1:-1:-1;;;52827:47:0;;10968:2:1;52827:47:0::1;::::0;::::1;10950:21:1::0;11007:2;10987:18;;;10980:30;-1:-1:-1;;;11026:18:1;;;11019:42;11078:18;;52827:47:0::1;10766:336:1::0;52827:47:0::1;52885:17;:28:::0;;-1:-1:-1;;;;;;52885:28:0::1;-1:-1:-1::0;;;;;52885:28:0;;;::::1;::::0;;;::::1;::::0;;52746:175::o;25761:244::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25850:22:0;::::1;25842:73;;;::::0;-1:-1:-1;;;25842:73:0;;12062:2:1;25842:73:0::1;::::0;::::1;12044:21:1::0;12101:2;12081:18;;;12074:30;12140:34;12120:18;;;12113:62;-1:-1:-1;;;12191:18:1;;;12184:36;12237:19;;25842:73:0::1;11860:402:1::0;25842:73:0::1;25952:6;::::0;25931:38:::1;::::0;-1:-1:-1;;;;;25931:38:0;;::::1;::::0;25952:6:::1;::::0;25931:38:::1;::::0;25952:6:::1;::::0;25931:38:::1;25980:6;:17:::0;;-1:-1:-1;;;;;;25980:17:0::1;-1:-1:-1::0;;;;;25980:17:0;;;::::1;::::0;;;::::1;::::0;;25761:244::o;49523:114::-;25516:6;;-1:-1:-1;;;;;25516:6:0;10058:10;25516:22;25508:67;;;;-1:-1:-1;;;25508:67:0;;;;;;;:::i;:::-;49625:4:::1;49605:13;15289:12:::0;;;15201:108;49605:13:::1;:17;::::0;49621:1:::1;49605:17;:::i;:::-;:24;;;;:::i;:::-;49588:14;:41:::0;49523:114::o;22617:346::-;-1:-1:-1;;;;;22719:19:0;;22711:68;;;;-1:-1:-1;;;22711:68:0;;12469:2:1;22711:68:0;;;12451:21:1;12508:2;12488:18;;;12481:30;12547:34;12527:18;;;12520:62;-1:-1:-1;;;12598:18:1;;;12591:34;12642:19;;22711:68:0;12267:400:1;22711:68:0;-1:-1:-1;;;;;22798:21:0;;22790:68;;;;-1:-1:-1;;;22790:68:0;;12874:2:1;22790:68:0;;;12856:21:1;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:32;13045:19;;22790:68:0;12672:398:1;22790:68:0;-1:-1:-1;;;;;22871:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22923:32;;2405:25:1;;;22923:32:0;;2378:18:1;22923:32:0;;;;;;;22617:346;;;:::o;19530:806::-;-1:-1:-1;;;;;19627:18:0;;19619:68;;;;-1:-1:-1;;;19619:68:0;;13277:2:1;19619:68:0;;;13259:21:1;13316:2;13296:18;;;13289:30;13355:34;13335:18;;;13328:62;-1:-1:-1;;;13406:18:1;;;13399:35;13451:19;;19619:68:0;13075:401:1;19619:68:0;-1:-1:-1;;;;;19706:16:0;;19698:64;;;;-1:-1:-1;;;19698:64:0;;13683:2:1;19698:64:0;;;13665:21:1;13722:2;13702:18;;;13695:30;13761:34;13741:18;;;13734:62;-1:-1:-1;;;13812:18:1;;;13805:33;13855:19;;19698:64:0;13481:399:1;19698:64:0;-1:-1:-1;;;;;19848:15:0;;19826:19;19848:15;;;;;;;;;;;19882:21;;;;19874:72;;;;-1:-1:-1;;;19874:72:0;;14087:2:1;19874:72:0;;;14069:21:1;14126:2;14106:18;;;14099:30;14165:34;14145:18;;;14138:62;-1:-1:-1;;;14216:18:1;;;14209:36;14262:19;;19874:72:0;13885:402:1;19874:72:0;-1:-1:-1;;;;;19982:15:0;;;:9;:15;;;;;;;;;;;20000:20;;;19982:38;;20200:13;;;;;;;;;;:23;;;;;;20252:26;;2405:25:1;;;20200:13:0;;20252:26;;2378:18:1;20252:26:0;;;;;;;20291:37;19608:728;19530:806;;;:::o;23254:419::-;23355:24;23382:25;23392:5;23399:7;23382:9;:25::i;:::-;23355:52;;-1:-1:-1;;23422:16:0;:37;23418:248;;23504:6;23484:16;:26;;23476:68;;;;-1:-1:-1;;;23476:68:0;;14494:2:1;23476:68:0;;;14476:21:1;14533:2;14513:18;;;14506:30;14572:31;14552:18;;;14545:59;14621:18;;23476:68:0;14292:353:1;23476:68:0;23588:51;23597:5;23604:7;23632:6;23613:16;:25;23588:8;:51::i;44784:347::-;44926:29;44938:4;44944:2;44948:6;44926:11;:29::i;:::-;-1:-1:-1;;;;;44972:20:0;;;;;;:14;:20;;;;;;;;44971:21;:44;;;;-1:-1:-1;;;;;;44997:18:0;;;;;;:14;:18;;;;;;;;44996:19;44971:44;44968:112;;;45041:27;45051:4;45057:2;45061:6;45041:9;:27::i;:::-;45031:37;;;;:::i;:::-;;;44968:112;45092:31;45108:4;45113:2;45116:6;45092:15;:31::i;32175:177::-;32285:58;;;-1:-1:-1;;;;;14975:32:1;;32285:58:0;;;14957:51:1;15024:18;;;;15017:34;;;32285:58:0;;;;;;;;;;14930:18:1;;;;32285:58:0;;;;;;;;-1:-1:-1;;;;;32285:58:0;-1:-1:-1;;;32285:58:0;;;32258:86;;32278:5;;32258:19;:86::i;45139:1309::-;-1:-1:-1;;;;;45228:20:0;;;;;;:14;:20;;;;;;;;45227:21;:44;;;;-1:-1:-1;;;;;;45253:18:0;;;;;;:14;:18;;;;;;;;45252:19;45227:44;45224:119;;;45295:13;;;;45287:44;;;;-1:-1:-1;;;45287:44:0;;15264:2:1;45287:44:0;;;15246:21:1;15303:2;15283:18;;;15276:30;-1:-1:-1;;;15322:18:1;;;15315:48;15380:18;;45287:44:0;15062:342:1;45287:44:0;45358:14;;;;;;;45355:1086;;;45392:20;;;;45388:421;;;45450:9;;-1:-1:-1;;;;;45436:24:0;;;45450:9;;45436:24;;;;:42;;-1:-1:-1;;;;;;45465:13:0;;;;;;:9;:13;;;;;;;;45464:14;45436:42;45432:362;;;45535:9;45510:35;;;;:24;:35;;;;;;45548:12;-1:-1:-1;45510:97:0;;;;-1:-1:-1;;;;;;45564:28:0;;;;;;:24;:28;;;;;;45595:12;-1:-1:-1;45510:97:0;45502:133;;;;-1:-1:-1;;;45502:133:0;;15611:2:1;45502:133:0;;;15593:21:1;15650:2;15630:18;;;15623:30;15689:25;15669:18;;;15662:53;15732:18;;45502:133:0;15409:347:1;45502:133:0;45683:9;45658:35;;;;:24;:35;;;;;;45696:12;45658:50;;;;-1:-1:-1;;;;;45731:28:0;;;;;;:43;45432:362;-1:-1:-1;;;;;45849:15:0;;;;;;:9;:15;;;;;;;;:40;;;;-1:-1:-1;;;;;;45869:20:0;;;;;;:16;:20;;;;;;;;45868:21;45849:40;45845:585;;;45928:14;;45918:6;:24;;45910:66;;;;-1:-1:-1;;;45910:66:0;;15963:2:1;45910:66:0;;;15945:21:1;16002:2;15982:18;;;15975:30;16041:31;16021:18;;;16014:59;16090:18;;45910:66:0;15761:353:1;45910:66:0;46029:9;;-1:-1:-1;;;;;15473:18:0;;15446:7;15473:18;;;;;;;;;;;46012:13;46003:22;;:6;:22;:::i;:::-;:35;;45995:75;;;;-1:-1:-1;;;45995:75:0;;16321:2:1;45995:75:0;;;16303:21:1;16360:2;16340:18;;;16333:30;16399:29;16379:18;;;16372:57;16446:18;;45995:75:0;16119:351:1;45845:585:0;-1:-1:-1;;;;;46131:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;46149:22:0;;;;;;:16;:22;;;;;;;;46148:23;46131:40;46127:303;;;46210:14;;46200:6;:24;;46192:67;;;;-1:-1:-1;;;46192:67:0;;16677:2:1;46192:67:0;;;16659:21:1;16716:2;16696:18;;;16689:30;16755:32;16735:18;;;16728:60;16805:18;;46192:67:0;16475:354:1;46127:303:0;-1:-1:-1;;;;;46298:20:0;;;;;;:16;:20;;;;;;;;46294:136;;46373:9;;-1:-1:-1;;;;;15473:18:0;;15446:7;15473:18;;;;;;;;;;;46356:13;15372:127;46456:1157;46585:15;;46575:4;46535:7;15473:18;;;;;;;;;;;46535:7;;-1:-1:-1;46557:43:0;:56;;;;-1:-1:-1;46605:8:0;;;;;;;46604:9;46557:56;:73;;;;-1:-1:-1;;;;;;46617:13:0;;;;;;:9;:13;;;;;;;;46557:73;46554:176;;;46647:8;:15;;-1:-1:-1;;46647:15:0;;;;;46677:10;:8;:10::i;:::-;46702:8;:16;;-1:-1:-1;;46702:16:0;;;46554:176;-1:-1:-1;;;;;46802:13:0;;46750:11;46802:13;;;:9;:13;;;;;;;;:33;;;;;46834:1;46819:12;;:16;46802:33;46798:674;;;42022:5;46866:12;;46857:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;46851:41;;46954:12;;46935:16;;46929:3;:22;;;;:::i;:::-;:37;;;;:::i;:::-;46907:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;47030:12:0;;47010:17;;47004:23;;:3;:23;:::i;:::-;:38;;;;:::i;:::-;46981:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;47096:12:0;;47081;;47075:18;;:3;:18;:::i;:::-;:33;;;;:::i;:::-;47057:14;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;46798:674:0;;-1:-1:-1;46798:674:0;;-1:-1:-1;;;;;47159:15:0;;;;;;:9;:15;;;;;;;;:34;;;;;47192:1;47178:11;;:15;47159:34;47156:316;;;42022:5;47225:11;;47216:6;:20;;;;:::i;:::-;:34;;;;:::i;:::-;47210:40;;47313:11;;47294:16;;47288:3;:22;;;;:::i;:::-;:36;;;;:::i;:::-;47265:19;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;47385:11:0;;47367:15;;47361:21;;:3;:21;:::i;:::-;:35;;;;:::i;:::-;47339:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;47449:11:0;;47435;;47429:17;;:3;:17;:::i;:::-;:31;;;;:::i;:::-;47411:14;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;47156:316:0;47495:7;;47492:83;;47522:41;47538:4;47552;47559:3;47522:15;:41::i;:::-;47602:3;46456:1157;-1:-1:-1;;;;46456:1157:0:o;32573:333::-;32654:23;32680:69;32708:4;32680:69;;;;;;;;;;;;;;;;;32688:5;-1:-1:-1;;;;;32680:27:0;;;:69;;;;;:::i;:::-;32764:17;;32654:95;;-1:-1:-1;32764:21:0;32760:139;;32821:10;32810:30;;;;;;;;;;;;:::i;:::-;32802:85;;;;-1:-1:-1;;;32802:85:0;;17286:2:1;32802:85:0;;;17268:21:1;17325:2;17305:18;;;17298:30;17364:34;17344:18;;;17337:62;-1:-1:-1;;;17415:18:1;;;17408:40;17465:19;;32802:85:0;17084:406:1;48013:1476:0;48098:4;48054:23;15473:18;;;;;;;;;;;48054:50;;48115:25;48186:14;;48164:19;;48143:18;;:40;;;;:::i;:::-;:57;;;;:::i;:::-;48115:85;-1:-1:-1;48224:20:0;;;:46;;-1:-1:-1;48248:22:0;;48224:46;48221:60;;;48273:7;;48013:1476::o;48221:60::-;48314:15;;:20;;48332:2;48314:20;:::i;:::-;48296:15;:38;48293:107;;;48368:15;;:20;;48386:2;48368:20;:::i;:::-;48350:38;;48293:107;48423:18;;:22;48420:396;;48461:23;48526:17;48505:18;;48487:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;48589:6;;48461:82;;-1:-1:-1;48558:55:0;;48582:4;;-1:-1:-1;;;;;48589:6:0;48461:82;48558:15;:55::i;:::-;48640:6;;;;;;;;;-1:-1:-1;;;;;48640:6:0;-1:-1:-1;;;;;48632:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48628:37;48679:34;48698:15;48679:34;;:::i;:::-;;;48749:18;;48728:39;;;;;:::i;:::-;48803:1;48782:18;:22;48728:39;-1:-1:-1;;48420:396:0;48859:1;48839:17;:21;:44;;;;;48882:1;48864:15;:19;48839:44;48836:646;;;48899:33;48916:15;48899:16;:33::i;:::-;49055:14;;48982:21;;48961:18;;49072:17;;49042:27;;48982:21;49042:27;:::i;:::-;:47;;;;:::i;:::-;49020:69;-1:-1:-1;49106:12:0;49136:15;;49133:146;;49185:12;;:41;;-1:-1:-1;;;;;49185:12:0;;;;49210:11;;49185:41;;;;49210:11;49185:12;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49262:1:0;49245:14;:18;49171:55;-1:-1:-1;49133:146:0;49298:21;:25;49295:176;;49357:17;;:56;;-1:-1:-1;;;;;49357:17:0;;;;49387:21;;49357:56;;;;49387:21;49357:17;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49454:1:0;49432:19;:23;-1:-1:-1;;;;48836:646:0;48041:1448;;48013:1476::o;26678:229::-;26815:12;26847:52;26869:6;26877:4;26883:1;26886:12;26847:21;:52::i;47621:384::-;47710:16;;;47724:1;47710:16;;;;;;;;47686:21;;47710:16;;;;;;;;;;-1:-1:-1;47710:16:0;47686:40;;47755:4;47737;47742:1;47737:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47737:23:0;;;:7;;;;;;;;;;:23;;;;47781:9;;:16;;;-1:-1:-1;;;47781:16:0;;;;:9;;;;;:14;;:16;;;;;47737:7;;47781:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47771:4;47776:1;47771:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47771:26:0;;;:7;;;;;;;;;:26;47810:9;;:187;;-1:-1:-1;;;47810:187:0;;:9;;;:60;;:187;;47885:8;;47810:9;;47924:4;;47951;;47971:15;;47810:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47673:332;47621:384;:::o;27798:455::-;27968:12;28026:5;28001:21;:30;;27993:81;;;;-1:-1:-1;;;27993:81:0;;19280:2:1;27993:81:0;;;19262:21:1;19319:2;19299:18;;;19292:30;19358:34;19338:18;;;19331:62;-1:-1:-1;;;19409:18:1;;;19402:36;19455:19;;27993:81:0;19078:402:1;27993:81:0;28086:12;28100:23;28127:6;-1:-1:-1;;;;;28127:11:0;28146:5;28153:4;28127:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28085:73;;;;28176:69;28203:6;28211:7;28220:10;28232:12;28176:26;:69::i;:::-;28169:76;27798:455;-1:-1:-1;;;;;;;27798:455:0:o;30371:644::-;30556:12;30585:7;30581:427;;;30613:10;:17;30634:1;30613:22;30609:290;;-1:-1:-1;;;;;26119:19:0;;;30823:60;;;;-1:-1:-1;;;30823:60:0;;19979:2:1;30823:60:0;;;19961:21:1;20018:2;19998:18;;;19991:30;20057:31;20037:18;;;20030:59;20106:18;;30823:60:0;19777:353:1;30823:60:0;-1:-1:-1;30920:10:0;30913:17;;30581:427;30963:33;30971:10;30983:12;31718:17;;:21;31714:388;;31950:10;31944:17;32007:15;31994:10;31990:2;31986:19;31979:44;31714:388;32077:12;32070:20;;-1:-1:-1;;;32070:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:316::-;276:6;284;292;345:2;333:9;324:7;320:23;316:32;313:52;;;361:1;358;351:12;313:52;-1:-1:-1;;384:23:1;;;454:2;439:18;;426:32;;-1:-1:-1;505:2:1;490:18;;;477:32;;199:316;-1:-1:-1;199:316:1:o;520:250::-;605:1;615:113;629:6;626:1;623:13;615:113;;;705:11;;;699:18;686:11;;;679:39;651:2;644:10;615:113;;;-1:-1:-1;;762:1:1;744:16;;737:27;520:250::o;775:396::-;924:2;913:9;906:21;887:4;956:6;950:13;999:6;994:2;983:9;979:18;972:34;1015:79;1087:6;1082:2;1071:9;1067:18;1062:2;1054:6;1050:15;1015:79;:::i;:::-;1155:2;1134:15;-1:-1:-1;;1130:29:1;1115:45;;;;1162:2;1111:54;;775:396;-1:-1:-1;;775:396:1:o;1403:131::-;-1:-1:-1;;;;;1478:31:1;;1468:42;;1458:70;;1524:1;1521;1514:12;1458:70;1403:131;:::o;1539:315::-;1607:6;1615;1668:2;1656:9;1647:7;1643:23;1639:32;1636:52;;;1684:1;1681;1674:12;1636:52;1723:9;1710:23;1742:31;1767:5;1742:31;:::i;:::-;1792:5;1844:2;1829:18;;;;1816:32;;-1:-1:-1;;;1539:315:1:o;2441:367::-;2504:8;2514:6;2568:3;2561:4;2553:6;2549:17;2545:27;2535:55;;2586:1;2583;2576:12;2535:55;-1:-1:-1;2609:20:1;;2652:18;2641:30;;2638:50;;;2684:1;2681;2674:12;2638:50;2721:4;2713:6;2709:17;2697:29;;2781:3;2774:4;2764:6;2761:1;2757:14;2749:6;2745:27;2741:38;2738:47;2735:67;;;2798:1;2795;2788:12;2735:67;2441:367;;;;;:::o;2813:773::-;2935:6;2943;2951;2959;3012:2;3000:9;2991:7;2987:23;2983:32;2980:52;;;3028:1;3025;3018:12;2980:52;3068:9;3055:23;3097:18;3138:2;3130:6;3127:14;3124:34;;;3154:1;3151;3144:12;3124:34;3193:70;3255:7;3246:6;3235:9;3231:22;3193:70;:::i;:::-;3282:8;;-1:-1:-1;3167:96:1;-1:-1:-1;3370:2:1;3355:18;;3342:32;;-1:-1:-1;3386:16:1;;;3383:36;;;3415:1;3412;3405:12;3383:36;;3454:72;3518:7;3507:8;3496:9;3492:24;3454:72;:::i;:::-;2813:773;;;;-1:-1:-1;3545:8:1;-1:-1:-1;;;;2813:773:1:o;3591:456::-;3668:6;3676;3684;3737:2;3725:9;3716:7;3712:23;3708:32;3705:52;;;3753:1;3750;3743:12;3705:52;3792:9;3779:23;3811:31;3836:5;3811:31;:::i;:::-;3861:5;-1:-1:-1;3918:2:1;3903:18;;3890:32;3931:33;3890:32;3931:33;:::i;:::-;3591:456;;3983:7;;-1:-1:-1;;;4037:2:1;4022:18;;;;4009:32;;3591:456::o;4241:388::-;4309:6;4317;4370:2;4358:9;4349:7;4345:23;4341:32;4338:52;;;4386:1;4383;4376:12;4338:52;4425:9;4412:23;4444:31;4469:5;4444:31;:::i;:::-;4494:5;-1:-1:-1;4551:2:1;4536:18;;4523:32;4564:33;4523:32;4564:33;:::i;:::-;4616:7;4606:17;;;4241:388;;;;;:::o;4634:247::-;4693:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:52;;;4762:1;4759;4752:12;4714:52;4801:9;4788:23;4820:31;4845:5;4820:31;:::i;:::-;4870:5;4634:247;-1:-1:-1;;;4634:247:1:o;4886:118::-;4972:5;4965:13;4958:21;4951:5;4948:32;4938:60;;4994:1;4991;4984:12;5009:382;5074:6;5082;5135:2;5123:9;5114:7;5110:23;5106:32;5103:52;;;5151:1;5148;5141:12;5103:52;5190:9;5177:23;5209:31;5234:5;5209:31;:::i;:::-;5259:5;-1:-1:-1;5316:2:1;5301:18;;5288:32;5329:30;5288:32;5329:30;:::i;5848:356::-;6050:2;6032:21;;;6069:18;;;6062:30;6128:34;6123:2;6108:18;;6101:62;6195:2;6180:18;;5848:356::o;6209:127::-;6270:10;6265:3;6261:20;6258:1;6251:31;6301:4;6298:1;6291:15;6325:4;6322:1;6315:15;6341:422;6430:1;6473:5;6430:1;6487:270;6508:7;6498:8;6495:21;6487:270;;;6567:4;6563:1;6559:6;6555:17;6549:4;6546:27;6543:53;;;6576:18;;:::i;:::-;6626:7;6616:8;6612:22;6609:55;;;6646:16;;;;6609:55;6725:22;;;;6685:15;;;;6487:270;;;6491:3;6341:422;;;;;:::o;6768:806::-;6817:5;6847:8;6837:80;;-1:-1:-1;6888:1:1;6902:5;;6837:80;6936:4;6926:76;;-1:-1:-1;6973:1:1;6987:5;;6926:76;7018:4;7036:1;7031:59;;;;7104:1;7099:130;;;;7011:218;;7031:59;7061:1;7052:10;;7075:5;;;7099:130;7136:3;7126:8;7123:17;7120:43;;;7143:18;;:::i;:::-;-1:-1:-1;;7199:1:1;7185:16;;7214:5;;7011:218;;7313:2;7303:8;7300:16;7294:3;7288:4;7285:13;7281:36;7275:2;7265:8;7262:16;7257:2;7251:4;7248:12;7244:35;7241:77;7238:159;;;-1:-1:-1;7350:19:1;;;7382:5;;7238:159;7429:34;7454:8;7448:4;7429:34;:::i;:::-;7499:6;7495:1;7491:6;7487:19;7478:7;7475:32;7472:58;;;7510:18;;:::i;:::-;7548:20;;6768:806;-1:-1:-1;;;6768:806:1:o;7579:140::-;7637:5;7666:47;7707:4;7697:8;7693:19;7687:4;7666:47;:::i;7724:168::-;7797:9;;;7828;;7845:15;;;7839:22;;7825:37;7815:71;;7866:18;;:::i;7897:217::-;7937:1;7963;7953:132;;8007:10;8002:3;7998:20;7995:1;7988:31;8042:4;8039:1;8032:15;8070:4;8067:1;8060:15;7953:132;-1:-1:-1;8099:9:1;;7897:217::o;8454:125::-;8519:9;;;8540:10;;;8537:36;;;8553:18;;:::i;8584:380::-;8663:1;8659:12;;;;8706;;;8727:61;;8781:4;8773:6;8769:17;8759:27;;8727:61;8834:2;8826:6;8823:14;8803:18;8800:38;8797:161;;8880:10;8875:3;8871:20;8868:1;8861:31;8915:4;8912:1;8905:15;8943:4;8940:1;8933:15;8797:161;;8584:380;;;:::o;9320:127::-;9381:10;9376:3;9372:20;9369:1;9362:31;9412:4;9409:1;9402:15;9436:4;9433:1;9426:15;9452:135;9491:3;9512:17;;;9509:43;;9532:18;;:::i;:::-;-1:-1:-1;9579:1:1;9568:13;;9452:135::o;9947:184::-;10017:6;10070:2;10058:9;10049:7;10045:23;10041:32;10038:52;;;10086:1;10083;10076:12;10038:52;-1:-1:-1;10109:16:1;;9947:184;-1:-1:-1;9947:184:1:o;14650:128::-;14717:9;;;14738:11;;;14735:37;;;14752:18;;:::i;16834:245::-;16901:6;16954:2;16942:9;16933:7;16929:23;16925:32;16922:52;;;16970:1;16967;16960:12;16922:52;17002:9;16996:16;17021:28;17043:5;17021:28;:::i;17837:251::-;17907:6;17960:2;17948:9;17939:7;17935:23;17931:32;17928:52;;;17976:1;17973;17966:12;17928:52;18008:9;18002:16;18027:31;18052:5;18027:31;:::i;18093:980::-;18355:4;18403:3;18392:9;18388:19;18434:6;18423:9;18416:25;18460:2;18498:6;18493:2;18482:9;18478:18;18471:34;18541:3;18536:2;18525:9;18521:18;18514:31;18565:6;18600;18594:13;18631:6;18623;18616:22;18669:3;18658:9;18654:19;18647:26;;18708:2;18700:6;18696:15;18682:29;;18729:1;18739:195;18753:6;18750:1;18747:13;18739:195;;;18818:13;;-1:-1:-1;;;;;18814:39:1;18802:52;;18909:15;;;;18874:12;;;;18850:1;18768:9;18739:195;;;-1:-1:-1;;;;;;;18990:32:1;;;;18985:2;18970:18;;18963:60;-1:-1:-1;;;19054:3:1;19039:19;19032:35;18951:3;18093:980;-1:-1:-1;;;18093:980:1:o;19485:287::-;19614:3;19652:6;19646:13;19668:66;19727:6;19722:3;19715:4;19707:6;19703:17;19668:66;:::i;:::-;19750:16;;;;;19485:287;-1:-1:-1;;19485:287:1:o

Swarm Source

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