ETH Price: $3,259.79 (+3.35%)
Gas: 3 Gwei

Token

Anti Meta (AntiMeta)
 

Overview

Max Total Supply

21,000,000 AntiMeta

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.135007823 AntiMeta

Value
$0.00
0xfda784d84f7be38438f3dbcadc8d6fd2f9f22d4d
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:
AntiMeta

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-24
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;

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
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. 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 18, 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);
        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 AntiMeta 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 marketingWallet;

    uint8 constant _decimals = 9;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingWalletFee;
    
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingWalletFee;
    
    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketingWallet;

    uint256 public walletDigit;
    uint256 public transDigit;
    uint256 public supply;
    
    /******************/

    // 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);

    constructor() ERC20("Anti Meta", "AntiMeta") {

        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 = 2;
        uint256 _buyMarketingWalletFee = 3;

        uint256 _sellLiquidityFee = 20;
        uint256 _sellMarketingWalletFee = 30;
        
        uint256 totalSupply = 21 * 1e6 * 10 ** _decimals;
        supply += totalSupply;
        
        walletDigit = 2;
        transDigit = 2;

        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * 5 / 10000; // 0.05% swap wallet;
        maxWallet = supply * walletDigit / 100;

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingWalletFee = _buyMarketingWalletFee;
        buyTotalFees = buyLiquidityFee + buyMarketingWalletFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingWalletFee = _sellMarketingWalletFee;
        sellTotalFees = sellLiquidityFee + sellMarketingWalletFee;
        
        marketingWallet = 0x698856961d8b4bE4498fc2e8F2590731975CE97B; //set as Marketing wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _approve(owner(), address(uniswapV2Router), totalSupply);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, 21 * 1e6 * 10 ** _decimals);

        tradingActive = true;
        swapEnabled = true;

    }

    receive() external payable {

  	}

        // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = 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 excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateBuyFees(uint256 _liquidityFee, uint _buyMarketingWalletFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyMarketingWalletFee = _buyMarketingWalletFee;
        buyTotalFees = buyLiquidityFee + buyMarketingWalletFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }
    
    function updateSellFees(uint256 _liquidityFee, uint _sellMarketingWalletFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellMarketingWalletFee = _sellMarketingWalletFee;
        sellTotalFees = sellLiquidityFee + sellMarketingWalletFee;
        require(sellTotalFees <= 50, "Must keep fees at 50% 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 updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    
    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 != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }


                //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;
        }
        
        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){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketingWallet += fees * sellMarketingWalletFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketingWallet += fees * buyMarketingWalletFee / 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
            deadAddress,
            block.timestamp
        );
    }

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

        if(contractBalance > swapTokensAtAmount * 5){
          contractBalance = swapTokensAtAmount * 5;
        }
        
        // 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 ethForMarketing = ethBalance.mul(tokensForMarketingWallet).div(totalTokensToSwap);
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        
        tokensForLiquidity = 0;
        tokensForMarketingWallet = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }


}

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":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":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"},{"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":"buyMarketingWalletFee","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":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingWalletFee","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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokensForMarketingWallet","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":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"internalType":"uint256","name":"_buyMarketingWalletFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingWalletFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805463ffffffff1916620101011790553480156200002357600080fd5b506040805180820182526009815268416e7469204d65746160b81b602080830191825283518085019094526008845267416e74694d65746160c01b9084015281519192916200007591600391620008bb565b5080516200008b906004906020840190620008bb565b5050506000620000a0620004af60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d62000110816001620004b3565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200015657600080fd5b505afa1580156200016b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000191919062000961565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001da57600080fd5b505afa158015620001ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000215919062000961565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200025e57600080fd5b505af115801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000961565b6001600160a01b031660a0819052620002b4906001620004b3565b60a051620002c49060016200052d565b600260036014601e6000620002dc6009600a62000a9f565b620002ec906301406f4062000ab7565b9050806015600082825462000302919062000ad9565b9091555050600260138190556014819055601554606491620003249162000ab7565b62000330919062000af4565b600755601554612710906200034790600562000ab7565b62000353919062000af4565b6008556013546015546064916200036a9162000ab7565b62000376919062000af4565b600955600c859055600d8490556200038f848662000ad9565b600b55600f8390556010829055620003a8828462000ad9565b600e55600680546001600160a01b03191673698856961d8b4be4498fc2e8f2590731975ce97b179055620003f0620003e86005546001600160a01b031690565b600162000581565b620003fd30600162000581565b6200040c61dead600162000581565b6200042b620004236005546001600160a01b031690565b6001620004b3565b62000438306001620004b3565b6200044761dead6001620004b3565b620004686200045e6005546001600160a01b031690565b608051836200062b565b62000491336200047b6009600a62000a9f565b6200048b906301406f4062000ab7565b62000753565b5050600a805462ffff001916620101001790555062000b5492505050565b3390565b6005546001600160a01b03163314620005025760405162461bcd60e51b8152602060048201819052602482015260008051602062002fbf83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005cc5760405162461bcd60e51b8152602060048201819052602482015260008051602062002fbf8339815191526044820152606401620004f9565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0383166200068f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004f9565b6001600160a01b038216620006f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004f9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620007ab5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004f9565b620007c7816002546200084f60201b620010601790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620007fa918390620010606200084f821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806200085e838562000ad9565b905083811015620008b25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004f9565b90505b92915050565b828054620008c99062000b17565b90600052602060002090601f016020900481019282620008ed576000855562000938565b82601f106200090857805160ff191683800117855562000938565b8280016001018555821562000938579182015b82811115620009385782518255916020019190600101906200091b565b50620009469291506200094a565b5090565b5b808211156200094657600081556001016200094b565b6000602082840312156200097457600080fd5b81516001600160a01b0381168114620008b257600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009e3578160001904821115620009c757620009c76200098c565b80851615620009d557918102915b93841c9390800290620009a7565b509250929050565b600082620009fc57506001620008b5565b8162000a0b57506000620008b5565b816001811462000a24576002811462000a2f5762000a4f565b6001915050620008b5565b60ff84111562000a435762000a436200098c565b50506001821b620008b5565b5060208310610133831016604e8410600b841016171562000a74575081810a620008b5565b62000a808383620009a2565b806000190482111562000a975762000a976200098c565b029392505050565b600062000ab060ff841683620009eb565b9392505050565b600081600019048311821515161562000ad45762000ad46200098c565b500290565b6000821982111562000aef5762000aef6200098c565b500190565b60008262000b1257634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168062000b2c57607f821691505b6020821081141562000b4e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161241b62000ba4600039600081816104760152610c4201526000818161037701528181611cee01528181611db601528181611df201528181611e6c0152611ec9015261241b6000f3fe60806040526004361061028c5760003560e01c806375f0a8741161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e146107c8578063e2f456051461080e578063f11a24d314610824578063f2fde38b1461083a578063f63743421461085a578063f8b45b051461087057600080fd5b8063c024666814610725578063c876d0b914610745578063c8c8ebe414610766578063cd1563461461077c578063d257b34f14610792578063d85ba063146107b257600080fd5b80639a7a23d6116101135780639a7a23d614610656578063a457c2d714610676578063a9059cbb14610696578063aacebbe3146106b6578063b62496f5146106d6578063bbc0c7421461070657600080fd5b806375f0a874146105c25780637ab43983146105e25780638a8c523c146105f85780638da5cb5b1461060d57806395d89b411461062b578063975d71e21461064057600080fd5b8063313ce567116101fe57806366ca9b83116101b757806366ca9b83146105015780636a486a8e146105215780636ddd17131461053757806370a0823114610557578063715018a61461058d5780637571336a146105a257600080fd5b8063313ce56714610428578063395093511461044457806349bd5a5e146104645780634a62bb65146104985780634fbee193146104b257806365f84f21146104eb57600080fd5b80631694505e116102505780631694505e14610365578063173b717e146103b157806318160ddd146103c75780631a8145bb146103dc57806323b872dd146103f257806327c8f8351461041257600080fd5b806302dbd8f814610298578063047fc9aa146102ba57806306fdde03146102e3578063095ea7b31461030557806310d5de531461033557600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004611f84565b610886565b005b3480156102c657600080fd5b506102d060155481565b6040519081526020015b60405180910390f35b3480156102ef57600080fd5b506102f8610926565b6040516102da9190611fa6565b34801561031157600080fd5b50610325610320366004612013565b6109b8565b60405190151581526020016102da565b34801561034157600080fd5b5061032561035036600461203f565b60176020526000908152604090205460ff1681565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102da565b3480156103bd57600080fd5b506102d060125481565b3480156103d357600080fd5b506002546102d0565b3480156103e857600080fd5b506102d060115481565b3480156103fe57600080fd5b5061032561040d36600461205c565b6109cf565b34801561041e57600080fd5b5061039961dead81565b34801561043457600080fd5b50604051600981526020016102da565b34801561045057600080fd5b5061032561045f366004612013565b610a38565b34801561047057600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a457600080fd5b50600a546103259060ff1681565b3480156104be57600080fd5b506103256104cd36600461203f565b6001600160a01b031660009081526016602052604090205460ff1690565b3480156104f757600080fd5b506102d0600d5481565b34801561050d57600080fd5b506102b861051c366004611f84565b610a6e565b34801561052d57600080fd5b506102d0600e5481565b34801561054357600080fd5b50600a546103259062010000900460ff1681565b34801561056357600080fd5b506102d061057236600461203f565b6001600160a01b031660009081526020819052604090205490565b34801561059957600080fd5b506102b8610b01565b3480156105ae57600080fd5b506102b86105bd36600461209d565b610b75565b3480156105ce57600080fd5b50600654610399906001600160a01b031681565b3480156105ee57600080fd5b506102d060135481565b34801561060457600080fd5b506102b8610bca565b34801561061957600080fd5b506005546001600160a01b0316610399565b34801561063757600080fd5b506102f8610c07565b34801561064c57600080fd5b506102d060145481565b34801561066257600080fd5b506102b861067136600461209d565b610c16565b34801561068257600080fd5b50610325610691366004612013565b610cf2565b3480156106a257600080fd5b506103256106b1366004612013565b610d41565b3480156106c257600080fd5b506102b86106d136600461203f565b610d4e565b3480156106e257600080fd5b506103256106f136600461203f565b60186020526000908152604090205460ff1681565b34801561071257600080fd5b50600a5461032590610100900460ff1681565b34801561073157600080fd5b506102b861074036600461209d565b610d9a565b34801561075157600080fd5b50600a54610325906301000000900460ff1681565b34801561077257600080fd5b506102d060075481565b34801561078857600080fd5b506102d060105481565b34801561079e57600080fd5b506103256107ad3660046120db565b610e23565b3480156107be57600080fd5b506102d0600b5481565b3480156107d457600080fd5b506102d06107e33660046120f4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081a57600080fd5b506102d060085481565b34801561083057600080fd5b506102d0600c5481565b34801561084657600080fd5b506102b861085536600461203f565b610f75565b34801561086657600080fd5b506102d0600f5481565b34801561087c57600080fd5b506102d060095481565b6005546001600160a01b031633146108b95760405162461bcd60e51b81526004016108b090612122565b60405180910390fd5b600f82905560108190556108cd818361216d565b600e819055603210156109225760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016108b0565b5050565b60606003805461093590612185565b80601f016020809104026020016040519081016040528092919081815260200182805461096190612185565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109c53384846110c6565b5060015b92915050565b60006109dc8484846111eb565b610a2e8433610a2985604051806060016040528060288152602001612399602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611898565b6110c6565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109c5918590610a299086611060565b6005546001600160a01b03163314610a985760405162461bcd60e51b81526004016108b090612122565b600c829055600d819055610aac818361216d565b600b819055603210156109225760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016108b0565b6005546001600160a01b03163314610b2b5760405162461bcd60e51b81526004016108b090612122565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b9f5760405162461bcd60e51b81526004016108b090612122565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610bf45760405162461bcd60e51b81526004016108b090612122565b600a805462ffff00191662010100179055565b60606004805461093590612185565b6005546001600160a01b03163314610c405760405162461bcd60e51b81526004016108b090612122565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610ce85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108b0565b61092282826118d2565b60006109c53384610a29856040518060600160405280602581526020016123c1602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611898565b60006109c53384846111eb565b6005546001600160a01b03163314610d785760405162461bcd60e51b81526004016108b090612122565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610dc45760405162461bcd60e51b81526004016108b090612122565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b03163314610e505760405162461bcd60e51b81526004016108b090612122565b620186a0610e5d60025490565b610e689060016121c0565b610e7291906121df565b821015610edf5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108b0565b6103e8610eeb60025490565b610ef69060056121c0565b610f0091906121df565b821115610f6c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108b0565b50600855600190565b6005546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016108b090612122565b6001600160a01b0381166110045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108b0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061106d838561216d565b9050838110156110bf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108b0565b9392505050565b6001600160a01b0383166111285760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108b0565b6001600160a01b0382166111895760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108b0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112115760405162461bcd60e51b81526004016108b090612201565b6001600160a01b0382166112375760405162461bcd60e51b81526004016108b090612246565b8061124d5761124883836000611926565b505050565b600a5460ff16156115c3576005546001600160a01b0384811691161480159061128457506005546001600160a01b03838116911614155b801561129857506001600160a01b03821615155b80156112af57506001600160a01b03821661dead14155b80156112c55750600554600160a01b900460ff16155b156115c357600a54610100900460ff1661135d576001600160a01b03831660009081526016602052604090205460ff168061131857506001600160a01b03821660009081526016602052604090205460ff165b61135d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108b0565b6001600160a01b03831660009081526018602052604090205460ff16801561139e57506001600160a01b03821660009081526017602052604090205460ff16155b15611482576007548111156114135760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108b0565b6009546001600160a01b038316600090815260208190526040902054611439908361216d565b111561147d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108b0565b6115c3565b6001600160a01b03821660009081526018602052604090205460ff1680156114c357506001600160a01b03831660009081526017602052604090205460ff16155b156115395760075481111561147d5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016108b0565b6001600160a01b03821660009081526017602052604090205460ff166115c3576009546001600160a01b03831660009081526020819052604090205461157f908361216d565b11156115c35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108b0565b30600090815260208190526040902054600854811080159081906115ef5750600a5462010000900460ff165b80156116055750600554600160a01b900460ff16155b801561162a57506001600160a01b03851660009081526018602052604090205460ff16155b801561164f57506001600160a01b03851660009081526016602052604090205460ff16155b801561167457506001600160a01b03841660009081526016602052604090205460ff16155b156116a2576005805460ff60a01b1916600160a01b179055611694611a2f565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526016602052604090205460ff600160a01b9092048216159116806116f057506001600160a01b03851660009081526016602052604090205460ff165b156116f9575060005b60008115611884576001600160a01b03861660009081526018602052604090205460ff16801561172b57506000600e54115b156117b957611750606461174a600e5488611b9490919063ffffffff16565b90611c13565b9050600e54600f548261176391906121c0565b61176d91906121df565b6011600082825461177e919061216d565b9091555050600e5460105461179390836121c0565b61179d91906121df565b601260008282546117ae919061216d565b909155506118669050565b6001600160a01b03871660009081526018602052604090205460ff1680156117e357506000600b54115b1561186657611802606461174a600b5488611b9490919063ffffffff16565b9050600b54600c548261181591906121c0565b61181f91906121df565b60116000828254611830919061216d565b9091555050600b54600d5461184590836121c0565b61184f91906121df565b60126000828254611860919061216d565b90915550505b801561187757611877873083611926565b6118818186612289565b94505b61188f878787611926565b50505050505050565b600081848411156118bc5760405162461bcd60e51b81526004016108b09190611fa6565b5060006118c98486612289565b95945050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661194c5760405162461bcd60e51b81526004016108b090612201565b6001600160a01b0382166119725760405162461bcd60e51b81526004016108b090612246565b6119af81604051806060016040528060268152602001612373602691396001600160a01b0386166000908152602081905260409020549190611898565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546119de9082611060565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016111de565b3060009081526020819052604081205490506000601254601154611a53919061216d565b90506000821580611a62575081155b15611a6c57505050565b600854611a7a9060056121c0565b831115611a9257600854611a8f9060056121c0565b92505b600060028360115486611aa591906121c0565b611aaf91906121df565b611ab991906121df565b90506000611ac78583611c55565b905047611ad382611c97565b6000611adf4783611c55565b90506000611afc8761174a60125485611b9490919063ffffffff16565b90506000611b0a8284612289565b6000601181905560125590508515801590611b255750600081115b15611b3457611b348682611e66565b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611b81576040519150601f19603f3d011682016040523d82523d6000602084013e611b86565b606091505b505050505050505050505050565b600082611ba3575060006109c9565b6000611baf83856121c0565b905082611bbc85836121df565b146110bf5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108b0565b60006110bf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f56565b60006110bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611898565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ccc57611ccc6122a0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4557600080fd5b505afa158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d91906122b6565b81600181518110611d9057611d906122a0565b60200260200101906001600160a01b031690816001600160a01b031681525050611ddb307f0000000000000000000000000000000000000000000000000000000000000000846110c6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611e309085906000908690309042906004016122d3565b600060405180830381600087803b158015611e4a57600080fd5b505af1158015611e5e573d6000803e3d6000fd5b505050505050565b611e91307f0000000000000000000000000000000000000000000000000000000000000000846110c6565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015611f1657600080fd5b505af1158015611f2a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f4f9190612344565b5050505050565b60008183611f775760405162461bcd60e51b81526004016108b09190611fa6565b5060006118c984866121df565b60008060408385031215611f9757600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611fd357858101830151858201604001528201611fb7565b81811115611fe5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461201057600080fd5b50565b6000806040838503121561202657600080fd5b823561203181611ffb565b946020939093013593505050565b60006020828403121561205157600080fd5b81356110bf81611ffb565b60008060006060848603121561207157600080fd5b833561207c81611ffb565b9250602084013561208c81611ffb565b929592945050506040919091013590565b600080604083850312156120b057600080fd5b82356120bb81611ffb565b9150602083013580151581146120d057600080fd5b809150509250929050565b6000602082840312156120ed57600080fd5b5035919050565b6000806040838503121561210757600080fd5b823561211281611ffb565b915060208301356120d081611ffb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561218057612180612157565b500190565b600181811c9082168061219957607f821691505b602082108114156121ba57634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156121da576121da612157565b500290565b6000826121fc57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561229b5761229b612157565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156122c857600080fd5b81516110bf81611ffb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123235784516001600160a01b0316835293830193918301916001016122fe565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561235957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205afdf07c6bda17d6c186f06e172fcfd6481c90bec0ef3fcfc133db700c35074864736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806375f0a8741161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e146107c8578063e2f456051461080e578063f11a24d314610824578063f2fde38b1461083a578063f63743421461085a578063f8b45b051461087057600080fd5b8063c024666814610725578063c876d0b914610745578063c8c8ebe414610766578063cd1563461461077c578063d257b34f14610792578063d85ba063146107b257600080fd5b80639a7a23d6116101135780639a7a23d614610656578063a457c2d714610676578063a9059cbb14610696578063aacebbe3146106b6578063b62496f5146106d6578063bbc0c7421461070657600080fd5b806375f0a874146105c25780637ab43983146105e25780638a8c523c146105f85780638da5cb5b1461060d57806395d89b411461062b578063975d71e21461064057600080fd5b8063313ce567116101fe57806366ca9b83116101b757806366ca9b83146105015780636a486a8e146105215780636ddd17131461053757806370a0823114610557578063715018a61461058d5780637571336a146105a257600080fd5b8063313ce56714610428578063395093511461044457806349bd5a5e146104645780634a62bb65146104985780634fbee193146104b257806365f84f21146104eb57600080fd5b80631694505e116102505780631694505e14610365578063173b717e146103b157806318160ddd146103c75780631a8145bb146103dc57806323b872dd146103f257806327c8f8351461041257600080fd5b806302dbd8f814610298578063047fc9aa146102ba57806306fdde03146102e3578063095ea7b31461030557806310d5de531461033557600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004611f84565b610886565b005b3480156102c657600080fd5b506102d060155481565b6040519081526020015b60405180910390f35b3480156102ef57600080fd5b506102f8610926565b6040516102da9190611fa6565b34801561031157600080fd5b50610325610320366004612013565b6109b8565b60405190151581526020016102da565b34801561034157600080fd5b5061032561035036600461203f565b60176020526000908152604090205460ff1681565b34801561037157600080fd5b506103997f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102da565b3480156103bd57600080fd5b506102d060125481565b3480156103d357600080fd5b506002546102d0565b3480156103e857600080fd5b506102d060115481565b3480156103fe57600080fd5b5061032561040d36600461205c565b6109cf565b34801561041e57600080fd5b5061039961dead81565b34801561043457600080fd5b50604051600981526020016102da565b34801561045057600080fd5b5061032561045f366004612013565b610a38565b34801561047057600080fd5b506103997f000000000000000000000000dd51d68784d95fc219b04d9f65a4a9eb44c69c4181565b3480156104a457600080fd5b50600a546103259060ff1681565b3480156104be57600080fd5b506103256104cd36600461203f565b6001600160a01b031660009081526016602052604090205460ff1690565b3480156104f757600080fd5b506102d0600d5481565b34801561050d57600080fd5b506102b861051c366004611f84565b610a6e565b34801561052d57600080fd5b506102d0600e5481565b34801561054357600080fd5b50600a546103259062010000900460ff1681565b34801561056357600080fd5b506102d061057236600461203f565b6001600160a01b031660009081526020819052604090205490565b34801561059957600080fd5b506102b8610b01565b3480156105ae57600080fd5b506102b86105bd36600461209d565b610b75565b3480156105ce57600080fd5b50600654610399906001600160a01b031681565b3480156105ee57600080fd5b506102d060135481565b34801561060457600080fd5b506102b8610bca565b34801561061957600080fd5b506005546001600160a01b0316610399565b34801561063757600080fd5b506102f8610c07565b34801561064c57600080fd5b506102d060145481565b34801561066257600080fd5b506102b861067136600461209d565b610c16565b34801561068257600080fd5b50610325610691366004612013565b610cf2565b3480156106a257600080fd5b506103256106b1366004612013565b610d41565b3480156106c257600080fd5b506102b86106d136600461203f565b610d4e565b3480156106e257600080fd5b506103256106f136600461203f565b60186020526000908152604090205460ff1681565b34801561071257600080fd5b50600a5461032590610100900460ff1681565b34801561073157600080fd5b506102b861074036600461209d565b610d9a565b34801561075157600080fd5b50600a54610325906301000000900460ff1681565b34801561077257600080fd5b506102d060075481565b34801561078857600080fd5b506102d060105481565b34801561079e57600080fd5b506103256107ad3660046120db565b610e23565b3480156107be57600080fd5b506102d0600b5481565b3480156107d457600080fd5b506102d06107e33660046120f4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081a57600080fd5b506102d060085481565b34801561083057600080fd5b506102d0600c5481565b34801561084657600080fd5b506102b861085536600461203f565b610f75565b34801561086657600080fd5b506102d0600f5481565b34801561087c57600080fd5b506102d060095481565b6005546001600160a01b031633146108b95760405162461bcd60e51b81526004016108b090612122565b60405180910390fd5b600f82905560108190556108cd818361216d565b600e819055603210156109225760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016108b0565b5050565b60606003805461093590612185565b80601f016020809104026020016040519081016040528092919081815260200182805461096190612185565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109c53384846110c6565b5060015b92915050565b60006109dc8484846111eb565b610a2e8433610a2985604051806060016040528060288152602001612399602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611898565b6110c6565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109c5918590610a299086611060565b6005546001600160a01b03163314610a985760405162461bcd60e51b81526004016108b090612122565b600c829055600d819055610aac818361216d565b600b819055603210156109225760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016108b0565b6005546001600160a01b03163314610b2b5760405162461bcd60e51b81526004016108b090612122565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b9f5760405162461bcd60e51b81526004016108b090612122565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610bf45760405162461bcd60e51b81526004016108b090612122565b600a805462ffff00191662010100179055565b60606004805461093590612185565b6005546001600160a01b03163314610c405760405162461bcd60e51b81526004016108b090612122565b7f000000000000000000000000dd51d68784d95fc219b04d9f65a4a9eb44c69c416001600160a01b0316826001600160a01b03161415610ce85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108b0565b61092282826118d2565b60006109c53384610a29856040518060600160405280602581526020016123c1602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611898565b60006109c53384846111eb565b6005546001600160a01b03163314610d785760405162461bcd60e51b81526004016108b090612122565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610dc45760405162461bcd60e51b81526004016108b090612122565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b03163314610e505760405162461bcd60e51b81526004016108b090612122565b620186a0610e5d60025490565b610e689060016121c0565b610e7291906121df565b821015610edf5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108b0565b6103e8610eeb60025490565b610ef69060056121c0565b610f0091906121df565b821115610f6c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108b0565b50600855600190565b6005546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016108b090612122565b6001600160a01b0381166110045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108b0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061106d838561216d565b9050838110156110bf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108b0565b9392505050565b6001600160a01b0383166111285760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108b0565b6001600160a01b0382166111895760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108b0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112115760405162461bcd60e51b81526004016108b090612201565b6001600160a01b0382166112375760405162461bcd60e51b81526004016108b090612246565b8061124d5761124883836000611926565b505050565b600a5460ff16156115c3576005546001600160a01b0384811691161480159061128457506005546001600160a01b03838116911614155b801561129857506001600160a01b03821615155b80156112af57506001600160a01b03821661dead14155b80156112c55750600554600160a01b900460ff16155b156115c357600a54610100900460ff1661135d576001600160a01b03831660009081526016602052604090205460ff168061131857506001600160a01b03821660009081526016602052604090205460ff165b61135d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108b0565b6001600160a01b03831660009081526018602052604090205460ff16801561139e57506001600160a01b03821660009081526017602052604090205460ff16155b15611482576007548111156114135760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108b0565b6009546001600160a01b038316600090815260208190526040902054611439908361216d565b111561147d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108b0565b6115c3565b6001600160a01b03821660009081526018602052604090205460ff1680156114c357506001600160a01b03831660009081526017602052604090205460ff16155b156115395760075481111561147d5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016108b0565b6001600160a01b03821660009081526017602052604090205460ff166115c3576009546001600160a01b03831660009081526020819052604090205461157f908361216d565b11156115c35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108b0565b30600090815260208190526040902054600854811080159081906115ef5750600a5462010000900460ff165b80156116055750600554600160a01b900460ff16155b801561162a57506001600160a01b03851660009081526018602052604090205460ff16155b801561164f57506001600160a01b03851660009081526016602052604090205460ff16155b801561167457506001600160a01b03841660009081526016602052604090205460ff16155b156116a2576005805460ff60a01b1916600160a01b179055611694611a2f565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526016602052604090205460ff600160a01b9092048216159116806116f057506001600160a01b03851660009081526016602052604090205460ff165b156116f9575060005b60008115611884576001600160a01b03861660009081526018602052604090205460ff16801561172b57506000600e54115b156117b957611750606461174a600e5488611b9490919063ffffffff16565b90611c13565b9050600e54600f548261176391906121c0565b61176d91906121df565b6011600082825461177e919061216d565b9091555050600e5460105461179390836121c0565b61179d91906121df565b601260008282546117ae919061216d565b909155506118669050565b6001600160a01b03871660009081526018602052604090205460ff1680156117e357506000600b54115b1561186657611802606461174a600b5488611b9490919063ffffffff16565b9050600b54600c548261181591906121c0565b61181f91906121df565b60116000828254611830919061216d565b9091555050600b54600d5461184590836121c0565b61184f91906121df565b60126000828254611860919061216d565b90915550505b801561187757611877873083611926565b6118818186612289565b94505b61188f878787611926565b50505050505050565b600081848411156118bc5760405162461bcd60e51b81526004016108b09190611fa6565b5060006118c98486612289565b95945050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661194c5760405162461bcd60e51b81526004016108b090612201565b6001600160a01b0382166119725760405162461bcd60e51b81526004016108b090612246565b6119af81604051806060016040528060268152602001612373602691396001600160a01b0386166000908152602081905260409020549190611898565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546119de9082611060565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016111de565b3060009081526020819052604081205490506000601254601154611a53919061216d565b90506000821580611a62575081155b15611a6c57505050565b600854611a7a9060056121c0565b831115611a9257600854611a8f9060056121c0565b92505b600060028360115486611aa591906121c0565b611aaf91906121df565b611ab991906121df565b90506000611ac78583611c55565b905047611ad382611c97565b6000611adf4783611c55565b90506000611afc8761174a60125485611b9490919063ffffffff16565b90506000611b0a8284612289565b6000601181905560125590508515801590611b255750600081115b15611b3457611b348682611e66565b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611b81576040519150601f19603f3d011682016040523d82523d6000602084013e611b86565b606091505b505050505050505050505050565b600082611ba3575060006109c9565b6000611baf83856121c0565b905082611bbc85836121df565b146110bf5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108b0565b60006110bf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f56565b60006110bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611898565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ccc57611ccc6122a0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4557600080fd5b505afa158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d91906122b6565b81600181518110611d9057611d906122a0565b60200260200101906001600160a01b031690816001600160a01b031681525050611ddb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846110c6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611e309085906000908690309042906004016122d3565b600060405180830381600087803b158015611e4a57600080fd5b505af1158015611e5e573d6000803e3d6000fd5b505050505050565b611e91307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846110c6565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015611f1657600080fd5b505af1158015611f2a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f4f9190612344565b5050505050565b60008183611f775760405162461bcd60e51b81526004016108b09190611fa6565b5060006118c984866121df565b60008060408385031215611f9757600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611fd357858101830151858201604001528201611fb7565b81811115611fe5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461201057600080fd5b50565b6000806040838503121561202657600080fd5b823561203181611ffb565b946020939093013593505050565b60006020828403121561205157600080fd5b81356110bf81611ffb565b60008060006060848603121561207157600080fd5b833561207c81611ffb565b9250602084013561208c81611ffb565b929592945050506040919091013590565b600080604083850312156120b057600080fd5b82356120bb81611ffb565b9150602083013580151581146120d057600080fd5b809150509250929050565b6000602082840312156120ed57600080fd5b5035919050565b6000806040838503121561210757600080fd5b823561211281611ffb565b915060208301356120d081611ffb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561218057612180612157565b500190565b600181811c9082168061219957607f821691505b602082108114156121ba57634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156121da576121da612157565b500290565b6000826121fc57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561229b5761229b612157565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156122c857600080fd5b81516110bf81611ffb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123235784516001600160a01b0316835293830193918301916001016122fe565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561235957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205afdf07c6bda17d6c186f06e172fcfd6481c90bec0ef3fcfc133db700c35074864736f6c63430008090033

Deployed Bytecode Sourcemap

29308:12411:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34504:346;;;;;;;;;;-1:-1:-1;34504:346:0;;;;;:::i;:::-;;:::i;:::-;;30339:21;;;;;;;;;;;;;;;;;;;413:25:1;;;401:2;386:18;30339:21:0;;;;;;;;7465:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9631:169::-;;;;;;;;;;-1:-1:-1;9631:169:0;;;;;:::i;:::-;;:::i;:::-;;;1672:14:1;;1665:22;1647:41;;1635:2;1620:18;9631:169:0;1507:187:1;30514:64:0;;;;;;;;;;-1:-1:-1;30514:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29386:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2142:32:1;;;2124:51;;2112:2;2097:18;29386:51:0;1951:230:1;30226:39:0;;;;;;;;;;;;;;;;8584:108;;;;;;;;;;-1:-1:-1;8672:12:0;;8584:108;;30186:33;;;;;;;;;;;;;;;;10282:355;;;;;;;;;;-1:-1:-1;10282:355:0;;;;;:::i;:::-;;:::i;29489:53::-;;;;;;;;;;;;29535:6;29489:53;;8427:92;;;;;;;;;;-1:-1:-1;8427:92:0;;8510:1;2997:36:1;;2985:2;2970:18;8427:92:0;2855:184:1;11046:218:0;;;;;;;;;;-1:-1:-1;11046:218:0;;;;;:::i;:::-;;:::i;29444:38::-;;;;;;;;;;;;;;;29776:33;;;;;;;;;;-1:-1:-1;29776:33:0;;;;;;;;35623:125;;;;;;;;;;-1:-1:-1;35623:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;35712:28:0;35688:4;35712:28;;;:19;:28;;;;;;;;;35623:125;30014:36;;;;;;;;;;;;;;;;34155:337;;;;;;;;;;-1:-1:-1;34155:337:0;;;;;:::i;:::-;;:::i;30063:28::-;;;;;;;;;;;;;;;;29855:30;;;;;;;;;;-1:-1:-1;29855:30:0;;;;;;;;;;;8755:127;;;;;;;;;;-1:-1:-1;8755:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8856:18:0;8829:7;8856:18;;;;;;;;;;;;8755:127;21929:148;;;;;;;;;;;;;:::i;34003:144::-;;;;;;;;;;-1:-1:-1;34003:144:0;;;;;:::i;:::-;;:::i;29581:30::-;;;;;;;;;;-1:-1:-1;29581:30:0;;;;-1:-1:-1;;;;;29581:30:0;;;30274:26;;;;;;;;;;;;;;;;33427:112;;;;;;;;;;;;;:::i;21287:79::-;;;;;;;;;;-1:-1:-1;21352:6:0;;-1:-1:-1;;;;;21352:6:0;21287:79;;7684:104;;;;;;;;;;;;;:::i;30307:25::-;;;;;;;;;;;;;;;;35048:244;;;;;;;;;;-1:-1:-1;35048:244:0;;;;;:::i;:::-;;:::i;11767:269::-;;;;;;;;;;-1:-1:-1;11767:269:0;;;;;:::i;:::-;;:::i;9095:175::-;;;;;;;;;;-1:-1:-1;9095:175:0;;;;;:::i;:::-;;:::i;35496:115::-;;;;;;;;;;-1:-1:-1;35496:115:0;;;;;:::i;:::-;;:::i;30736:58::-;;;;;;;;;;-1:-1:-1;30736:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29816:32;;;;;;;;;;-1:-1:-1;29816:32:0;;;;;;;;;;;34858:182;;;;;;;;;;-1:-1:-1;34858:182:0;;;;;:::i;:::-;;:::i;29894:40::-;;;;;;;;;;-1:-1:-1;29894:40:0;;;;;;;;;;;29661:35;;;;;;;;;;;;;;;;30136:37;;;;;;;;;;;;;;;;33610:381;;;;;;;;;;-1:-1:-1;33610:381:0;;;;;:::i;:::-;;:::i;29943:27::-;;;;;;;;;;;;;;;;9333:151;;;;;;;;;;-1:-1:-1;9333:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9449:18:0;;;9422:7;9449:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9333:151;29703:33;;;;;;;;;;;;;;;;29977:30;;;;;;;;;;;;;;;;22232:244;;;;;;;;;;-1:-1:-1;22232:244:0;;;;;:::i;:::-;;:::i;30098:31::-;;;;;;;;;;;;;;;;29743:24;;;;;;;;;;;;;;;;34504:346;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;;;;;;;;;34611:16:::1;:32:::0;;;34654:22:::1;:48:::0;;;34729:41:::1;34679:23:::0;34630:13;34729:41:::1;:::i;:::-;34713:13;:57:::0;;;34806:2:::1;-1:-1:-1::0;34789:19:0::1;34781:61;;;::::0;-1:-1:-1;;;34781:61:0;;4871:2:1;34781:61:0::1;::::0;::::1;4853:21:1::0;4910:2;4890:18;;;4883:30;4949:31;4929:18;;;4922:59;4998:18;;34781:61:0::1;4669:353:1::0;34781:61:0::1;34504:346:::0;;:::o;7465:100::-;7519:13;7552:5;7545:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7465:100;:::o;9631:169::-;9714:4;9731:39;181:10;9754:7;9763:6;9731:8;:39::i;:::-;-1:-1:-1;9788:4:0;9631:169;;;;;:::o;10282:355::-;10422:4;10439:36;10449:6;10457:9;10468:6;10439:9;:36::i;:::-;10486:121;10495:6;181:10;10517:89;10555:6;10517:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10517:19:0;;;;;;:11;:19;;;;;;;;181:10;10517:33;;;;;;;;;;:37;:89::i;:::-;10486:8;:121::i;:::-;-1:-1:-1;10625:4:0;10282:355;;;;;:::o;11046:218::-;181:10;11134:4;11183:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11183:34:0;;;;;;;;;;11134:4;;11151:83;;11174:7;;11183:50;;11222:10;11183:38;:50::i;34155:337::-;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;34260:15:::1;:31:::0;;;34302:21:::1;:46:::0;;;34374:39:::1;34326:22:::0;34278:13;34374:39:::1;:::i;:::-;34359:12;:54:::0;;;34448:2:::1;-1:-1:-1::0;34432:18:0::1;34424:60;;;::::0;-1:-1:-1;;;34424:60:0;;4871:2:1;34424:60:0::1;::::0;::::1;4853:21:1::0;4910:2;4890:18;;;4883:30;4949:31;4929:18;;;4922:59;4998:18;;34424:60:0::1;4669:353:1::0;21929:148:0;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;22020:6:::1;::::0;21999:40:::1;::::0;22036:1:::1;::::0;-1:-1:-1;;;;;22020:6:0::1;::::0;21999:40:::1;::::0;22036:1;;21999:40:::1;22050:6;:19:::0;;-1:-1:-1;;;;;;22050:19:0::1;::::0;;21929:148::o;34003:144::-;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34093:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;34093:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34003:144::o;33427:112::-;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;33482:13:::1;:20:::0;;-1:-1:-1;;33513:18:0;;;;;33427:112::o;7684:104::-;7740:13;7773:7;7766:14;;;;;:::i;35048:244::-;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;35155:13:::1;-1:-1:-1::0;;;;;35147:21:0::1;:4;-1:-1:-1::0;;;;;35147:21:0::1;;;35139:91;;;::::0;-1:-1:-1;;;35139:91:0;;5614:2:1;35139:91:0::1;::::0;::::1;5596:21:1::0;5653:2;5633:18;;;5626:30;5692:34;5672:18;;;5665:62;5763:27;5743:18;;;5736:55;5808:19;;35139:91:0::1;5412:421:1::0;35139:91:0::1;35243:41;35272:4;35278:5;35243:28;:41::i;11767:269::-:0;11860:4;11877:129;181:10;11900:7;11909:96;11948:15;11909:96;;;;;;;;;;;;;;;;;181:10;11909:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11909:34:0;;;;;;;;;;;;:38;:96::i;9095:175::-;9181:4;9198:42;181:10;9222:9;9233:6;9198:9;:42::i;35496:115::-;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;35576:15:::1;:27:::0;;-1:-1:-1;;;;;;35576:27:0::1;-1:-1:-1::0;;;;;35576:27:0;;;::::1;::::0;;;::::1;::::0;;35496:115::o;34858:182::-;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34943:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;34943:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34998:34;;1647:41:1;;;34998:34:0::1;::::0;1620:18:1;34998:34:0::1;;;;;;;34858:182:::0;;:::o;33610:381::-;21499:6;;33691:4;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;33747:6:::1;33727:13;8672:12:::0;;;8584:108;33727:13:::1;:17;::::0;33743:1:::1;33727:17;:::i;:::-;:26;;;;:::i;:::-;33714:9;:39;;33706:105;;;::::0;-1:-1:-1;;;33706:105:0;;6435:2:1;33706:105:0::1;::::0;::::1;6417:21:1::0;6474:2;6454:18;;;6447:30;6513:34;6493:18;;;6486:62;-1:-1:-1;;;6564:18:1;;;6557:51;6625:19;;33706:105:0::1;6233:417:1::0;33706:105:0::1;33862:4;33842:13;8672:12:::0;;;8584:108;33842:13:::1;:17;::::0;33858:1:::1;33842:17;:::i;:::-;:24;;;;:::i;:::-;33829:9;:37;;33821:102;;;::::0;-1:-1:-1;;;33821:102:0;;6857:2:1;33821:102:0::1;::::0;::::1;6839:21:1::0;6896:2;6876:18;;;6869:30;6935:34;6915:18;;;6908:62;-1:-1:-1;;;6986:18:1;;;6979:50;7046:19;;33821:102:0::1;6655:416:1::0;33821:102:0::1;-1:-1:-1::0;33933:18:0::1;:30:::0;33980:4:::1;::::0;33610:381::o;22232:244::-;21499:6;;-1:-1:-1;;;;;21499:6:0;181:10;21499:22;21491:67;;;;-1:-1:-1;;;21491:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22321:22:0;::::1;22313:73;;;::::0;-1:-1:-1;;;22313:73:0;;7278:2:1;22313:73:0::1;::::0;::::1;7260:21:1::0;7317:2;7297:18;;;7290:30;7356:34;7336:18;;;7329:62;-1:-1:-1;;;7407:18:1;;;7400:36;7453:19;;22313:73:0::1;7076:402:1::0;22313:73:0::1;22423:6;::::0;22402:38:::1;::::0;-1:-1:-1;;;;;22402:38:0;;::::1;::::0;22423:6:::1;::::0;22402:38:::1;::::0;22423:6:::1;::::0;22402:38:::1;22451:6;:17:::0;;-1:-1:-1;;;;;;22451:17:0::1;-1:-1:-1::0;;;;;22451:17:0;;;::::1;::::0;;;::::1;::::0;;22232:244::o;16331:181::-;16389:7;;16421:5;16425:1;16421;:5;:::i;:::-;16409:17;;16450:1;16445;:6;;16437:46;;;;-1:-1:-1;;;16437:46:0;;7685:2:1;16437:46:0;;;7667:21:1;7724:2;7704:18;;;7697:30;7763:29;7743:18;;;7736:57;7810:18;;16437:46:0;7483:351:1;16437:46:0;16503:1;16331:181;-1:-1:-1;;;16331:181:0:o;14953:380::-;-1:-1:-1;;;;;15089:19:0;;15081:68;;;;-1:-1:-1;;;15081:68:0;;8041:2:1;15081:68:0;;;8023:21:1;8080:2;8060:18;;;8053:30;8119:34;8099:18;;;8092:62;-1:-1:-1;;;8170:18:1;;;8163:34;8214:19;;15081:68:0;7839:400:1;15081:68:0;-1:-1:-1;;;;;15168:21:0;;15160:68;;;;-1:-1:-1;;;15160:68:0;;8446:2:1;15160:68:0;;;8428:21:1;8485:2;8465:18;;;8458:30;8524:34;8504:18;;;8497:62;-1:-1:-1;;;8575:18:1;;;8568:32;8617:19;;15160:68:0;8244:398:1;15160:68:0;-1:-1:-1;;;;;15241:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15293:32;;413:25:1;;;15293:32:0;;386:18:1;15293:32:0;;;;;;;;14953:380;;;:::o;35762:3436::-;-1:-1:-1;;;;;35894:18:0;;35886:68;;;;-1:-1:-1;;;35886:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35973:16:0;;35965:64;;;;-1:-1:-1;;;35965:64:0;;;;;;;:::i;:::-;36054:11;36051:92;;36082:28;36098:4;36104:2;36108:1;36082:15;:28::i;:::-;35762:3436;;;:::o;36051:92::-;36166:14;;;;36163:1249;;;21352:6;;-1:-1:-1;;;;;36218:15:0;;;21352:6;;36218:15;;;;:49;;-1:-1:-1;21352:6:0;;-1:-1:-1;;;;;36254:13:0;;;21352:6;;36254:13;;36218:49;:86;;;;-1:-1:-1;;;;;;36288:16:0;;;;36218:86;:128;;;;-1:-1:-1;;;;;;36325:21:0;;36339:6;36325:21;;36218:128;:158;;;;-1:-1:-1;36368:8:0;;-1:-1:-1;;;36368:8:0;;;;36367:9;36218:158;36196:1205;;;36414:13;;;;;;;36410:148;;-1:-1:-1;;;;;36459:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;36488:23:0;;;;;;:19;:23;;;;;;;;36459:52;36451:87;;;;-1:-1:-1;;;36451:87:0;;9659:2:1;36451:87:0;;;9641:21:1;9698:2;9678:18;;;9671:30;-1:-1:-1;;;9717:18:1;;;9710:52;9779:18;;36451:87:0;9457:346:1;36451:87:0;-1:-1:-1;;;;;36612:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;36648:35:0;;;;;;:31;:35;;;;;;;;36647:36;36612:71;36608:778;;;36730:20;;36720:6;:30;;36712:96;;;;-1:-1:-1;;;36712:96:0;;10010:2:1;36712:96:0;;;9992:21:1;10049:2;10029:18;;;10022:30;10088:34;10068:18;;;10061:62;-1:-1:-1;;;10139:18:1;;;10132:51;10200:19;;36712:96:0;9808:417:1;36712:96:0;36869:9;;-1:-1:-1;;;;;8856:18:0;;8829:7;8856:18;;;;;;;;;;;36843:22;;:6;:22;:::i;:::-;:35;;36835:67;;;;-1:-1:-1;;;36835:67:0;;10432:2:1;36835:67:0;;;10414:21:1;10471:2;10451:18;;;10444:30;-1:-1:-1;;;10490:18:1;;;10483:49;10549:18;;36835:67:0;10230:343:1;36835:67:0;36608:778;;;-1:-1:-1;;;;;36996:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;37030:37:0;;;;;;:31;:37;;;;;;;;37029:38;36996:71;36992:394;;;37114:20;;37104:6;:30;;37096:97;;;;-1:-1:-1;;;37096:97:0;;10780:2:1;37096:97:0;;;10762:21:1;10819:2;10799:18;;;10792:30;10858:34;10838:18;;;10831:62;-1:-1:-1;;;10909:18:1;;;10902:52;10971:19;;37096:97:0;10578:418:1;36992:394:0;-1:-1:-1;;;;;37240:35:0;;;;;;:31;:35;;;;;;;;37236:150;;37333:9;;-1:-1:-1;;;;;8856:18:0;;8829:7;8856:18;;;;;;;;;;;37307:22;;:6;:22;:::i;:::-;:35;;37299:67;;;;-1:-1:-1;;;37299:67:0;;10432:2:1;37299:67:0;;;10414:21:1;10471:2;10451:18;;;10444:30;-1:-1:-1;;;10490:18:1;;;10483:49;10549:18;;37299:67:0;10230:343:1;37299:67:0;37495:4;37446:28;8856:18;;;;;;;;;;;37561;;37537:42;;;;;;;37610:35;;-1:-1:-1;37634:11:0;;;;;;;37610:35;:61;;;;-1:-1:-1;37663:8:0;;-1:-1:-1;;;37663:8:0;;;;37662:9;37610:61;:110;;;;-1:-1:-1;;;;;;37689:31:0;;;;;;:25;:31;;;;;;;;37688:32;37610:110;:153;;;;-1:-1:-1;;;;;;37738:25:0;;;;;;:19;:25;;;;;;;;37737:26;37610:153;:194;;;;-1:-1:-1;;;;;;37781:23:0;;;;;;:19;:23;;;;;;;;37780:24;37610:194;37592:338;;;37831:8;:15;;-1:-1:-1;;;;37831:15:0;-1:-1:-1;;;37831:15:0;;;37875:10;:8;:10::i;:::-;37902:8;:16;;-1:-1:-1;;;;37902:16:0;;;37592:338;37966:8;;-1:-1:-1;;;;;38075:25:0;;37950:12;38075:25;;;:19;:25;;;;;;37966:8;-1:-1:-1;;;37966:8:0;;;;;37965:9;;38075:25;;:52;;-1:-1:-1;;;;;;38104:23:0;;;;;;:19;:23;;;;;;;;38075:52;38072:99;;;-1:-1:-1;38154:5:0;38072:99;38191:12;38295:7;38292:853;;;-1:-1:-1;;;;;38346:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;38395:1;38379:13;;:17;38346:50;38342:638;;;38423:34;38453:3;38423:25;38434:13;;38423:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;38416:41;;38524:13;;38505:16;;38498:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38476:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;38616:13:0;;38591:22;;38584:29;;:4;:29;:::i;:::-;:45;;;;:::i;:::-;38556:24;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;38342:638:0;;-1:-1:-1;38342:638:0;;-1:-1:-1;;;;;38690:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;38740:1;38725:12;;:16;38690:51;38687:293;;;38766:33;38795:3;38766:24;38777:12;;38766:6;:10;;:24;;;;:::i;:33::-;38759:40;;38862:12;;38844:15;;38837:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38815:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;38952:12:0;;38928:21;;38921:28;;:4;:28;:::i;:::-;:43;;;;:::i;:::-;38893:24;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;38687:293:0;39011:8;;39008:89;;39039:42;39055:4;39069;39076;39039:15;:42::i;:::-;39119:14;39129:4;39119:14;;:::i;:::-;;;38292:853;39157:33;39173:4;39179:2;39183:6;39157:15;:33::i;:::-;35875:3323;;;;35762:3436;;;:::o;17234:192::-;17320:7;17356:12;17348:6;;;;17340:29;;;;-1:-1:-1;;;17340:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17380:9:0;17392:5;17396:1;17392;:5;:::i;:::-;17380:17;17234:192;-1:-1:-1;;;;;17234:192:0:o;35300:188::-;-1:-1:-1;;;;;35383:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;35383:39:0;;;;;;;;;;35440:40;;35383:39;;:31;35440:40;;;35300:188;;:::o;12526:573::-;-1:-1:-1;;;;;12666:20:0;;12658:70;;;;-1:-1:-1;;;12658:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12747:23:0;;12739:71;;;;-1:-1:-1;;;12739:71:0;;;;;;;:::i;:::-;12903;12925:6;12903:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12903:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12883:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13008:20;;;;;;;:32;;13033:6;13008:24;:32::i;:::-;-1:-1:-1;;;;;12985:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13056:35;413:25:1;;;12985:20:0;;13056:35;;;;;;386:18:1;13056:35:0;267:177:1;40356:1356:0;40439:4;40395:23;8856:18;;;;;;;;;;;40395:50;;40456:25;40505:24;;40484:18;;:45;;;;:::i;:::-;40456:73;-1:-1:-1;40540:12:0;40576:20;;;:46;;-1:-1:-1;40600:22:0;;40576:46;40573:60;;;40625:7;;;40356:1356::o;40573:60::-;40666:18;;:22;;40687:1;40666:22;:::i;:::-;40648:15;:40;40645:109;;;40720:18;;:22;;40741:1;40720:22;:::i;:::-;40702:40;;40645:109;40823:23;40908:1;40888:17;40867:18;;40849:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40823:86;-1:-1:-1;40920:26:0;40949:36;:15;40823:86;40949:19;:36::i;:::-;40920:65;-1:-1:-1;41034:21:0;41068:36;40920:65;41068:16;:36::i;:::-;41126:18;41147:44;:21;41173:17;41147:25;:44::i;:::-;41126:65;;41212:23;41238:63;41283:17;41238:40;41253:24;;41238:10;:14;;:40;;;;:::i;:63::-;41212:89;-1:-1:-1;41322:23:0;41348:28;41212:89;41348:10;:28;:::i;:::-;41428:1;41407:18;:22;;;41440:24;:28;41322:54;-1:-1:-1;41492:19:0;;;;;:42;;;41533:1;41515:15;:19;41492:42;41489:119;;;41550:46;41563:15;41580;41550:12;:46::i;:::-;41649:15;;41641:63;;-1:-1:-1;;;;;41649:15:0;;;;41678:21;;41641:63;;;;41678:21;41649:15;41641:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;40356:1356:0:o;17685:471::-;17743:7;17988:6;17984:47;;-1:-1:-1;18018:1:0;18011:8;;17984:47;18043:9;18055:5;18059:1;18055;:5;:::i;:::-;18043:17;-1:-1:-1;18088:1:0;18079:5;18083:1;18043:17;18079:5;:::i;:::-;:10;18071:56;;;;-1:-1:-1;;;18071:56:0;;11543:2:1;18071:56:0;;;11525:21:1;11582:2;11562:18;;;11555:30;11621:34;11601:18;;;11594:62;-1:-1:-1;;;11672:18:1;;;11665:31;11713:19;;18071:56:0;11341:397:1;18632:132:0;18690:7;18717:39;18721:1;18724;18717:39;;;;;;;;;;;;;;;;;:3;:39::i;16795:136::-;16853:7;16880:43;16884:1;16887;16880:43;;;;;;;;;;;;;;;;;:3;:43::i;39206:601::-;39358:16;;;39372:1;39358:16;;;;;;;;39334:21;;39358:16;;;;;;;;;;-1:-1:-1;39358:16:0;39334:40;;39403:4;39385;39390:1;39385:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39385:23:0;;;-1:-1:-1;;;;;39385:23:0;;;;;39429:15;-1:-1:-1;;;;;39429:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39419:4;39424:1;39419:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;39419:32:0;;;-1:-1:-1;;;;;39419:32:0;;;;;39464:62;39481:4;39496:15;39514:11;39464:8;:62::i;:::-;39565:224;;-1:-1:-1;;;39565:224:0;;-1:-1:-1;;;;;39565:15:0;:66;;;;:224;;39646:11;;39672:1;;39716:4;;39743;;39763:15;;39565:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39261:546;39206:601;:::o;39831:517::-;39979:62;39996:4;40011:15;40029:11;39979:8;:62::i;:::-;40084:256;;-1:-1:-1;;;40084:256:0;;40156:4;40084:256;;;13589:34:1;13639:18;;;13632:34;;;40202:1:0;13682:18:1;;;13675:34;;;13725:18;;;13718:34;29535:6:0;13768:19:1;;;13761:44;40314:15:0;13821:19:1;;;13814:35;40084:15:0;-1:-1:-1;;;;;40084:31:0;;;;40123:9;;13523:19:1;;40084:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39831:517;;:::o;19260:278::-;19346:7;19381:12;19374:5;19366:28;;;;-1:-1:-1;;;19366:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19405:9:0;19417:5;19421:1;19417;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;449:597::-;561:4;590:2;619;608:9;601:21;651:6;645:13;694:6;689:2;678:9;674:18;667:34;719:1;729:140;743:6;740:1;737:13;729:140;;;838:14;;;834:23;;828:30;804:17;;;823:2;800:26;793:66;758:10;;729:140;;;887:6;884:1;881:13;878:91;;;957:1;952:2;943:6;932:9;928:22;924:31;917:42;878:91;-1:-1:-1;1030:2:1;1009:15;-1:-1:-1;;1005:29:1;990:45;;;;1037:2;986:54;;449:597;-1:-1:-1;;;449:597:1:o;1051:131::-;-1:-1:-1;;;;;1126:31:1;;1116:42;;1106:70;;1172:1;1169;1162:12;1106:70;1051:131;:::o;1187:315::-;1255:6;1263;1316:2;1304:9;1295:7;1291:23;1287:32;1284:52;;;1332:1;1329;1322:12;1284:52;1371:9;1358:23;1390:31;1415:5;1390:31;:::i;:::-;1440:5;1492:2;1477:18;;;;1464:32;;-1:-1:-1;;;1187:315:1:o;1699:247::-;1758:6;1811:2;1799:9;1790:7;1786:23;1782:32;1779:52;;;1827:1;1824;1817:12;1779:52;1866:9;1853:23;1885:31;1910:5;1885:31;:::i;2186:456::-;2263:6;2271;2279;2332:2;2320:9;2311:7;2307:23;2303:32;2300:52;;;2348:1;2345;2338:12;2300:52;2387:9;2374:23;2406:31;2431:5;2406:31;:::i;:::-;2456:5;-1:-1:-1;2513:2:1;2498:18;;2485:32;2526:33;2485:32;2526:33;:::i;:::-;2186:456;;2578:7;;-1:-1:-1;;;2632:2:1;2617:18;;;;2604:32;;2186:456::o;3044:416::-;3109:6;3117;3170:2;3158:9;3149:7;3145:23;3141:32;3138:52;;;3186:1;3183;3176:12;3138:52;3225:9;3212:23;3244:31;3269:5;3244:31;:::i;:::-;3294:5;-1:-1:-1;3351:2:1;3336:18;;3323:32;3393:15;;3386:23;3374:36;;3364:64;;3424:1;3421;3414:12;3364:64;3447:7;3437:17;;;3044:416;;;;;:::o;3465:180::-;3524:6;3577:2;3565:9;3556:7;3552:23;3548:32;3545:52;;;3593:1;3590;3583:12;3545:52;-1:-1:-1;3616:23:1;;3465:180;-1:-1:-1;3465:180:1:o;3650:388::-;3718:6;3726;3779:2;3767:9;3758:7;3754:23;3750:32;3747:52;;;3795:1;3792;3785:12;3747:52;3834:9;3821:23;3853:31;3878:5;3853:31;:::i;:::-;3903:5;-1:-1:-1;3960:2:1;3945:18;;3932:32;3973:33;3932:32;3973:33;:::i;4043:356::-;4245:2;4227:21;;;4264:18;;;4257:30;4323:34;4318:2;4303:18;;4296:62;4390:2;4375:18;;4043:356::o;4404:127::-;4465:10;4460:3;4456:20;4453:1;4446:31;4496:4;4493:1;4486:15;4520:4;4517:1;4510:15;4536:128;4576:3;4607:1;4603:6;4600:1;4597:13;4594:39;;;4613:18;;:::i;:::-;-1:-1:-1;4649:9:1;;4536:128::o;5027:380::-;5106:1;5102:12;;;;5149;;;5170:61;;5224:4;5216:6;5212:17;5202:27;;5170:61;5277:2;5269:6;5266:14;5246:18;5243:38;5240:161;;;5323:10;5318:3;5314:20;5311:1;5304:31;5358:4;5355:1;5348:15;5386:4;5383:1;5376:15;5240:161;;5027:380;;;:::o;5838:168::-;5878:7;5944:1;5940;5936:6;5932:14;5929:1;5926:21;5921:1;5914:9;5907:17;5903:45;5900:71;;;5951:18;;:::i;:::-;-1:-1:-1;5991:9:1;;5838:168::o;6011:217::-;6051:1;6077;6067:132;;6121:10;6116:3;6112:20;6109:1;6102:31;6156:4;6153:1;6146:15;6184:4;6181:1;6174:15;6067:132;-1:-1:-1;6213:9:1;;6011:217::o;8647:401::-;8849:2;8831:21;;;8888:2;8868:18;;;8861:30;8927:34;8922:2;8907:18;;8900:62;-1:-1:-1;;;8993:2:1;8978:18;;8971:35;9038:3;9023:19;;8647:401::o;9053:399::-;9255:2;9237:21;;;9294:2;9274:18;;;9267:30;9333:34;9328:2;9313:18;;9306:62;-1:-1:-1;;;9399:2:1;9384:18;;9377:33;9442:3;9427:19;;9053:399::o;11001:125::-;11041:4;11069:1;11066;11063:8;11060:34;;;11074:18;;:::i;:::-;-1:-1:-1;11111:9:1;;11001:125::o;11875:127::-;11936:10;11931:3;11927:20;11924:1;11917:31;11967:4;11964:1;11957:15;11991:4;11988:1;11981:15;12007:251;12077:6;12130:2;12118:9;12109:7;12105:23;12101:32;12098:52;;;12146:1;12143;12136:12;12098:52;12178:9;12172:16;12197:31;12222:5;12197:31;:::i;12263:980::-;12525:4;12573:3;12562:9;12558:19;12604:6;12593:9;12586:25;12630:2;12668:6;12663:2;12652:9;12648:18;12641:34;12711:3;12706:2;12695:9;12691:18;12684:31;12735:6;12770;12764:13;12801:6;12793;12786:22;12839:3;12828:9;12824:19;12817:26;;12878:2;12870:6;12866:15;12852:29;;12899:1;12909:195;12923:6;12920:1;12917:13;12909:195;;;12988:13;;-1:-1:-1;;;;;12984:39:1;12972:52;;13079:15;;;;13044:12;;;;13020:1;12938:9;12909:195;;;-1:-1:-1;;;;;;;13160:32:1;;;;13155:2;13140:18;;13133:60;-1:-1:-1;;;13224:3:1;13209:19;13202:35;13121:3;12263:980;-1:-1:-1;;;12263:980:1:o;13860:306::-;13948:6;13956;13964;14017:2;14005:9;13996:7;13992:23;13988:32;13985:52;;;14033:1;14030;14023:12;13985:52;14062:9;14056:16;14046:26;;14112:2;14101:9;14097:18;14091:25;14081:35;;14156:2;14145:9;14141:18;14135:25;14125:35;;13860:306;;;;;:::o

Swarm Source

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