ETH Price: $2,276.39 (+0.01%)
Gas: 0.15 Gwei
 

Overview

Max Total Supply

100,000,000 HUB

Holders

3

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
HUBIC

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2025-06-24
*/

/*

Hubic is an Ethereum-native protocol enabling cryptographically verifiable AI computation within a decentralized, trust-minimized execution framework.

Website: https://hubic.finance
X: https://x.com/HubicFi
TG: https://t.me/HubicFi
Docs:  https://docs.hubic.finance

*/

pragma solidity ^0.8.30;

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 TaxTo() external view returns (address);

    function TaxToSetter() 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 setTaxTo(address) external;

    function setTaxToSetter(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 18;
        }

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

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

        /**
         * @dev See {IERC20-transfer}.
         *
         * Requirements:
         *
         * - `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 Taxs, 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 removeLiquidityETHSupportingTaxOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountETH);

        function removeLiquidityETHWithPermitSupportingTaxOnTransferTokens(
            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 swapExactTokensForTokensSupportingTaxOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;

        function swapExactETHForTokensSupportingTaxOnTransferTokens(
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external payable;

        function swapExactTokensForETHSupportingTaxOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;
    }

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public HUBIC;

    bool private swapping;

    address public marketingWallet;
    address public HUBICWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Seller Map
    mapping(address => uint256) private _holderFirstBuyTimestamp;

    // Blacklist Map
    mapping(address => bool) private _blacklist;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalTaxs;
    uint256 public buyMarketingTax;
    uint256 public buyLiqTax;
    uint256 public buyHUBICTax;

    uint256 public sellTotalTaxs;
    uint256 public sellMarketingTax;
    uint256 public sellLiqTax;
    uint256 public sellHUBICTax;

    uint256 public earlySellLiqTax;
    uint256 public earlySellMarketingTax;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // block number of opened trading
    uint256 launchedAt;

    /******************/

    // exclude from Taxs and max transaction amount
    mapping(address => bool) private _isExcludedFromTaxs;
    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 ExcludeFromTaxs(address indexed account, bool isExcluded);

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

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

    event HUBICWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(unicode"Hubic", unicode"HUB") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // #################################################################
        marketingWallet = address(0x8532770B8F2A692F8904208a28F7C49DE22b5EC8); // set as marketing wallet
        HUBICWallet = address(0x8532770B8F2A692F8904208a28F7C49DE22b5EC8); // set as dev wallet
        // #################################################################

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingTax = 20;
        uint256 _buyLiqTax = 0;
        uint256 _buyHUBICTax = 0;

        uint256 _sellMarketingTax = 20;
        uint256 _sellLiqTax = 0;
        uint256 _sellHUBICTax = 0;

        uint256 _earlySellLiqTax = 0;
        uint256 _earlySellMarketingTax = 0;

        uint256 totalSupply = 100000000 * 1e18;

        maxTransactionAmount = (totalSupply * 3) / 1000; // .3% maxtransaction
        maxWallet = (totalSupply * 20) / 1000; // 2% maxwallet
        swapTokensAtAmount = (totalSupply * 20) / 1000; //2% swapwallet

        buyMarketingTax = _buyMarketingTax;
        buyLiqTax = _buyLiqTax;
        buyHUBICTax = _buyHUBICTax;
        buyTotalTaxs = buyMarketingTax + buyLiqTax + buyHUBICTax;

        sellMarketingTax = _sellMarketingTax;
        sellLiqTax = _sellLiqTax;
        sellHUBICTax = _sellHUBICTax;
        sellTotalTaxs = sellMarketingTax + sellLiqTax + sellHUBICTax;

        earlySellLiqTax = _earlySellLiqTax;
        earlySellMarketingTax = _earlySellMarketingTax;

        // exclude from paying Taxs or having max transaction amount
        excludeFromTaxs(owner(), true);
        excludeFromTaxs(address(this), true);
        excludeFromTaxs(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function setEarlySellTax(bool onoff) external onlyOwner {
        enableEarlySellTax = onoff;
    }

    // change the minimum amount of tokens to sell from Taxs
    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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 15) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.5%"
        );
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyTaxs(
        uint256 _marketingTax,
        uint256 _LiqTax,
        uint256 _HUBICTax
    ) external onlyOwner {
        buyMarketingTax = _marketingTax;
        buyLiqTax = _LiqTax;
        buyHUBICTax = _HUBICTax;
        buyTotalTaxs = buyMarketingTax + buyLiqTax + buyHUBICTax;
    }

    function updateSellTaxs(
        uint256 _marketingTax,
        uint256 _LiqTax,
        uint256 _HUBICTax,
        uint256 _earlySellLiqTax,
        uint256 _earlySellMarketingTax
    ) external onlyOwner {
        sellMarketingTax = _marketingTax;
        sellLiqTax = _LiqTax;
        sellHUBICTax = _HUBICTax;
        earlySellLiqTax = _earlySellLiqTax;
        earlySellMarketingTax = _earlySellMarketingTax;
        sellTotalTaxs = sellMarketingTax + sellLiqTax + sellHUBICTax;
    }

    function excludeFromTaxs(address account, bool excluded) public onlyOwner {
        _isExcludedFromTaxs[account] = excluded;
        emit ExcludeFromTaxs(account, excluded);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return _blacklist[account];
    }

    function blacklistAccounts(
        address[] memory accounts,
        bool isBlacklisted
    ) public onlyOwner {
        require(accounts.length > 0, "Accounts list cannot be empty.");
        for (uint256 i = 0; i < accounts.length; i++) {
            _blacklist[accounts[i]] = isBlacklisted;
        }
    }

    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 newMarketingWallet
    ) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

        function set_HUBIC(address new_HUBIC_address) external onlyOwner {
        HUBIC = new_HUBIC_address;
    }

    function updateHUBICWallet(address newWallet) external onlyOwner {
        emit HUBICWalletUpdated(newWallet, HUBICWallet);
        HUBICWallet = newWallet;
    }

    function isExcludedFromTaxs(address account) public view returns (bool) {
        return _isExcludedFromTaxs[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            !_blacklist[to] && !_blacklist[from],
            "You have been blacklisted from transfering tokens"
        );
        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(
                        _isExcludedFromTaxs[from] || _isExcludedFromTaxs[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        // anti bot logic
        if (
            block.number <= (launchedAt + 0) &&
            to != uniswapV2Pair &&
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) {
            _blacklist[to] = false;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeTax = !swapping;

        // if any account belongs to _isExcludedFromTax account then remove the Tax
        if (_isExcludedFromTaxs[from] || _isExcludedFromTaxs[to]) {
            takeTax = false;
        }

        uint256 Taxs = 0;
        // only take Taxs on buys/sells, do not take on wallet transfers
        if (takeTax) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalTaxs > 0) {
                Taxs = amount.mul(sellTotalTaxs).div(100);
                tokensForLiquidity += (Taxs * sellLiqTax) / sellTotalTaxs;
                tokensForDev += (Taxs * sellHUBICTax) / sellTotalTaxs;
                tokensForMarketing += (Taxs * sellMarketingTax) / sellTotalTaxs;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalTaxs > 0) {
                Taxs = amount.mul(buyTotalTaxs).div(100);
                tokensForLiquidity += (Taxs * buyLiqTax) / buyTotalTaxs;
                tokensForDev += (Taxs * buyHUBICTax) / buyTotalTaxs;
                tokensForMarketing += (Taxs * buyMarketingTax) / buyTotalTaxs;
            }

            if (Taxs > 0) {
                super._transfer(from, address(this), Taxs);
            }

            amount -= Taxs;
        }

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

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

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

        uniswapV2Router.swapExactTokensForETHSupportingTaxOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(HUBICWallet).call{value: ethForDev}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromTaxs","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"HUBICWalletUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"HUBIC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HUBICWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyHUBICTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiqTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTaxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiqTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromTaxs","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromTaxs","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellHUBICTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiqTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTaxs","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":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_HUBIC_address","type":"address"}],"name":"set_HUBIC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_LiqTax","type":"uint256"},{"internalType":"uint256","name":"_HUBICTax","type":"uint256"}],"name":"updateBuyTaxs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateHUBICWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_LiqTax","type":"uint256"},{"internalType":"uint256","name":"_HUBICTax","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiqTax","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingTax","type":"uint256"}],"name":"updateSellTaxs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600c805463ffffffff191663010000011790556010805460ff1916600117905534801561002f575f5ffd5b5060405180604001604052806005815260200164487562696360d81b81525060405180604001604052806003815260200162242aa160e91b8152508160039081610079919061073a565b506004610086828261073a565b5050505f6100986103ea60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060078054738532770b8f2a692f8904208a28f7c49de22b5ec86001600160a01b03199182168117909255600880549091169091179055737a250d5630b4cf539739df2c5dacb4c659f2488d61013b8160016103ee565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610183573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a791906107f4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021691906107f4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610260573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028491906107f4565b6001600160a01b031660a081905261029d9060016103ee565b60a0516102ab906001610463565b60145f8082818080806a52b7d2dcc80cd2e40000006103e86102ce82600361082e565b6102d89190610845565b6009556103e86102e982601461082e565b6102f39190610845565b600b556103e861030482601461082e565b61030e9190610845565b600a556012899055601388905560148790558661032b898b610864565b6103359190610864565b601155601686905560178590556018849055836103528688610864565b61035c9190610864565b6015556019839055601a82905561038561037e6005546001600160a01b031690565b60016104b6565b6103903060016104b6565b61039d61dead60016104b6565b6103b96103b26005546001600160a01b031690565b60016103ee565b6103c43060016103ee565b6103d161dead60016103ee565b6103db338261055b565b50505050505050505050610877565b3390565b6005546001600160a01b0316331461043a5760405162461bcd60e51b815260206004820181905260248201525f51602061363f5f395f51905f5260448201526064015b60405180910390fd5b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146104fd5760405162461bcd60e51b815260206004820181905260248201525f51602061363f5f395f51905f526044820152606401610431565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f212e55a992c1f71d205bb238d4939208713224c4a7978ea26450599bd3a893a0910160405180910390a25050565b6001600160a01b0382166105b15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610431565b6002546105be908261063c565b6002556001600160a01b0382165f908152602081905260409020546105e3908261063c565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f806106488385610864565b90508381101561069a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610431565b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806106cb57607f821691505b6020821081036106e957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561063757805f5260205f20601f840160051c810160208510156107145750805b601f840160051c820191505b81811015610733575f8155600101610720565b5050505050565b81516001600160401b03811115610753576107536106a3565b6107678161076184546106b7565b846106ef565b6020601f821160018114610799575f83156107825750848201515b5f19600385901b1c1916600184901b178455610733565b5f84815260208120601f198516915b828110156107c857878501518255602094850194600190920191016107a8565b50848210156107e557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610804575f5ffd5b81516001600160a01b038116811461069a575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761069d5761069d61081a565b5f8261085f57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561069d5761069d61081a565b60805160a051612d766108c95f395f818161063a015281816110b301528181611a990152611def01525f818161049101528181611a5b015281816126710152818161272801526127640152612d765ff3fe608060405260043610610395575f3560e01c80638da5cb5b116101de578063bbc0c74211610108578063dd62ed3e1161009d578063e96db1ef1161006d578063e96db1ef14610a81578063f2fde38b14610a96578063f8b45b0514610ab5578063fe575a8714610aca575f5ffd5b8063dd62ed3e146109ff578063e2f4560514610a43578063e884f26014610a58578063e8a2d03c14610a6c575f5ffd5b8063c876d0b9116100d8578063c876d0b91461099d578063c8c8ebe4146109b6578063d257b34f146109cb578063daf447e3146109ea575f5ffd5b8063bbc0c74214610936578063bcb9595814610954578063c18bc19514610969578063c4bd0b1114610988575f5ffd5b8063a26577781161017e578063aacebbe31161014e578063aacebbe3146108b5578063abd3d516146108d4578063af0e646a146108e9578063b62496f514610908575f5ffd5b8063a265777814610838578063a457c2d714610857578063a4d15b6414610876578063a9059cbb14610896575f5ffd5b80639a7a23d6116101b95780639a7a23d6146107c65780639ccf6e21146107e55780639fccce3214610804578063a065dc1714610819575f5ffd5b80638da5cb5b14610776578063924de9b71461079357806395d89b41146107b2575f5ffd5b806338e2f291116102bf5780636ddd17131161025f578063751039fc1161022f578063751039fc146107105780637571336a1461072457806375f0a874146107435780638a8c523c14610762575f5ffd5b80636ddd1713146106945780636f6ce863146106b357806370a08231146106c8578063715018a6146106fc575f5ffd5b806343aad8bd1161029a57806343aad8bd1461060a57806349bd5a5e146106295780634a62bb651461065c5780636c5b64ba14610675575f5ffd5b806338e2f2911461059557806339509351146105b457806339d0fd5e146105d3575f5ffd5b80631a8145bb1161033557806323b872dd1161030557806323b872dd14610531578063277af43b14610550578063313ce567146105655780633301241114610580575f5ffd5b80631a8145bb146104c75780631e2f6073146104dc5780631f3fed8f146104fd578063203e727e14610512575f5ffd5b806310d5de531161037057806310d5de531461041c57806313124e79146104495780631694505e1461048057806318160ddd146104b3575f5ffd5b806306fdde03146103a0578063095ea7b3146103ca5780630d0b33dd146103f9575f5ffd5b3661039c57005b5f5ffd5b3480156103ab575f5ffd5b506103b4610b01565b6040516103c191906127fe565b60405180910390f35b3480156103d5575f5ffd5b506103e96103e4366004612855565b610b91565b60405190151581526020016103c1565b348015610404575f5ffd5b5061040e60155481565b6040519081526020016103c1565b348015610427575f5ffd5b506103e961043636600461287f565b602080525f908152604090205460ff1681565b348015610454575f5ffd5b50600654610468906001600160a01b031681565b6040516001600160a01b0390911681526020016103c1565b34801561048b575f5ffd5b506104687f000000000000000000000000000000000000000000000000000000000000000081565b3480156104be575f5ffd5b5060025461040e565b3480156104d2575f5ffd5b5061040e601c5481565b3480156104e7575f5ffd5b506104fb6104f636600461287f565b610ba7565b005b348015610508575f5ffd5b5061040e601b5481565b34801561051d575f5ffd5b506104fb61052c36600461289a565b610c36565b34801561053c575f5ffd5b506103e961054b3660046128b1565b610d13565b34801561055b575f5ffd5b5061040e60175481565b348015610570575f5ffd5b50604051601281526020016103c1565b34801561058b575f5ffd5b5061040e60125481565b3480156105a0575f5ffd5b506104fb6105af3660046128ef565b610d7a565b3480156105bf575f5ffd5b506103e96105ce366004612855565b610dd0565b3480156105de575f5ffd5b506103e96105ed36600461287f565b6001600160a01b03165f908152601f602052604090205460ff1690565b348015610615575f5ffd5b506104fb610624366004612927565b610e05565b348015610634575f5ffd5b506104687f000000000000000000000000000000000000000000000000000000000000000081565b348015610667575f5ffd5b50600c546103e99060ff1681565b348015610680575f5ffd5b506104fb61068f36600461295a565b610e8d565b34801561069f575f5ffd5b50600c546103e99062010000900460ff1681565b3480156106be575f5ffd5b5061040e60145481565b3480156106d3575f5ffd5b5061040e6106e236600461287f565b6001600160a01b03165f9081526020819052604090205490565b348015610707575f5ffd5b506104fb610eef565b34801561071b575f5ffd5b506103e9610f62565b34801561072f575f5ffd5b506104fb61073e366004612927565b610f9e565b34801561074e575f5ffd5b50600754610468906001600160a01b031681565b34801561076d575f5ffd5b506104fb610ff1565b348015610781575f5ffd5b506005546001600160a01b0316610468565b34801561079e575f5ffd5b506104fb6107ad366004612991565b611032565b3480156107bd575f5ffd5b506103b4611078565b3480156107d1575f5ffd5b506104fb6107e0366004612927565b611087565b3480156107f0575f5ffd5b506104fb6107ff3660046129be565b611166565b34801561080f575f5ffd5b5061040e601d5481565b348015610824575f5ffd5b50600854610468906001600160a01b031681565b348015610843575f5ffd5b506104fb610852366004612991565b61123f565b348015610862575f5ffd5b506103e9610871366004612855565b611287565b348015610881575f5ffd5b50600c546103e9906301000000900460ff1681565b3480156108a1575f5ffd5b506103e96108b0366004612855565b6112d4565b3480156108c0575f5ffd5b506104fb6108cf36600461287f565b6112e0565b3480156108df575f5ffd5b5061040e60115481565b3480156108f4575f5ffd5b506104fb61090336600461287f565b611366565b348015610913575f5ffd5b506103e961092236600461287f565b60216020525f908152604090205460ff1681565b348015610941575f5ffd5b50600c546103e990610100900460ff1681565b34801561095f575f5ffd5b5061040e60185481565b348015610974575f5ffd5b506104fb61098336600461289a565b6113b2565b348015610993575f5ffd5b5061040e60135481565b3480156109a8575f5ffd5b506010546103e99060ff1681565b3480156109c1575f5ffd5b5061040e60095481565b3480156109d6575f5ffd5b506103e96109e536600461289a565b611483565b3480156109f5575f5ffd5b5061040e60195481565b348015610a0a575f5ffd5b5061040e610a19366004612a92565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a4e575f5ffd5b5061040e600a5481565b348015610a63575f5ffd5b506103e96115d9565b348015610a77575f5ffd5b5061040e601a5481565b348015610a8c575f5ffd5b5061040e60165481565b348015610aa1575f5ffd5b506104fb610ab036600461287f565b611615565b348015610ac0575f5ffd5b5061040e600b5481565b348015610ad5575f5ffd5b506103e9610ae436600461287f565b6001600160a01b03165f908152600f602052604090205460ff1690565b606060038054610b1090612ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3c90612ac9565b8015610b875780601f10610b5e57610100808354040283529160200191610b87565b820191905f5260205f20905b815481529060010190602001808311610b6a57829003601f168201915b5050505050905090565b5f610b9d3384846116ff565b5060015b92915050565b6005546001600160a01b03163314610bda5760405162461bcd60e51b8152600401610bd190612b01565b60405180910390fd5b6008546040516001600160a01b03918216918316907fcb99f176467c21b70a5cf7112a555d6d39ef3c16c3f07ca816c111cff790d76c905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c605760405162461bcd60e51b8152600401610bd190612b01565b670de0b6b3a76400006103e8610c7560025490565b610c80906005612b4a565b610c8a9190612b61565b610c949190612b61565b811015610cfb5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610bd1565b610d0d81670de0b6b3a7640000612b4a565b60095550565b5f610d1f848484611823565b610d708433610d6b85604051806060016040528060288152602001612cf4602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190612195565b6116ff565b5060019392505050565b6005546001600160a01b03163314610da45760405162461bcd60e51b8152600401610bd190612b01565b60128390556013829055601481905580610dbe8385612b80565b610dc89190612b80565b601155505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9d918590610d6b90866121cd565b6005546001600160a01b03163314610e2f5760405162461bcd60e51b8152600401610bd190612b01565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f212e55a992c1f71d205bb238d4939208713224c4a7978ea26450599bd3a893a0910160405180910390a25050565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610bd190612b01565b6016859055601784905560188390556019829055601a81905582610edb8587612b80565b610ee59190612b80565b6015555050505050565b6005546001600160a01b03163314610f195760405162461bcd60e51b8152600401610bd190612b01565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b03163314610f8e5760405162461bcd60e51b8152600401610bd190612b01565b50600c805460ff19169055600190565b6005546001600160a01b03163314610fc85760405162461bcd60e51b8152600401610bd190612b01565b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461101b5760405162461bcd60e51b8152600401610bd190612b01565b600c805462ffff0019166201010017905543601e55565b6005546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610bd190612b01565b600c8054911515620100000262ff000019909216919091179055565b606060048054610b1090612ac9565b6005546001600160a01b031633146110b15760405162461bcd60e51b8152600401610bd190612b01565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111585760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd1565b6111628282612232565b5050565b6005546001600160a01b031633146111905760405162461bcd60e51b8152600401610bd190612b01565b5f8251116111e05760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e00006044820152606401610bd1565b5f5b825181101561123a5781600f5f85848151811061120157611201612b93565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016111e2565b505050565b6005546001600160a01b031633146112695760405162461bcd60e51b8152600401610bd190612b01565b600c805491151563010000000263ff00000019909216919091179055565b5f610b9d3384610d6b85604051806060016040528060258152602001612d1c60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190612195565b5f610b9d338484611823565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610bd190612b01565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113905760405162461bcd60e51b8152600401610bd190612b01565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113dc5760405162461bcd60e51b8152600401610bd190612b01565b670de0b6b3a76400006103e86113f160025490565b6113fc90600f612b4a565b6114069190612b61565b6114109190612b61565b81101561146b5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610bd1565b61147d81670de0b6b3a7640000612b4a565b600b5550565b6005545f906001600160a01b031633146114af5760405162461bcd60e51b8152600401610bd190612b01565b620186a06114bc60025490565b6114c7906001612b4a565b6114d19190612b61565b82101561153e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bd1565b6103e861154a60025490565b611555906005612b4a565b61155f9190612b61565b8211156115cb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bd1565b50600a81905560015b919050565b6005545f906001600160a01b031633146116055760405162461bcd60e51b8152600401610bd190612b01565b506010805460ff19169055600190565b6005546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610bd190612b01565b6001600160a01b0381166116a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117615760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd1565b6001600160a01b0382166117c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd1565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118495760405162461bcd60e51b8152600401610bd190612ba7565b6001600160a01b03821661186f5760405162461bcd60e51b8152600401610bd190612bec565b6001600160a01b0382165f908152600f602052604090205460ff161580156118af57506001600160a01b0383165f908152600f602052604090205460ff16155b6119155760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610bd1565b805f036119275761123a83835f612285565b600c5460ff1615611dd6576005546001600160a01b0384811691161480159061195e57506005546001600160a01b03838116911614155b801561197257506001600160a01b03821615155b801561198957506001600160a01b03821661dead14155b801561199f5750600654600160a01b900460ff16155b15611dd657600c54610100900460ff16611a35576001600160a01b0383165f908152601f602052604090205460ff16806119f057506001600160a01b0382165f908152601f602052604090205460ff165b611a355760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd1565b60105460ff1615611b7a576005546001600160a01b03838116911614801590611a9057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611ace57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611b7a57325f908152600d60205260409020544311611b685760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bd1565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526021602052604090205460ff168015611bb857506001600160a01b0382165f90815260208052604090205460ff16155b15611c9b57600954811115611c2d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bd1565b600b546001600160a01b0383165f90815260208190526040902054611c529083612b80565b1115611c965760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bd1565b611dd6565b6001600160a01b0382165f9081526021602052604090205460ff168015611cd957506001600160a01b0383165f90815260208052604090205460ff16155b15611d4f57600954811115611c965760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bd1565b6001600160a01b0382165f90815260208052604090205460ff16611dd657600b546001600160a01b0383165f90815260208190526040902054611d929083612b80565b1115611dd65760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bd1565b601e54611de3905f612b80565b4311158015611e2457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611e4d57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611e72576001600160a01b0382165f908152600f60205260409020805460ff191690555b305f90815260208190526040902054600a5481108015908190611e9d5750600c5462010000900460ff165b8015611eb35750600654600160a01b900460ff16155b8015611ed757506001600160a01b0385165f9081526021602052604090205460ff16155b8015611efb57506001600160a01b0385165f908152601f602052604090205460ff16155b8015611f1f57506001600160a01b0384165f908152601f602052604090205460ff16155b15611f4d576006805460ff60a01b1916600160a01b179055611f3f61238b565b6006805460ff60a01b191690555b6006546001600160a01b0386165f908152601f602052604090205460ff600160a01b909204821615911680611f9957506001600160a01b0385165f908152601f602052604090205460ff165b15611fa157505f5b5f8115612181576001600160a01b0386165f9081526021602052604090205460ff168015611fd057505f601554115b1561208b57611ff56064611fef6015548861251c90919063ffffffff16565b9061259a565b9050601554601754826120089190612b4a565b6120129190612b61565b601c5f8282546120229190612b80565b90915550506015546018546120379083612b4a565b6120419190612b61565b601d5f8282546120519190612b80565b90915550506015546016546120669083612b4a565b6120709190612b61565b601b5f8282546120809190612b80565b909155506121639050565b6001600160a01b0387165f9081526021602052604090205460ff1680156120b357505f601154115b15612163576120d26064611fef6011548861251c90919063ffffffff16565b9050601154601354826120e59190612b4a565b6120ef9190612b61565b601c5f8282546120ff9190612b80565b90915550506011546014546121149083612b4a565b61211e9190612b61565b601d5f82825461212e9190612b80565b90915550506011546012546121439083612b4a565b61214d9190612b61565b601b5f82825461215d9190612b80565b90915550505b801561217457612174873083612285565b61217e8186612c2f565b94505b61218c878787612285565b50505050505050565b5f81848411156121b85760405162461bcd60e51b8152600401610bd191906127fe565b505f6121c48486612c2f565b95945050505050565b5f806121d98385612b80565b90508381101561222b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bd1565b9392505050565b6001600160a01b0382165f81815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122ab5760405162461bcd60e51b8152600401610bd190612ba7565b6001600160a01b0382166122d15760405162461bcd60e51b8152600401610bd190612bec565b61230d81604051806060016040528060268152602001612cce602691396001600160a01b0386165f908152602081905260409020549190612195565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461233b90826121cd565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611816565b305f9081526020819052604081205490505f601d54601b54601c546123b09190612b80565b6123ba9190612b80565b90505f8215806123c8575081155b156123d257505050565b600a546123e0906014612b4a565b8311156123f857600a546123f5906014612b4a565b92505b5f600283601c548661240a9190612b4a565b6124149190612b61565b61241e9190612b61565b90505f61242b85836125db565b9050476124378261261c565b5f61244247836125db565b90505f61245e87611fef601d548561251c90919063ffffffff16565b5f601c819055601b819055601d8190556008546040519293506001600160a01b031691839181818185875af1925050503d805f81146124b8576040519150601f19603f3d011682016040523d82523d5f602084013e6124bd565b606091505b50506007546040519197506001600160a01b03169047905f81818185875af1925050503d805f811461250a576040519150601f19603f3d011682016040523d82523d5f602084013e61250f565b606091505b5050505050505050505050565b5f825f0361252b57505f610ba1565b5f6125368385612b4a565b9050826125438583612b61565b1461222b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bd1565b5f61222b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127d2565b5f61222b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612195565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061264f5761264f612b93565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ef9190612c42565b8160018151811061270257612702612b93565b60200260200101906001600160a01b031690816001600160a01b03168152505061274d307f0000000000000000000000000000000000000000000000000000000000000000846116ff565b6040516335869ae160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636b0d35c2906127a19085905f90869030904290600401612c5d565b5f604051808303815f87803b1580156127b8575f5ffd5b505af11580156127ca573d5f5f3e3d5ffd5b505050505050565b5f81836127f25760405162461bcd60e51b8152600401610bd191906127fe565b505f6121c48486612b61565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114612847575f5ffd5b50565b80356115d481612833565b5f5f60408385031215612866575f5ffd5b823561287181612833565b946020939093013593505050565b5f6020828403121561288f575f5ffd5b813561222b81612833565b5f602082840312156128aa575f5ffd5b5035919050565b5f5f5f606084860312156128c3575f5ffd5b83356128ce81612833565b925060208401356128de81612833565b929592945050506040919091013590565b5f5f5f60608486031215612901575f5ffd5b505081359360208301359350604090920135919050565b803580151581146115d4575f5ffd5b5f5f60408385031215612938575f5ffd5b823561294381612833565b915061295160208401612918565b90509250929050565b5f5f5f5f5f60a0868803121561296e575f5ffd5b505083359560208501359550604085013594606081013594506080013592509050565b5f602082840312156129a1575f5ffd5b61222b82612918565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156129cf575f5ffd5b823567ffffffffffffffff8111156129e5575f5ffd5b8301601f810185136129f5575f5ffd5b803567ffffffffffffffff811115612a0f57612a0f6129aa565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612a3c57612a3c6129aa565b604052918252602081840181019290810188841115612a59575f5ffd5b6020850194505b83851015612a7f57612a718561284a565b815260209485019401612a60565b5094506129519250505060208401612918565b5f5f60408385031215612aa3575f5ffd5b8235612aae81612833565b91506020830135612abe81612833565b809150509250929050565b600181811c90821680612add57607f821691505b602082108103612afb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba157610ba1612b36565b5f82612b7b57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ba157610ba1612b36565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba157610ba1612b36565b5f60208284031215612c52575f5ffd5b815161222b81612833565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612cad5783516001600160a01b0316835260209384019390920191600101612c86565b50506001600160a01b03959095166060840152505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220918f19f4b26ee55cdfded7569dbe3808742abc68af72ddd81da5224a20688ffd64736f6c634300081e00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610395575f3560e01c80638da5cb5b116101de578063bbc0c74211610108578063dd62ed3e1161009d578063e96db1ef1161006d578063e96db1ef14610a81578063f2fde38b14610a96578063f8b45b0514610ab5578063fe575a8714610aca575f5ffd5b8063dd62ed3e146109ff578063e2f4560514610a43578063e884f26014610a58578063e8a2d03c14610a6c575f5ffd5b8063c876d0b9116100d8578063c876d0b91461099d578063c8c8ebe4146109b6578063d257b34f146109cb578063daf447e3146109ea575f5ffd5b8063bbc0c74214610936578063bcb9595814610954578063c18bc19514610969578063c4bd0b1114610988575f5ffd5b8063a26577781161017e578063aacebbe31161014e578063aacebbe3146108b5578063abd3d516146108d4578063af0e646a146108e9578063b62496f514610908575f5ffd5b8063a265777814610838578063a457c2d714610857578063a4d15b6414610876578063a9059cbb14610896575f5ffd5b80639a7a23d6116101b95780639a7a23d6146107c65780639ccf6e21146107e55780639fccce3214610804578063a065dc1714610819575f5ffd5b80638da5cb5b14610776578063924de9b71461079357806395d89b41146107b2575f5ffd5b806338e2f291116102bf5780636ddd17131161025f578063751039fc1161022f578063751039fc146107105780637571336a1461072457806375f0a874146107435780638a8c523c14610762575f5ffd5b80636ddd1713146106945780636f6ce863146106b357806370a08231146106c8578063715018a6146106fc575f5ffd5b806343aad8bd1161029a57806343aad8bd1461060a57806349bd5a5e146106295780634a62bb651461065c5780636c5b64ba14610675575f5ffd5b806338e2f2911461059557806339509351146105b457806339d0fd5e146105d3575f5ffd5b80631a8145bb1161033557806323b872dd1161030557806323b872dd14610531578063277af43b14610550578063313ce567146105655780633301241114610580575f5ffd5b80631a8145bb146104c75780631e2f6073146104dc5780631f3fed8f146104fd578063203e727e14610512575f5ffd5b806310d5de531161037057806310d5de531461041c57806313124e79146104495780631694505e1461048057806318160ddd146104b3575f5ffd5b806306fdde03146103a0578063095ea7b3146103ca5780630d0b33dd146103f9575f5ffd5b3661039c57005b5f5ffd5b3480156103ab575f5ffd5b506103b4610b01565b6040516103c191906127fe565b60405180910390f35b3480156103d5575f5ffd5b506103e96103e4366004612855565b610b91565b60405190151581526020016103c1565b348015610404575f5ffd5b5061040e60155481565b6040519081526020016103c1565b348015610427575f5ffd5b506103e961043636600461287f565b602080525f908152604090205460ff1681565b348015610454575f5ffd5b50600654610468906001600160a01b031681565b6040516001600160a01b0390911681526020016103c1565b34801561048b575f5ffd5b506104687f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156104be575f5ffd5b5060025461040e565b3480156104d2575f5ffd5b5061040e601c5481565b3480156104e7575f5ffd5b506104fb6104f636600461287f565b610ba7565b005b348015610508575f5ffd5b5061040e601b5481565b34801561051d575f5ffd5b506104fb61052c36600461289a565b610c36565b34801561053c575f5ffd5b506103e961054b3660046128b1565b610d13565b34801561055b575f5ffd5b5061040e60175481565b348015610570575f5ffd5b50604051601281526020016103c1565b34801561058b575f5ffd5b5061040e60125481565b3480156105a0575f5ffd5b506104fb6105af3660046128ef565b610d7a565b3480156105bf575f5ffd5b506103e96105ce366004612855565b610dd0565b3480156105de575f5ffd5b506103e96105ed36600461287f565b6001600160a01b03165f908152601f602052604090205460ff1690565b348015610615575f5ffd5b506104fb610624366004612927565b610e05565b348015610634575f5ffd5b506104687f0000000000000000000000004c3cb41a3fbb1274cb1f3d0ff2bc52c3418106d881565b348015610667575f5ffd5b50600c546103e99060ff1681565b348015610680575f5ffd5b506104fb61068f36600461295a565b610e8d565b34801561069f575f5ffd5b50600c546103e99062010000900460ff1681565b3480156106be575f5ffd5b5061040e60145481565b3480156106d3575f5ffd5b5061040e6106e236600461287f565b6001600160a01b03165f9081526020819052604090205490565b348015610707575f5ffd5b506104fb610eef565b34801561071b575f5ffd5b506103e9610f62565b34801561072f575f5ffd5b506104fb61073e366004612927565b610f9e565b34801561074e575f5ffd5b50600754610468906001600160a01b031681565b34801561076d575f5ffd5b506104fb610ff1565b348015610781575f5ffd5b506005546001600160a01b0316610468565b34801561079e575f5ffd5b506104fb6107ad366004612991565b611032565b3480156107bd575f5ffd5b506103b4611078565b3480156107d1575f5ffd5b506104fb6107e0366004612927565b611087565b3480156107f0575f5ffd5b506104fb6107ff3660046129be565b611166565b34801561080f575f5ffd5b5061040e601d5481565b348015610824575f5ffd5b50600854610468906001600160a01b031681565b348015610843575f5ffd5b506104fb610852366004612991565b61123f565b348015610862575f5ffd5b506103e9610871366004612855565b611287565b348015610881575f5ffd5b50600c546103e9906301000000900460ff1681565b3480156108a1575f5ffd5b506103e96108b0366004612855565b6112d4565b3480156108c0575f5ffd5b506104fb6108cf36600461287f565b6112e0565b3480156108df575f5ffd5b5061040e60115481565b3480156108f4575f5ffd5b506104fb61090336600461287f565b611366565b348015610913575f5ffd5b506103e961092236600461287f565b60216020525f908152604090205460ff1681565b348015610941575f5ffd5b50600c546103e990610100900460ff1681565b34801561095f575f5ffd5b5061040e60185481565b348015610974575f5ffd5b506104fb61098336600461289a565b6113b2565b348015610993575f5ffd5b5061040e60135481565b3480156109a8575f5ffd5b506010546103e99060ff1681565b3480156109c1575f5ffd5b5061040e60095481565b3480156109d6575f5ffd5b506103e96109e536600461289a565b611483565b3480156109f5575f5ffd5b5061040e60195481565b348015610a0a575f5ffd5b5061040e610a19366004612a92565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a4e575f5ffd5b5061040e600a5481565b348015610a63575f5ffd5b506103e96115d9565b348015610a77575f5ffd5b5061040e601a5481565b348015610a8c575f5ffd5b5061040e60165481565b348015610aa1575f5ffd5b506104fb610ab036600461287f565b611615565b348015610ac0575f5ffd5b5061040e600b5481565b348015610ad5575f5ffd5b506103e9610ae436600461287f565b6001600160a01b03165f908152600f602052604090205460ff1690565b606060038054610b1090612ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3c90612ac9565b8015610b875780601f10610b5e57610100808354040283529160200191610b87565b820191905f5260205f20905b815481529060010190602001808311610b6a57829003601f168201915b5050505050905090565b5f610b9d3384846116ff565b5060015b92915050565b6005546001600160a01b03163314610bda5760405162461bcd60e51b8152600401610bd190612b01565b60405180910390fd5b6008546040516001600160a01b03918216918316907fcb99f176467c21b70a5cf7112a555d6d39ef3c16c3f07ca816c111cff790d76c905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c605760405162461bcd60e51b8152600401610bd190612b01565b670de0b6b3a76400006103e8610c7560025490565b610c80906005612b4a565b610c8a9190612b61565b610c949190612b61565b811015610cfb5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610bd1565b610d0d81670de0b6b3a7640000612b4a565b60095550565b5f610d1f848484611823565b610d708433610d6b85604051806060016040528060288152602001612cf4602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190612195565b6116ff565b5060019392505050565b6005546001600160a01b03163314610da45760405162461bcd60e51b8152600401610bd190612b01565b60128390556013829055601481905580610dbe8385612b80565b610dc89190612b80565b601155505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9d918590610d6b90866121cd565b6005546001600160a01b03163314610e2f5760405162461bcd60e51b8152600401610bd190612b01565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f212e55a992c1f71d205bb238d4939208713224c4a7978ea26450599bd3a893a0910160405180910390a25050565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610bd190612b01565b6016859055601784905560188390556019829055601a81905582610edb8587612b80565b610ee59190612b80565b6015555050505050565b6005546001600160a01b03163314610f195760405162461bcd60e51b8152600401610bd190612b01565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b03163314610f8e5760405162461bcd60e51b8152600401610bd190612b01565b50600c805460ff19169055600190565b6005546001600160a01b03163314610fc85760405162461bcd60e51b8152600401610bd190612b01565b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461101b5760405162461bcd60e51b8152600401610bd190612b01565b600c805462ffff0019166201010017905543601e55565b6005546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610bd190612b01565b600c8054911515620100000262ff000019909216919091179055565b606060048054610b1090612ac9565b6005546001600160a01b031633146110b15760405162461bcd60e51b8152600401610bd190612b01565b7f0000000000000000000000004c3cb41a3fbb1274cb1f3d0ff2bc52c3418106d86001600160a01b0316826001600160a01b0316036111585760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd1565b6111628282612232565b5050565b6005546001600160a01b031633146111905760405162461bcd60e51b8152600401610bd190612b01565b5f8251116111e05760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e00006044820152606401610bd1565b5f5b825181101561123a5781600f5f85848151811061120157611201612b93565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016111e2565b505050565b6005546001600160a01b031633146112695760405162461bcd60e51b8152600401610bd190612b01565b600c805491151563010000000263ff00000019909216919091179055565b5f610b9d3384610d6b85604051806060016040528060258152602001612d1c60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190612195565b5f610b9d338484611823565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610bd190612b01565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113905760405162461bcd60e51b8152600401610bd190612b01565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113dc5760405162461bcd60e51b8152600401610bd190612b01565b670de0b6b3a76400006103e86113f160025490565b6113fc90600f612b4a565b6114069190612b61565b6114109190612b61565b81101561146b5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610bd1565b61147d81670de0b6b3a7640000612b4a565b600b5550565b6005545f906001600160a01b031633146114af5760405162461bcd60e51b8152600401610bd190612b01565b620186a06114bc60025490565b6114c7906001612b4a565b6114d19190612b61565b82101561153e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bd1565b6103e861154a60025490565b611555906005612b4a565b61155f9190612b61565b8211156115cb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bd1565b50600a81905560015b919050565b6005545f906001600160a01b031633146116055760405162461bcd60e51b8152600401610bd190612b01565b506010805460ff19169055600190565b6005546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610bd190612b01565b6001600160a01b0381166116a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117615760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd1565b6001600160a01b0382166117c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd1565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118495760405162461bcd60e51b8152600401610bd190612ba7565b6001600160a01b03821661186f5760405162461bcd60e51b8152600401610bd190612bec565b6001600160a01b0382165f908152600f602052604090205460ff161580156118af57506001600160a01b0383165f908152600f602052604090205460ff16155b6119155760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610bd1565b805f036119275761123a83835f612285565b600c5460ff1615611dd6576005546001600160a01b0384811691161480159061195e57506005546001600160a01b03838116911614155b801561197257506001600160a01b03821615155b801561198957506001600160a01b03821661dead14155b801561199f5750600654600160a01b900460ff16155b15611dd657600c54610100900460ff16611a35576001600160a01b0383165f908152601f602052604090205460ff16806119f057506001600160a01b0382165f908152601f602052604090205460ff165b611a355760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd1565b60105460ff1615611b7a576005546001600160a01b03838116911614801590611a9057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611ace57507f0000000000000000000000004c3cb41a3fbb1274cb1f3d0ff2bc52c3418106d86001600160a01b0316826001600160a01b031614155b15611b7a57325f908152600d60205260409020544311611b685760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bd1565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526021602052604090205460ff168015611bb857506001600160a01b0382165f90815260208052604090205460ff16155b15611c9b57600954811115611c2d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bd1565b600b546001600160a01b0383165f90815260208190526040902054611c529083612b80565b1115611c965760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bd1565b611dd6565b6001600160a01b0382165f9081526021602052604090205460ff168015611cd957506001600160a01b0383165f90815260208052604090205460ff16155b15611d4f57600954811115611c965760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bd1565b6001600160a01b0382165f90815260208052604090205460ff16611dd657600b546001600160a01b0383165f90815260208190526040902054611d929083612b80565b1115611dd65760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bd1565b601e54611de3905f612b80565b4311158015611e2457507f0000000000000000000000004c3cb41a3fbb1274cb1f3d0ff2bc52c3418106d86001600160a01b0316826001600160a01b031614155b8015611e4d57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611e72576001600160a01b0382165f908152600f60205260409020805460ff191690555b305f90815260208190526040902054600a5481108015908190611e9d5750600c5462010000900460ff165b8015611eb35750600654600160a01b900460ff16155b8015611ed757506001600160a01b0385165f9081526021602052604090205460ff16155b8015611efb57506001600160a01b0385165f908152601f602052604090205460ff16155b8015611f1f57506001600160a01b0384165f908152601f602052604090205460ff16155b15611f4d576006805460ff60a01b1916600160a01b179055611f3f61238b565b6006805460ff60a01b191690555b6006546001600160a01b0386165f908152601f602052604090205460ff600160a01b909204821615911680611f9957506001600160a01b0385165f908152601f602052604090205460ff165b15611fa157505f5b5f8115612181576001600160a01b0386165f9081526021602052604090205460ff168015611fd057505f601554115b1561208b57611ff56064611fef6015548861251c90919063ffffffff16565b9061259a565b9050601554601754826120089190612b4a565b6120129190612b61565b601c5f8282546120229190612b80565b90915550506015546018546120379083612b4a565b6120419190612b61565b601d5f8282546120519190612b80565b90915550506015546016546120669083612b4a565b6120709190612b61565b601b5f8282546120809190612b80565b909155506121639050565b6001600160a01b0387165f9081526021602052604090205460ff1680156120b357505f601154115b15612163576120d26064611fef6011548861251c90919063ffffffff16565b9050601154601354826120e59190612b4a565b6120ef9190612b61565b601c5f8282546120ff9190612b80565b90915550506011546014546121149083612b4a565b61211e9190612b61565b601d5f82825461212e9190612b80565b90915550506011546012546121439083612b4a565b61214d9190612b61565b601b5f82825461215d9190612b80565b90915550505b801561217457612174873083612285565b61217e8186612c2f565b94505b61218c878787612285565b50505050505050565b5f81848411156121b85760405162461bcd60e51b8152600401610bd191906127fe565b505f6121c48486612c2f565b95945050505050565b5f806121d98385612b80565b90508381101561222b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bd1565b9392505050565b6001600160a01b0382165f81815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122ab5760405162461bcd60e51b8152600401610bd190612ba7565b6001600160a01b0382166122d15760405162461bcd60e51b8152600401610bd190612bec565b61230d81604051806060016040528060268152602001612cce602691396001600160a01b0386165f908152602081905260409020549190612195565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461233b90826121cd565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611816565b305f9081526020819052604081205490505f601d54601b54601c546123b09190612b80565b6123ba9190612b80565b90505f8215806123c8575081155b156123d257505050565b600a546123e0906014612b4a565b8311156123f857600a546123f5906014612b4a565b92505b5f600283601c548661240a9190612b4a565b6124149190612b61565b61241e9190612b61565b90505f61242b85836125db565b9050476124378261261c565b5f61244247836125db565b90505f61245e87611fef601d548561251c90919063ffffffff16565b5f601c819055601b819055601d8190556008546040519293506001600160a01b031691839181818185875af1925050503d805f81146124b8576040519150601f19603f3d011682016040523d82523d5f602084013e6124bd565b606091505b50506007546040519197506001600160a01b03169047905f81818185875af1925050503d805f811461250a576040519150601f19603f3d011682016040523d82523d5f602084013e61250f565b606091505b5050505050505050505050565b5f825f0361252b57505f610ba1565b5f6125368385612b4a565b9050826125438583612b61565b1461222b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bd1565b5f61222b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127d2565b5f61222b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612195565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061264f5761264f612b93565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ef9190612c42565b8160018151811061270257612702612b93565b60200260200101906001600160a01b031690816001600160a01b03168152505061274d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116ff565b6040516335869ae160e11b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690636b0d35c2906127a19085905f90869030904290600401612c5d565b5f604051808303815f87803b1580156127b8575f5ffd5b505af11580156127ca573d5f5f3e3d5ffd5b505050505050565b5f81836127f25760405162461bcd60e51b8152600401610bd191906127fe565b505f6121c48486612b61565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114612847575f5ffd5b50565b80356115d481612833565b5f5f60408385031215612866575f5ffd5b823561287181612833565b946020939093013593505050565b5f6020828403121561288f575f5ffd5b813561222b81612833565b5f602082840312156128aa575f5ffd5b5035919050565b5f5f5f606084860312156128c3575f5ffd5b83356128ce81612833565b925060208401356128de81612833565b929592945050506040919091013590565b5f5f5f60608486031215612901575f5ffd5b505081359360208301359350604090920135919050565b803580151581146115d4575f5ffd5b5f5f60408385031215612938575f5ffd5b823561294381612833565b915061295160208401612918565b90509250929050565b5f5f5f5f5f60a0868803121561296e575f5ffd5b505083359560208501359550604085013594606081013594506080013592509050565b5f602082840312156129a1575f5ffd5b61222b82612918565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156129cf575f5ffd5b823567ffffffffffffffff8111156129e5575f5ffd5b8301601f810185136129f5575f5ffd5b803567ffffffffffffffff811115612a0f57612a0f6129aa565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612a3c57612a3c6129aa565b604052918252602081840181019290810188841115612a59575f5ffd5b6020850194505b83851015612a7f57612a718561284a565b815260209485019401612a60565b5094506129519250505060208401612918565b5f5f60408385031215612aa3575f5ffd5b8235612aae81612833565b91506020830135612abe81612833565b809150509250929050565b600181811c90821680612add57607f821691505b602082108103612afb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba157610ba1612b36565b5f82612b7b57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ba157610ba1612b36565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba157610ba1612b36565b5f60208284031215612c52575f5ffd5b815161222b81612833565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612cad5783516001600160a01b0316835260209384019390920191600101612c86565b50506001600160a01b03959095166060840152505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220918f19f4b26ee55cdfded7569dbe3808742abc68af72ddd81da5224a20688ffd64736f6c634300081e0033

Deployed Bytecode Sourcemap

34241:16963:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8617:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11134:218;;;;;;;;;;-1:-1:-1;11134:218:0;;;;;:::i;:::-;;:::i;:::-;;;1249:14:1;;1242:22;1224:41;;1212:2;1197:18;11134:218:0;1084:187:1;35354:28:0;;;;;;;;;;;;;;;;;;;1422:25:1;;;1410:2;1395:18;35354:28:0;1276:177:1;35897:63:0;;;;;;;;;;-1:-1:-1;35897:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34419:20;;;;;;;;;;-1:-1:-1;34419:20:0;;;;-1:-1:-1;;;;;34419:20:0;;;;;;-1:-1:-1;;;;;1874:32:1;;;1856:51;;1844:2;1829:18;34419:20:0;1710:203:1;34316:51:0;;;;;;;;;;;;;;;9853:116;;;;;;;;;;-1:-1:-1;9945:12:0;;9853:116;;35615:33;;;;;;;;;;;;;;;;43990:165;;;;;;;;;;-1:-1:-1;43990:165:0;;;;;:::i;:::-;;:::i;:::-;;35575:33;;;;;;;;;;;;;;;;40731:277;;;;;;;;;;-1:-1:-1;40731:277:0;;;;;:::i;:::-;;:::i;11890:514::-;;;;;;;;;;-1:-1:-1;11890:514:0;;;;;:::i;:::-;;:::i;35427:25::-;;;;;;;;;;;;;;;;9671:101;;;;;;;;;;-1:-1:-1;9671:101:0;;9758:2;3039:36:1;;3027:2;3012:18;9671:101:0;2897:184:1;35251:30:0;;;;;;;;;;;;;;;;41656:316;;;;;;;;;;-1:-1:-1;41656:316:0;;;;;:::i;:::-;;:::i;12865:333::-;;;;;;;;;;-1:-1:-1;12865:333:0;;;;;:::i;:::-;;:::i;44163:126::-;;;;;;;;;;-1:-1:-1;44163:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44253:28:0;44229:4;44253:28;;;:19;:28;;;;;;;;;44163:126;42490:182;;;;;;;;;;-1:-1:-1;42490:182:0;;;;;:::i;:::-;;:::i;34374:38::-;;;;;;;;;;;;;;;34665:33;;;;;;;;;;-1:-1:-1;34665:33:0;;;;;;;;41980:502;;;;;;;;;;-1:-1:-1;41980:502:0;;;;;:::i;:::-;;:::i;34745:31::-;;;;;;;;;;-1:-1:-1;34745:31:0;;;;;;;;;;;35319:26;;;;;;;;;;;;;;;;10048:159;;;;;;;;;;-1:-1:-1;10048:159:0;;;;;:::i;:::-;-1:-1:-1;;;;;10177:18:0;10146:7;10177:18;;;;;;;;;;;;10048:159;25439:160;;;;;;;;;;;;;:::i;39746:121::-;;;;;;;;;;;;;:::i;41283:169::-;;;;;;;;;;-1:-1:-1;41283:169:0;;;;;:::i;:::-;;:::i;34478:30::-;;;;;;;;;;-1:-1:-1;34478:30:0;;;;-1:-1:-1;;;;;34478:30:0;;;39546:148;;;;;;;;;;;;;:::i;24729:87::-;;;;;;;;;;-1:-1:-1;24798:6:0;;-1:-1:-1;;;;;24798:6:0;24729:87;;41548:100;;;;;;;;;;-1:-1:-1;41548:100:0;;;;;:::i;:::-;;:::i;8864:112::-;;;;;;;;;;;;;:::i;43127:306::-;;;;;;;;;;-1:-1:-1;43127:306:0;;;;;:::i;:::-;;:::i;42800:319::-;;;;;;;;;;-1:-1:-1;42800:319:0;;;;;:::i;:::-;;:::i;35655:27::-;;;;;;;;;;;;;;;;34515:26;;;;;;;;;;-1:-1:-1;34515:26:0;;;;-1:-1:-1;;;;;34515:26:0;;;40071:101;;;;;;;;;;-1:-1:-1;40071:101:0;;;;;:::i;:::-;;:::i;13761:445::-;;;;;;;;;;-1:-1:-1;13761:445:0;;;;;:::i;:::-;;:::i;34783:37::-;;;;;;;;;;-1:-1:-1;34783:37:0;;;;;;;;;;;10456:224;;;;;;;;;;-1:-1:-1;10456:224:0;;;;;:::i;:::-;;:::i;43637:::-;;;;;;;;;;-1:-1:-1;43637:224:0;;;;;:::i;:::-;;:::i;35217:27::-;;;;;;;;;;;;;;;;43873:109;;;;;;;;;;-1:-1:-1;43873:109:0;;;;;:::i;:::-;;:::i;36118:57::-;;;;;;;;;;-1:-1:-1;36118:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34705:33;;;;;;;;;;-1:-1:-1;34705:33:0;;;;;;;;;;;35459:27;;;;;;;;;;;;;;;;41016:259;;;;;;;;;;-1:-1:-1;41016:259:0;;;;;:::i;:::-;;:::i;35288:24::-;;;;;;;;;;;;;;;;35169:39;;;;;;;;;;-1:-1:-1;35169:39:0;;;;;;;;34550:35;;;;;;;;;;;;;;;;40242:481;;;;;;;;;;-1:-1:-1;40242:481:0;;;;;:::i;:::-;;:::i;35495:30::-;;;;;;;;;;;;;;;;10759:196;;;;;;;;;;-1:-1:-1;10759:196:0;;;;;:::i;:::-;-1:-1:-1;;;;;10916:18:0;;;10885:7;10916:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10759:196;34592:33;;;;;;;;;;;;;;;;39928:135;;;;;;;;;;;;;:::i;35532:36::-;;;;;;;;;;;;;;;;35389:31;;;;;;;;;;;;;;;;25774:309;;;;;;;;;;-1:-1:-1;25774:309:0;;;;;:::i;:::-;;:::i;34632:24::-;;;;;;;;;;;;;;;;42680:112;;;;;;;;;;-1:-1:-1;42680:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;42765:19:0;42741:4;42765:19;;;:10;:19;;;;;;;;;42680:112;8617:108;8671:13;8708:5;8701:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8617:108;:::o;11134:218::-;11254:4;11275:39;428:10;11298:7;11307:6;11275:8;:39::i;:::-;-1:-1:-1;11336:4:0;11134:218;;;;;:::o;43990:165::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;;;;;;;;;44101:11:::1;::::0;44071:42:::1;::::0;-1:-1:-1;;;;;44101:11:0;;::::1;::::0;44071:42;::::1;::::0;::::1;::::0;44101:11:::1;::::0;44071:42:::1;44124:11;:23:::0;;-1:-1:-1;;;;;;44124:23:0::1;-1:-1:-1::0;;;;;44124:23:0;;;::::1;::::0;;;::::1;::::0;;43990:165::o;40731:277::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;40868:4:::1;40860;40839:13;9945:12:::0;;;9853:116;40839:13:::1;:17;::::0;40855:1:::1;40839:17;:::i;:::-;40838:26;;;;:::i;:::-;40837:35;;;;:::i;:::-;40827:6;:45;;40805:142;;;::::0;-1:-1:-1;;;40805:142:0;;8152:2:1;40805:142:0::1;::::0;::::1;8134:21:1::0;8191:2;8171:18;;;8164:30;8230:34;8210:18;;;8203:62;-1:-1:-1;;;8281:18:1;;;8274:45;8336:19;;40805:142:0::1;7950:411:1::0;40805:142:0::1;40981:19;:6:::0;40991:8:::1;40981:19;:::i;:::-;40958:20;:42:::0;-1:-1:-1;40731:277:0:o;11890:514::-;12046:4;12067:36;12077:6;12085:9;12096:6;12067:9;:36::i;:::-;12118:248;12145:6;428:10;12201:150;12261:6;12201:150;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12201:19:0;;;;;;:11;:19;;;;;;;;428:10;12201:33;;;;;;;;;;:37;:150::i;:::-;12118:8;:248::i;:::-;-1:-1:-1;12388:4:0;11890:514;;;;;:::o;41656:316::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;41802:15:::1;:31:::0;;;41844:9:::1;:19:::0;;;41874:11:::1;:23:::0;;;41888:9;41923:27:::1;41856:7:::0;41820:13;41923:27:::1;:::i;:::-;:41;;;;:::i;:::-;41908:12;:56:::0;-1:-1:-1;;;41656:316:0:o;12865:333::-;428:10;12990:4;13095:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13095:34:0;;;;;;;;;;12990:4;;13011:149;;13069:7;;13095:50;;13134:10;13095:38;:50::i;42490:182::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42575:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;42575:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42630:34;;1224:41:1;;;42630:34:0::1;::::0;1197:18:1;42630:34:0::1;;;;;;;42490:182:::0;;:::o;41980:502::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;42203:16:::1;:32:::0;;;42246:10:::1;:20:::0;;;42277:12:::1;:24:::0;;;42312:15:::1;:34:::0;;;42357:21:::1;:46:::0;;;42292:9;42430:29:::1;42259:7:::0;42222:13;42430:29:::1;:::i;:::-;:44;;;;:::i;:::-;42414:13;:60:::0;-1:-1:-1;;;;;41980:502:0:o;25439:160::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;25534:6:::1;::::0;25513:40:::1;::::0;25550:1:::1;::::0;-1:-1:-1;;;;;25534:6:0::1;::::0;25513:40:::1;::::0;25550:1;;25513:40:::1;25568:6;:19:::0;;-1:-1:-1;;;;;;25568:19:0::1;::::0;;25439:160::o;39746:121::-;24969:6;;39798:4;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;-1:-1:-1;39815:14:0::1;:22:::0;;-1:-1:-1;;39815:22:0::1;::::0;;;39746:121;:::o;41283:169::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41398:39:0;;;::::1;;::::0;;;:31:::1;:39:::0;;;;;:46;;-1:-1:-1;;41398:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41283:169::o;39546:148::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;39601:13:::1;:20:::0;;-1:-1:-1;;39632:18:0;;;;;39674:12:::1;39661:10;:25:::0;39546:148::o;41548:100::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;41619:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;41619:21:0;;::::1;::::0;;;::::1;::::0;;41548:100::o;8864:112::-;8920:13;8957:7;8950:14;;;;;:::i;43127:306::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;43273:13:::1;-1:-1:-1::0;;;;;43265:21:0::1;:4;-1:-1:-1::0;;;;;43265:21:0::1;::::0;43243:128:::1;;;::::0;-1:-1:-1;;;43243:128:0;;8698:2:1;43243:128:0::1;::::0;::::1;8680:21:1::0;8737:2;8717:18;;;8710:30;8776:34;8756:18;;;8749:62;8847:27;8827:18;;;8820:55;8892:19;;43243:128:0::1;8496:421:1::0;43243:128:0::1;43384:41;43413:4;43419:5;43384:28;:41::i;:::-;43127:306:::0;;:::o;42800:319::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;42953:1:::1;42935:8;:15;:19;42927:62;;;::::0;-1:-1:-1;;;42927:62:0;;9124:2:1;42927:62:0::1;::::0;::::1;9106:21:1::0;9163:2;9143:18;;;9136:30;9202:32;9182:18;;;9175:60;9252:18;;42927:62:0::1;8922:354:1::0;42927:62:0::1;43005:9;43000:112;43024:8;:15;43020:1;:19;43000:112;;;43087:13;43061:10;:23;43072:8;43081:1;43072:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43061:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43061:23:0;:39;;-1:-1:-1;;43061:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;43041:3:0::1;43000:112;;;;42800:319:::0;;:::o;40071:101::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;40138:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40138:26:0;;::::1;::::0;;;::::1;::::0;;40071:101::o;13761:445::-;13891:4;13912:256;428:10;13970:7;13996:157;14057:15;13996:157;;;;;;;;;;;;;;;;;428:10;13996:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13996:34:0;;;;;;;;;;;;:38;:157::i;10456:224::-;10579:4;10600:42;428:10;10624:9;10635:6;10600:9;:42::i;43637:224::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;43790:15:::1;::::0;43747:59:::1;::::0;-1:-1:-1;;;;;43790:15:0;;::::1;::::0;43747:59;::::1;::::0;::::1;::::0;43790:15:::1;::::0;43747:59:::1;43817:15;:36:::0;;-1:-1:-1;;;;;;43817:36:0::1;-1:-1:-1::0;;;;;43817:36:0;;;::::1;::::0;;;::::1;::::0;;43637:224::o;43873:109::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;43949:5:::1;:25:::0;;-1:-1:-1;;;;;;43949:25:0::1;-1:-1:-1::0;;;;;43949:25:0;;;::::1;::::0;;;::::1;::::0;;43873:109::o;41016:259::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;41157:4:::1;41149;41127:13;9945:12:::0;;;9853:116;41127:13:::1;:18;::::0;41143:2:::1;41127:18;:::i;:::-;41126:27;;;;:::i;:::-;41125:36;;;;:::i;:::-;41115:6;:46;;41093:132;;;::::0;-1:-1:-1;;;41093:132:0;;9615:2:1;41093:132:0::1;::::0;::::1;9597:21:1::0;9654:2;9634:18;;;9627:30;9693:34;9673:18;;;9666:62;-1:-1:-1;;;9744:18:1;;;9737:34;9788:19;;41093:132:0::1;9413:400:1::0;41093:132:0::1;41248:19;:6:::0;41258:8:::1;41248:19;:::i;:::-;41236:9;:31:::0;-1:-1:-1;41016:259:0:o;40242:481::-;24969:6;;40339:4;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;40413:6:::1;40392:13;9945:12:::0;;;9853:116;40392:13:::1;:17;::::0;40408:1:::1;40392:17;:::i;:::-;40391:28;;;;:::i;:::-;40378:9;:41;;40356:144;;;::::0;-1:-1:-1;;;40356:144:0;;10020:2:1;40356:144:0::1;::::0;::::1;10002:21:1::0;10059:2;10039:18;;;10032:30;10098:34;10078:18;;;10071:62;-1:-1:-1;;;10149:18:1;;;10142:51;10210:19;;40356:144:0::1;9818:417:1::0;40356:144:0::1;40568:4;40547:13;9945:12:::0;;;9853:116;40547:13:::1;:17;::::0;40563:1:::1;40547:17;:::i;:::-;40546:26;;;;:::i;:::-;40533:9;:39;;40511:141;;;::::0;-1:-1:-1;;;40511:141:0;;10442:2:1;40511:141:0::1;::::0;::::1;10424:21:1::0;10481:2;10461:18;;;10454:30;10520:34;10500:18;;;10493:62;-1:-1:-1;;;10571:18:1;;;10564:50;10631:19;;40511:141:0::1;10240:416:1::0;40511:141:0::1;-1:-1:-1::0;40663:18:0::1;:30:::0;;;40711:4:::1;25043:1;40242:481:::0;;;:::o;39928:135::-;24969:6;;39988:4;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;-1:-1:-1;40005:20:0::1;:28:::0;;-1:-1:-1;;40005:28:0::1;::::0;;;39928:135;:::o;25774:309::-;24969:6;;-1:-1:-1;;;;;24969:6:0;428:10;24969:22;24961:67;;;;-1:-1:-1;;;24961:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25885:22:0;::::1;25859:122;;;::::0;-1:-1:-1;;;25859:122:0;;10863:2:1;25859:122:0::1;::::0;::::1;10845:21:1::0;10902:2;10882:18;;;10875:30;10941:34;10921:18;;;10914:62;-1:-1:-1;;;10992:18:1;;;10985:36;11038:19;;25859:122:0::1;10661:402:1::0;25859:122:0::1;26022:6;::::0;26001:38:::1;::::0;-1:-1:-1;;;;;26001:38:0;;::::1;::::0;26022:6:::1;::::0;26001:38:::1;::::0;26022:6:::1;::::0;26001:38:::1;26054:6;:17:::0;;-1:-1:-1;;;;;;26054:17:0::1;-1:-1:-1::0;;;;;26054:17:0;;;::::1;::::0;;;::::1;::::0;;25774:309::o;17517:416::-;-1:-1:-1;;;;;17673:19:0;;17665:68;;;;-1:-1:-1;;;17665:68:0;;11270:2:1;17665:68:0;;;11252:21:1;11309:2;11289:18;;;11282:30;11348:34;11328:18;;;11321:62;-1:-1:-1;;;11399:18:1;;;11392:34;11443:19;;17665:68:0;11068:400:1;17665:68:0;-1:-1:-1;;;;;17756:21:0;;17748:68;;;;-1:-1:-1;;;17748:68:0;;11675:2:1;17748:68:0;;;11657:21:1;11714:2;11694:18;;;11687:30;11753:34;11733:18;;;11726:62;-1:-1:-1;;;11804:18:1;;;11797:32;11846:19;;17748:68:0;11473:398:1;17748:68:0;-1:-1:-1;;;;;17833:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17889:32;;1422:25:1;;;17889:32:0;;1395:18:1;17889:32:0;;;;;;;;17517:416;;;:::o;44347:5113::-;-1:-1:-1;;;;;44479:18:0;;44471:68;;;;-1:-1:-1;;;44471:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44558:16:0;;44550:64;;;;-1:-1:-1;;;44550:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44648:14:0;;;;;;:10;:14;;;;;;;;44647:15;:36;;;;-1:-1:-1;;;;;;44667:16:0;;;;;;:10;:16;;;;;;;;44666:17;44647:36;44625:135;;;;-1:-1:-1;;;44625:135:0;;12888:2:1;44625:135:0;;;12870:21:1;12927:2;12907:18;;;12900:30;12966:34;12946:18;;;12939:62;-1:-1:-1;;;13017:18:1;;;13010:47;13074:19;;44625:135:0;12686:413:1;44625:135:0;44775:6;44785:1;44775:11;44771:93;;44803:28;44819:4;44825:2;44829:1;44803:15;:28::i;44771:93::-;44880:14;;;;44876:2487;;;24798:6;;-1:-1:-1;;;;;44933:15:0;;;24798:6;;44933:15;;;;:49;;-1:-1:-1;24798:6:0;;-1:-1:-1;;;;;44969:13:0;;;24798:6;;44969:13;;44933:49;:86;;;;-1:-1:-1;;;;;;45003:16:0;;;;44933:86;:128;;;;-1:-1:-1;;;;;;45040:21:0;;45054:6;45040:21;;44933:128;:158;;;;-1:-1:-1;45083:8:0;;-1:-1:-1;;;45083:8:0;;;;45082:9;44933:158;44911:2441;;;45131:13;;;;;;;45126:223;;-1:-1:-1;;;;;45203:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;45232:23:0;;;;;;:19;:23;;;;;;;;45203:52;45169:160;;;;-1:-1:-1;;;45169:160:0;;13306:2:1;45169:160:0;;;13288:21:1;13345:2;13325:18;;;13318:30;-1:-1:-1;;;13364:18:1;;;13357:52;13426:18;;45169:160:0;13104:346:1;45169:160:0;45505:20;;;;45501:641;;;24798:6;;-1:-1:-1;;;;;45580:13:0;;;24798:6;;45580:13;;;;:72;;;45636:15;-1:-1:-1;;;;;45622:30:0;:2;-1:-1:-1;;;;;45622:30:0;;;45580:72;:129;;;;;45695:13;-1:-1:-1;;;;;45681:28:0;:2;-1:-1:-1;;;;;45681:28:0;;;45580:129;45550:573;;;45827:9;45798:39;;;;:28;:39;;;;;;45873:12;-1:-1:-1;45760:258:0;;;;-1:-1:-1;;;45760:258:0;;13657:2:1;45760:258:0;;;13639:21:1;13696:2;13676:18;;;13669:30;13735:34;13715:18;;;13708:62;13806:34;13786:18;;;13779:62;-1:-1:-1;;;13857:19:1;;;13850:40;13907:19;;45760:258:0;13455:477:1;45760:258:0;46074:9;46045:39;;;;:28;:39;;;;;46087:12;46045:54;;45550:573;-1:-1:-1;;;;;46216:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;46273:35:0;;;;;;:31;:35;;;;;;;;46272:36;46216:92;46190:1147;;;46395:20;;46385:6;:30;;46351:169;;;;-1:-1:-1;;;46351:169:0;;14139:2:1;46351:169:0;;;14121:21:1;14178:2;14158:18;;;14151:30;14217:34;14197:18;;;14190:62;-1:-1:-1;;;14268:18:1;;;14261:51;14329:19;;46351:169:0;13937:417:1;46351:169:0;46603:9;;-1:-1:-1;;;;;10177:18:0;;10146:7;10177:18;;;;;;;;;;;46577:22;;:6;:22;:::i;:::-;:35;;46543:140;;;;-1:-1:-1;;;46543:140:0;;14561:2:1;46543:140:0;;;14543:21:1;14600:2;14580:18;;;14573:30;-1:-1:-1;;;14619:18:1;;;14612:49;14678:18;;46543:140:0;14359:343:1;46543:140:0;46190:1147;;;-1:-1:-1;;;;;46781:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;46836:37:0;;;;;;:31;:37;;;;;;;;46835:38;46781:92;46755:582;;;46960:20;;46950:6;:30;;46916:170;;;;-1:-1:-1;;;46916:170:0;;14909:2:1;46916:170:0;;;14891:21:1;14948:2;14928:18;;;14921:30;14987:34;14967:18;;;14960:62;-1:-1:-1;;;15038:18:1;;;15031:52;15100:19;;46916:170:0;14707:418:1;46755:582:0;-1:-1:-1;;;;;47117:35:0;;;;;;:31;:35;;;;;;;;47112:225;;47237:9;;-1:-1:-1;;;;;10177:18:0;;10146:7;10177:18;;;;;;;;;;;47211:22;;:6;:22;:::i;:::-;:35;;47177:140;;;;-1:-1:-1;;;47177:140:0;;14561:2:1;47177:140:0;;;14543:21:1;14600:2;14580:18;;;14573:30;-1:-1:-1;;;14619:18:1;;;14612:49;14678:18;;47177:140:0;14359:343:1;47177:140:0;47437:10;;:14;;47450:1;47437:14;:::i;:::-;47420:12;:32;;:68;;;;;47475:13;-1:-1:-1;;;;;47469:19:0;:2;-1:-1:-1;;;;;47469:19:0;;;47420:68;:142;;;;-1:-1:-1;;;;;;47505:57:0;;47519:42;47505:57;;47420:142;47402:221;;;-1:-1:-1;;;;;47589:14:0;;47606:5;47589:14;;;:10;:14;;;;;:22;;-1:-1:-1;;47589:22:0;;;47402:221;47684:4;47635:28;10177:18;;;;;;;;;;;47742;;47718:42;;;;;;;47791:35;;-1:-1:-1;47815:11:0;;;;;;;47791:35;:61;;;;-1:-1:-1;47844:8:0;;-1:-1:-1;;;47844:8:0;;;;47843:9;47791:61;:110;;;;-1:-1:-1;;;;;;47870:31:0;;;;;;:25;:31;;;;;;;;47869:32;47791:110;:153;;;;-1:-1:-1;;;;;;47919:25:0;;;;;;:19;:25;;;;;;;;47918:26;47791:153;:194;;;;-1:-1:-1;;;;;;47962:23:0;;;;;;:19;:23;;;;;;;;47961:24;47791:194;47773:326;;;48012:8;:15;;-1:-1:-1;;;;48012:15:0;-1:-1:-1;;;48012:15:0;;;48044:10;:8;:10::i;:::-;48071:8;:16;;-1:-1:-1;;;;48071:16:0;;;47773:326;48127:8;;-1:-1:-1;;;;;48237:25:0;;48111:12;48237:25;;;:19;:25;;;;;;48127:8;-1:-1:-1;;;48127:8:0;;;;;48126:9;;48237:25;;:52;;-1:-1:-1;;;;;;48266:23:0;;;;;;:19;:23;;;;;;;;48237:52;48233:100;;;-1:-1:-1;48316:5:0;48233:100;48345:12;48446:961;;;;-1:-1:-1;;;;;48502:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;48551:1;48535:13;;:17;48502:50;48498:760;;;48580:34;48610:3;48580:25;48591:13;;48580:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;48573:41;;48677:13;;48663:10;;48656:4;:17;;;;:::i;:::-;48655:35;;;;:::i;:::-;48633:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;48749:13:0;;48733:12;;48726:19;;:4;:19;:::i;:::-;48725:37;;;;:::i;:::-;48709:12;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;48831:13:0;;48811:16;;48804:23;;:4;:23;:::i;:::-;48803:41;;;;:::i;:::-;48781:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;48498:760:0;;-1:-1:-1;48498:760:0;;-1:-1:-1;;;;;48906:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;48956:1;48941:12;;:16;48906:51;48902:356;;;48985:33;49014:3;48985:24;48996:12;;48985:6;:10;;:24;;;;:::i;:33::-;48978:40;;49080:12;;49067:9;;49060:4;:16;;;;:::i;:::-;49059:33;;;;:::i;:::-;49037:18;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;49150:12:0;;49135:11;;49128:18;;:4;:18;:::i;:::-;49127:35;;;;:::i;:::-;49111:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;49230:12:0;;49211:15;;49204:22;;:4;:22;:::i;:::-;49203:39;;;;:::i;:::-;49181:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;48902:356:0;49278:8;;49274:91;;49307:42;49323:4;49337;49344;49307:15;:42::i;:::-;49381:14;49391:4;49381:14;;:::i;:::-;;;48446:961;49419:33;49435:4;49441:2;49445:6;49419:15;:33::i;:::-;44460:5000;;;;44347:5113;;;:::o;20074:258::-;20210:7;20250:12;20242:6;;;;20234:29;;;;-1:-1:-1;;;20234:29:0;;;;;;;;:::i;:::-;-1:-1:-1;20278:9:0;20290:5;20294:1;20290;:5;:::i;:::-;20278:17;20074:258;-1:-1:-1;;;;;20074:258:0:o;19059:197::-;19117:7;;19153:5;19157:1;19153;:5;:::i;:::-;19141:17;;19186:1;19181;:6;;19173:46;;;;-1:-1:-1;;;19173:46:0;;15465:2:1;19173:46:0;;;15447:21:1;15504:2;15484:18;;;15477:30;15543:29;15523:18;;;15516:57;15590:18;;19173:46:0;15263:351:1;19173:46:0;19243:1;19059:197;-1:-1:-1;;;19059:197:0:o;43441:188::-;-1:-1:-1;;;;;43524:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;43524:39:0;;;;;;;;;;43581:40;;43524:39;;:31;43581:40;;;43441:188;;:::o;14756:666::-;-1:-1:-1;;;;;14916:20:0;;14908:70;;;;-1:-1:-1;;;14908:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15001:23:0;;14993:71;;;;-1:-1:-1;;;14993:71:0;;;;;;;:::i;:::-;15165:120;15205:6;15165:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15165:17:0;;:9;:17;;;;;;;;;;;;:120;:21;:120::i;:::-;-1:-1:-1;;;;;15145:17:0;;;:9;:17;;;;;;;;;;;:140;;;;15323:20;;;;;;;:32;;15348:6;15323:24;:32::i;:::-;-1:-1:-1;;;;;15300:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;15375:35;1422:25:1;;;15300:20:0;;15375:35;;;;;;1395:18:1;15375:35:0;1276:177:1;49979:1222:0;50062:4;50018:23;10177:18;;;;;;;;;;;50018:50;;50079:25;50175:12;;50141:18;;50107;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;50079:108;-1:-1:-1;50198:12:0;50227:20;;;:46;;-1:-1:-1;50251:22:0;;50227:46;50223:85;;;50290:7;;;49979:1222::o;50223:85::-;50342:18;;:23;;50363:2;50342:23;:::i;:::-;50324:15;:41;50320:115;;;50400:18;;:23;;50421:2;50400:23;:::i;:::-;50382:41;;50320:115;50447:23;50560:1;50527:17;50492:18;;50474:15;:36;;;;:::i;:::-;50473:71;;;;:::i;:::-;:88;;;;:::i;:::-;50447:114;-1:-1:-1;50572:26:0;50601:36;:15;50447:114;50601:19;:36::i;:::-;50572:65;-1:-1:-1;50678:21:0;50712:36;50572:65;50712:16;:36::i;:::-;50761:18;50782:44;:21;50808:17;50782:25;:44::i;:::-;50761:65;;50839:17;50859:51;50892:17;50859:28;50874:12;;50859:10;:14;;:28;;;;:::i;:51::-;50944:1;50923:18;:22;;;50956:18;:22;;;50989:12;:16;;;51040:11;;51032:47;;50839:71;;-1:-1:-1;;;;;;51040:11:0;;50839:71;;51032:47;50944:1;51032:47;50839:71;51040:11;51032:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51114:15:0;;51106:87;;51018:61;;-1:-1:-1;;;;;;51114:15:0;;51157:21;;51106:87;;;;51157:21;51114:15;51106:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;49979:1222:0:o;20635:511::-;20693:7;20954:1;20959;20954:6;20950:55;;-1:-1:-1;20988:1:0;20981:8;;20950:55;21021:9;21033:5;21037:1;21033;:5;:::i;:::-;21021:17;-1:-1:-1;21070:1:0;21061:5;21065:1;21021:17;21061:5;:::i;:::-;:10;21053:56;;;;-1:-1:-1;;;21053:56:0;;16031:2:1;21053:56:0;;;16013:21:1;16070:2;16050:18;;;16043:30;16109:34;16089:18;;;16082:62;-1:-1:-1;;;16160:18:1;;;16153:31;16201:19;;21053:56:0;15829:397:1;21674:140:0;21732:7;21763:39;21767:1;21770;21763:39;;;;;;;;;;;;;;;;;:3;:39::i;19583:144::-;19641:7;19672:43;19676:1;19679;19672:43;;;;;;;;;;;;;;;;;:3;:43::i;49468:503::-;49558:16;;;49572:1;49558:16;;;;;;;;49534:21;;49558:16;;;;;;;;;;-1:-1:-1;49558:16:0;49534:40;;49603:4;49585;49590:1;49585:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;49585:23:0;;;-1:-1:-1;;;;;49585:23:0;;;;;49629:15;-1:-1:-1;;;;;49629:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49619:4;49624:1;49619:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;49619:32:0;;;-1:-1:-1;;;;;49619:32:0;;;;;49664:62;49681:4;49696:15;49714:11;49664:8;:62::i;:::-;49739:224;;-1:-1:-1;;;49739:224:0;;-1:-1:-1;;;;;49739:15:0;:66;;;;:224;;49820:11;;49846:1;;49890:4;;49917;;49937:15;;49739:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49523:448;49468:503;:::o;22362:348::-;22498:7;22537:12;22530:5;22522:28;;;;-1:-1:-1;;;22522:28:0;;;;;;;;:::i;:::-;-1:-1:-1;22565:9:0;22577:5;22581:1;22577;:5;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;492:70;437:131;:::o;573:134::-;641:20;;670:31;641:20;670:31;:::i;712:367::-;780:6;788;841:2;829:9;820:7;816:23;812:32;809:52;;;857:1;854;847:12;809:52;896:9;883:23;915:31;940:5;915:31;:::i;:::-;965:5;1043:2;1028:18;;;;1015:32;;-1:-1:-1;;;712:367:1:o;1458:247::-;1517:6;1570:2;1558:9;1549:7;1545:23;1541:32;1538:52;;;1586:1;1583;1576:12;1538:52;1625:9;1612:23;1644:31;1669:5;1644:31;:::i;2153:226::-;2212:6;2265:2;2253:9;2244:7;2240:23;2236:32;2233:52;;;2281:1;2278;2271:12;2233:52;-1:-1:-1;2326:23:1;;2153:226;-1:-1:-1;2153:226:1:o;2384:508::-;2461:6;2469;2477;2530:2;2518:9;2509:7;2505:23;2501:32;2498:52;;;2546:1;2543;2536:12;2498:52;2585:9;2572:23;2604:31;2629:5;2604:31;:::i;:::-;2654:5;-1:-1:-1;2711:2:1;2696:18;;2683:32;2724:33;2683:32;2724:33;:::i;:::-;2384:508;;2776:7;;-1:-1:-1;;;2856:2:1;2841:18;;;;2828:32;;2384:508::o;3086:466::-;3163:6;3171;3179;3232:2;3220:9;3211:7;3207:23;3203:32;3200:52;;;3248:1;3245;3238:12;3200:52;-1:-1:-1;;3293:23:1;;;3413:2;3398:18;;3385:32;;-1:-1:-1;3516:2:1;3501:18;;;3488:32;;3086:466;-1:-1:-1;3086:466:1:o;3557:160::-;3622:20;;3678:13;;3671:21;3661:32;;3651:60;;3707:1;3704;3697:12;3722:315;3787:6;3795;3848:2;3836:9;3827:7;3823:23;3819:32;3816:52;;;3864:1;3861;3854:12;3816:52;3903:9;3890:23;3922:31;3947:5;3922:31;:::i;:::-;3972:5;-1:-1:-1;3996:35:1;4027:2;4012:18;;3996:35;:::i;:::-;3986:45;;3722:315;;;;;:::o;4042:708::-;4137:6;4145;4153;4161;4169;4222:3;4210:9;4201:7;4197:23;4193:33;4190:53;;;4239:1;4236;4229:12;4190:53;-1:-1:-1;;4284:23:1;;;4404:2;4389:18;;4376:32;;-1:-1:-1;4507:2:1;4492:18;;4479:32;;4610:2;4595:18;;4582:32;;-1:-1:-1;4713:3:1;4698:19;4685:33;;-1:-1:-1;4042:708:1;-1:-1:-1;4042:708:1:o;4755:180::-;4811:6;4864:2;4852:9;4843:7;4839:23;4835:32;4832:52;;;4880:1;4877;4870:12;4832:52;4903:26;4919:9;4903:26;:::i;4940:127::-;5001:10;4996:3;4992:20;4989:1;4982:31;5032:4;5029:1;5022:15;5056:4;5053:1;5046:15;5072:1207;5162:6;5170;5223:2;5211:9;5202:7;5198:23;5194:32;5191:52;;;5239:1;5236;5229:12;5191:52;5279:9;5266:23;5312:18;5304:6;5301:30;5298:50;;;5344:1;5341;5334:12;5298:50;5367:22;;5420:4;5412:13;;5408:27;-1:-1:-1;5398:55:1;;5449:1;5446;5439:12;5398:55;5489:2;5476:16;5515:18;5507:6;5504:30;5501:56;;;5537:18;;:::i;:::-;5583:6;5580:1;5576:14;5619:2;5613:9;5682:2;5678:7;5673:2;5669;5665:11;5661:25;5653:6;5649:38;5753:6;5741:10;5738:22;5717:18;5705:10;5702:34;5699:62;5696:88;;;5764:18;;:::i;:::-;5800:2;5793:22;5850;;;5900:4;5932:11;;;5928:22;;;5850;5888:17;;5962:19;;;5959:39;;;5994:1;5991;5984:12;5959:39;6026:4;6022:2;6018:13;6007:24;;6040:152;6056:6;6051:3;6048:15;6040:152;;;6124:23;6143:3;6124:23;:::i;:::-;6112:36;;6177:4;6073:14;;;;6168;6040:152;;;-1:-1:-1;6211:6:1;-1:-1:-1;6236:37:1;;-1:-1:-1;;;6267:4:1;6252:20;;6236:37;:::i;6284:388::-;6352:6;6360;6413:2;6401:9;6392:7;6388:23;6384:32;6381:52;;;6429:1;6426;6419:12;6381:52;6468:9;6455:23;6487:31;6512:5;6487:31;:::i;:::-;6537:5;-1:-1:-1;6594:2:1;6579:18;;6566:32;6607:33;6566:32;6607:33;:::i;:::-;6659:7;6649:17;;;6284:388;;;;;:::o;6677:380::-;6756:1;6752:12;;;;6799;;;6820:61;;6874:4;6866:6;6862:17;6852:27;;6820:61;6927:2;6919:6;6916:14;6896:18;6893:38;6890:161;;6973:10;6968:3;6964:20;6961:1;6954:31;7008:4;7005:1;6998:15;7036:4;7033:1;7026:15;6890:161;;6677:380;;;:::o;7062:356::-;7264:2;7246:21;;;7283:18;;;7276:30;7342:34;7337:2;7322:18;;7315:62;7409:2;7394:18;;7062:356::o;7423:127::-;7484:10;7479:3;7475:20;7472:1;7465:31;7515:4;7512:1;7505:15;7539:4;7536:1;7529:15;7555:168;7628:9;;;7659;;7676:15;;;7670:22;;7656:37;7646:71;;7697:18;;:::i;7728:217::-;7768:1;7794;7784:132;;7838:10;7833:3;7829:20;7826:1;7819:31;7873:4;7870:1;7863:15;7901:4;7898:1;7891:15;7784:132;-1:-1:-1;7930:9:1;;7728:217::o;8366:125::-;8431:9;;;8452:10;;;8449:36;;;8465:18;;:::i;9281:127::-;9342:10;9337:3;9333:20;9330:1;9323:31;9373:4;9370:1;9363:15;9397:4;9394:1;9387:15;11876:401;12078:2;12060:21;;;12117:2;12097:18;;;12090:30;12156:34;12151:2;12136:18;;12129:62;-1:-1:-1;;;12222:2:1;12207:18;;12200:35;12267:3;12252:19;;11876:401::o;12282:399::-;12484:2;12466:21;;;12523:2;12503:18;;;12496:30;12562:34;12557:2;12542:18;;12535:62;-1:-1:-1;;;12628:2:1;12613:18;;12606:33;12671:3;12656:19;;12282:399::o;15130:128::-;15197:9;;;15218:11;;;15215:37;;;15232:18;;:::i;16231:251::-;16301:6;16354:2;16342:9;16333:7;16329:23;16325:32;16322:52;;;16370:1;16367;16360:12;16322:52;16402:9;16396:16;16421:31;16446:5;16421:31;:::i;16487:959::-;16749:4;16797:3;16786:9;16782:19;16828:6;16817:9;16810:25;16871:6;16866:2;16855:9;16851:18;16844:34;16914:3;16909:2;16898:9;16894:18;16887:31;16938:6;16973;16967:13;17004:6;16996;16989:22;17042:3;17031:9;17027:19;17020:26;;17081:2;17073:6;17069:15;17055:29;;17102:1;17112:195;17126:6;17123:1;17120:13;17112:195;;;17191:13;;-1:-1:-1;;;;;17187:39:1;17175:52;;17256:2;17282:15;;;;17247:12;;;;17223:1;17141:9;17112:195;;;-1:-1:-1;;;;;;;17363:32:1;;;;17358:2;17343:18;;17336:60;-1:-1:-1;;17427:3:1;17412:19;17405:35;17324:3;16487:959;-1:-1:-1;;;16487:959:1:o

Swarm Source

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