ETH Price: $2,688.36 (-1.79%)

Token

AstroSpaces.io (SPACES)
 

Overview

Max Total Supply

20,000,000,000 SPACES

Holders

70 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$9,053.04

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.021468531 SPACES

Value
$0.00 ( ~0 Eth) [0.0000%]
0x724F0DA6fB8a406351de24eEcB6c9D746e3b8F6A
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

AstroSpaces.io is building Web3 integrated social network with a range of sub-projects suchs as launchpads all fully connected to the social network.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AstroSpacesSecondaryChain

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;

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

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

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

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

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

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

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

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


/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

contract AstroSpacesSecondaryChain is IERC20, Ownable {
    using SafeMath for uint256;

    address public immutable underlying;
    bool public constant underlyingIsMinted = false;

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

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _totalSupply;

    mapping(address => bool) private _isExcludedFromFee;

    uint256 public _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;

    uint256 public numTokensSellToAddToLiquidity;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyAmountUpdated(uint256 amount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    mapping(address => bool) public isMinter;
    address[] public minters;
    
    modifier onlyAuth() {
        require(isMinter[msg.sender], "AnyswapV6ERC20: FORBIDDEN");
        _;
    }

    constructor() payable {
        underlying = address(0);

        _name = "AstroSpaces.io";
        _symbol = "SPACES";
        _decimals = 9;

        _liquidityFee = 9;
        swapAndLiquifyEnabled = true;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D));
        
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 {_setupDecimals} is
     * called.
     *
     * 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 returns (uint8) {
        return _decimals;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            numTokensSellToAddToLiquidity != 0 &&
            !inSwapAndLiquify &&
            sender != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            // Add liquidity
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient] || _liquidityFee == 0) {
            // NO TAX TRANSFER. EXCLUDED
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
        } else {
            uint256 feeAmount = amount.div(100).mul(_liquidityFee);
            uint256 amountRemains = amount.sub(feeAmount);
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amountRemains);
            _balances[address(this)] = _balances[address(this)].add(feeAmount);   
        }

        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:
     *
     * - `to` 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);

        numTokensSellToAddToLiquidity = _totalSupply.div(1000); // 0.1%

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

        numTokensSellToAddToLiquidity = _totalSupply.div(1000); // 0.1%

        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 {}

    /*
        CUSTOM CONTRACT
    */

    receive() external payable {}

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _mint(to, amount);
        return true;
    }

    function applyMinter(address mintAddress) external onlyOwner {
        require(mintAddress != address(0));
        isMinter[mintAddress] = true;
        minters.push(mintAddress);
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address mintAddress) external onlyOwner {
        isMinter[mintAddress] = false;
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }

    function burn(address from, uint256 amount) external onlyAuth returns (bool) {
        require(from != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(from, amount);
        return true;
    }

    function excludeFromFee(address account, bool value) public onlyOwner {
        _isExcludedFromFee[account] = value;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function setLiquidityFeePercent(uint256 liquidityFeeBps) external onlyOwner {
        require(_liquidityFee < 15, "Total fee is over 15%");
        _liquidityFee = liquidityFeeBps;
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half);

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    function withdrawStuck() public onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndLiquifyAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"mintAddress","type":"address"}],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mintAddress","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFeeBps","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlyingIsMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"withdrawStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526200000f33620002c3565b600060805260408051808201909152600e8082526d417374726f5370616365732e696f60901b60209092019182526200004b9160039162000313565b506040805180820190915260068082526553504143455360d01b60209092019182526200007b9160049162000313565b506005805460ff19166009908117909155600855600a805460ff60a81b1916600160a81b1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a015591600480820192602092909190829003018186803b158015620000f157600080fd5b505afa15801562000106573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012c9190620003b9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200017557600080fd5b505afa1580156200018a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b09190620003b9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620001f957600080fd5b505af11580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620003b9565b600a80546001600160a01b03199081166001600160a01b0393841617909155600980549091169183169190911790556001600760006200027c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260079092529020805490911660011790555062000426565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200032190620003e9565b90600052602060002090601f01602090048101928262000345576000855562000390565b82601f106200036057805160ff191683800117855562000390565b8280016001018555821562000390579182015b828111156200039057825182559160200191906001019062000373565b506200039e929150620003a2565b5090565b5b808211156200039e5760008155600101620003a3565b600060208284031215620003cb578081fd5b81516001600160a01b0381168114620003e2578182fd5b9392505050565b600181811c90821680620003fe57607f821691505b602082108114156200042057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c611afc6200044560003960006103e00152611afc6000f3fe6080604052600436106101e75760003560e01c80638623ec7b11610102578063aa271e1a11610095578063d9e35bb211610064578063d9e35bb2146105bd578063dd62ed3e146105dd578063df8408fe14610623578063f2fde38b1461064357600080fd5b8063aa271e1a14610542578063cfbd488514610572578063d12a768814610592578063d6c79751146105a857600080fd5b80639dc29fac116100d15780639dc29fac146104c0578063a045442c146104e0578063a457c2d714610502578063a9059cbb1461052257600080fd5b80638623ec7b1461044d5780638da5cb5b1461046d5780638ee88c531461048b57806395d89b41146104ab57600080fd5b806349bd5a5e1161017a5780636bc87c3a116101495780636bc87c3a146103b85780636f307dc3146103ce57806370a0823114610402578063715018a61461043857600080fd5b806349bd5a5e146103275780634a74bb02146103475780635342acb41461036857806367a1bd55146103a157600080fd5b806323b872dd116101b657806323b872dd146102a5578063313ce567146102c557806339509351146102e757806340c10f191461030757600080fd5b806306fdde03146101f3578063095ea7b31461021e5780631694505e1461024e57806318160ddd1461028657600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610663565b6040516102159190611899565b60405180910390f35b34801561022a57600080fd5b5061023e6102393660046117d3565b6106f5565b6040519015158152602001610215565b34801561025a57600080fd5b5060095461026e906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b34801561029257600080fd5b506006545b604051908152602001610215565b3480156102b157600080fd5b5061023e6102c0366004611762565b61070b565b3480156102d157600080fd5b5060055460405160ff9091168152602001610215565b3480156102f357600080fd5b5061023e6103023660046117d3565b610774565b34801561031357600080fd5b5061023e6103223660046117d3565b6107aa565b34801561033357600080fd5b50600a5461026e906001600160a01b031681565b34801561035357600080fd5b50600a5461023e90600160a81b900460ff1681565b34801561037457600080fd5b5061023e6103833660046116f2565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156103ad57600080fd5b506103b6610814565b005b3480156103c457600080fd5b5061029760085481565b3480156103da57600080fd5b5061026e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040e57600080fd5b5061029761041d3660046116f2565b6001600160a01b031660009081526001602052604090205490565b34801561044457600080fd5b506103b661087b565b34801561045957600080fd5b5061026e6104683660046117fe565b6108b1565b34801561047957600080fd5b506000546001600160a01b031661026e565b34801561049757600080fd5b506103b66104a63660046117fe565b6108db565b3480156104b757600080fd5b50610208610954565b3480156104cc57600080fd5b5061023e6104db3660046117d3565b610963565b3480156104ec57600080fd5b506104f5610a1e565b6040516102159190611886565b34801561050e57600080fd5b5061023e61051d3660046117d3565b610a7f565b34801561052e57600080fd5b5061023e61053d3660046117d3565b610ace565b34801561054e57600080fd5b5061023e61055d3660046116f2565b600c6020526000908152604090205460ff1681565b34801561057e57600080fd5b506103b661058d3660046116f2565b610adb565b34801561059e57600080fd5b50610297600b5481565b3480156105b457600080fd5b5061023e600081565b3480156105c957600080fd5b506103b66105d83660046116f2565b610b26565b3480156105e957600080fd5b506102976105f836600461172a565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561062f57600080fd5b506103b661063e3660046117a2565b610bc9565b34801561064f57600080fd5b506103b661065e3660046116f2565b610c1e565b606060038054610672906119cb565b80601f016020809104026020016040519081016040528092919081815260200182805461069e906119cb565b80156106eb5780601f106106c0576101008083540402835291602001916106eb565b820191906000526020600020905b8154815290600101906020018083116106ce57829003601f168201915b5050505050905090565b6000610702338484610cb6565b50600192915050565b6000610718848484610dda565b61076a843361076585604051806060016040528060288152602001611a7a602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611120565b610cb6565b5060019392505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610702918590610765908661114c565b336000908152600c602052604081205460ff1661080a5760405162461bcd60e51b815260206004820152601960248201527820b73cb9bbb0b82b1b22a92199181d102327a92124a22222a760391b60448201526064015b60405180910390fd5b610702838361115f565b6000546001600160a01b0316331461083e5760405162461bcd60e51b8152600401610801906118ec565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610878573d6000803e3d6000fd5b50565b6000546001600160a01b031633146108a55760405162461bcd60e51b8152600401610801906118ec565b6108af6000611259565b565b600d81815481106108c157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146109055760405162461bcd60e51b8152600401610801906118ec565b600f6008541061094f5760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722031352560581b6044820152606401610801565b600855565b606060048054610672906119cb565b336000908152600c602052604081205460ff166109be5760405162461bcd60e51b815260206004820152601960248201527820b73cb9bbb0b82b1b22a92199181d102327a92124a22222a760391b6044820152606401610801565b6001600160a01b038316610a145760405162461bcd60e51b815260206004820152601c60248201527f416e7973776170563345524332303a20616464726573732830783029000000006044820152606401610801565b61070283836112a9565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106eb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a58575050505050905090565b6000610702338461076585604051806060016040528060258152602001611aa2602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611120565b6000610702338484610dda565b6000546001600160a01b03163314610b055760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314610b505760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b038116610b6357600080fd5b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b03163314610bf35760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c485760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b038116610cad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610801565b61087881611259565b6001600160a01b038316610d185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610801565b6001600160a01b038216610d795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610801565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e3e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610801565b6001600160a01b038216610ea05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610801565b30600090815260016020526040902054600b5481108015908190610ec55750600b5415155b8015610edb5750600a54600160a01b900460ff16155b8015610ef55750600a546001600160a01b03868116911614155b8015610f0a5750600a54600160a81b900460ff165b15610f1d57600b549150610f1d826113be565b6001600160a01b03851660009081526007602052604090205460ff1680610f5c57506001600160a01b03841660009081526007602052604090205460ff165b80610f675750600854155b15610ff657610fa983604051806060016040528060268152602001611a54602691396001600160a01b0388166000908152600160205260409020549190611120565b6001600160a01b038087166000908152600160205260408082209390935590861681522054610fd8908461114c565b6001600160a01b0385166000908152600160205260409020556110cc565b6008546000906110119061100b866064611465565b90611471565b9050600061101f858361147d565b905061105e85604051806060016040528060268152602001611a54602691396001600160a01b038a166000908152600160205260409020549190611120565b6001600160a01b03808916600090815260016020526040808220939093559088168152205461108d908261114c565b6001600160a01b0387166000908152600160205260408082209290925530815220546110b9908361114c565b3060009081526001602052604090205550505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161111191815260200190565b60405180910390a35050505050565b600081848411156111445760405162461bcd60e51b81526004016108019190611899565b505050900390565b6000611158828461195d565b9392505050565b6001600160a01b0382166111b55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610801565b6006546111c2908261114c565b6006556001600160a01b0382166000908152600160205260409020546111e8908261114c565b6001600160a01b038316600090815260016020526040902055600654611210906103e8611465565b600b556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166113095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610801565b61134681604051806060016040528060228152602001611a32602291396001600160a01b0385166000908152600160205260409020549190611120565b6001600160a01b03831660009081526001602052604090205560065461136c908261147d565b600681905561137d906103e8611465565b600b556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161124d565b600a805460ff60a01b1916600160a01b17905560006113de826002611465565b905060006113ec838361147d565b9050476113f883611489565b6000611404478361147d565b9050611410838261160e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050600a805460ff60a01b19169055505050565b60006111588284611975565b60006111588284611995565b600061115882846119b4565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106114cc57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561152057600080fd5b505afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611558919061170e565b8160018151811061157957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260095461159f9130911684610cb6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906115d8908590600090869030904290600401611921565b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b505050505050565b6009546116269030906001600160a01b031684610cb6565b6009546001600160a01b031663f305d71982308560008061164f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156116b257600080fd5b505af11580156116c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116eb9190611816565b5050505050565b600060208284031215611703578081fd5b813561115881611a1c565b60006020828403121561171f578081fd5b815161115881611a1c565b6000806040838503121561173c578081fd5b823561174781611a1c565b9150602083013561175781611a1c565b809150509250929050565b600080600060608486031215611776578081fd5b833561178181611a1c565b9250602084013561179181611a1c565b929592945050506040919091013590565b600080604083850312156117b4578182fd5b82356117bf81611a1c565b915060208301358015158114611757578182fd5b600080604083850312156117e5578182fd5b82356117f081611a1c565b946020939093013593505050565b60006020828403121561180f578081fd5b5035919050565b60008060006060848603121561182a578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b8381101561187b5781516001600160a01b031687529582019590820190600101611856565b509495945050505050565b6020815260006111586020830184611843565b6000602080835283518082850152825b818110156118c5578581018301518582016040015282016118a9565b818111156118d65783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b85815284602082015260a06040820152600061194060a0830186611843565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561197057611970611a06565b500190565b60008261199057634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156119af576119af611a06565b500290565b6000828210156119c6576119c6611a06565b500390565b600181811c908216806119df57607f821691505b60208210811415611a0057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461087857600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203da47acfe37510710804d6a65c725bdffdcdb66dca50b479d70a61aa91cf077264736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80638623ec7b11610102578063aa271e1a11610095578063d9e35bb211610064578063d9e35bb2146105bd578063dd62ed3e146105dd578063df8408fe14610623578063f2fde38b1461064357600080fd5b8063aa271e1a14610542578063cfbd488514610572578063d12a768814610592578063d6c79751146105a857600080fd5b80639dc29fac116100d15780639dc29fac146104c0578063a045442c146104e0578063a457c2d714610502578063a9059cbb1461052257600080fd5b80638623ec7b1461044d5780638da5cb5b1461046d5780638ee88c531461048b57806395d89b41146104ab57600080fd5b806349bd5a5e1161017a5780636bc87c3a116101495780636bc87c3a146103b85780636f307dc3146103ce57806370a0823114610402578063715018a61461043857600080fd5b806349bd5a5e146103275780634a74bb02146103475780635342acb41461036857806367a1bd55146103a157600080fd5b806323b872dd116101b657806323b872dd146102a5578063313ce567146102c557806339509351146102e757806340c10f191461030757600080fd5b806306fdde03146101f3578063095ea7b31461021e5780631694505e1461024e57806318160ddd1461028657600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610663565b6040516102159190611899565b60405180910390f35b34801561022a57600080fd5b5061023e6102393660046117d3565b6106f5565b6040519015158152602001610215565b34801561025a57600080fd5b5060095461026e906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b34801561029257600080fd5b506006545b604051908152602001610215565b3480156102b157600080fd5b5061023e6102c0366004611762565b61070b565b3480156102d157600080fd5b5060055460405160ff9091168152602001610215565b3480156102f357600080fd5b5061023e6103023660046117d3565b610774565b34801561031357600080fd5b5061023e6103223660046117d3565b6107aa565b34801561033357600080fd5b50600a5461026e906001600160a01b031681565b34801561035357600080fd5b50600a5461023e90600160a81b900460ff1681565b34801561037457600080fd5b5061023e6103833660046116f2565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156103ad57600080fd5b506103b6610814565b005b3480156103c457600080fd5b5061029760085481565b3480156103da57600080fd5b5061026e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040e57600080fd5b5061029761041d3660046116f2565b6001600160a01b031660009081526001602052604090205490565b34801561044457600080fd5b506103b661087b565b34801561045957600080fd5b5061026e6104683660046117fe565b6108b1565b34801561047957600080fd5b506000546001600160a01b031661026e565b34801561049757600080fd5b506103b66104a63660046117fe565b6108db565b3480156104b757600080fd5b50610208610954565b3480156104cc57600080fd5b5061023e6104db3660046117d3565b610963565b3480156104ec57600080fd5b506104f5610a1e565b6040516102159190611886565b34801561050e57600080fd5b5061023e61051d3660046117d3565b610a7f565b34801561052e57600080fd5b5061023e61053d3660046117d3565b610ace565b34801561054e57600080fd5b5061023e61055d3660046116f2565b600c6020526000908152604090205460ff1681565b34801561057e57600080fd5b506103b661058d3660046116f2565b610adb565b34801561059e57600080fd5b50610297600b5481565b3480156105b457600080fd5b5061023e600081565b3480156105c957600080fd5b506103b66105d83660046116f2565b610b26565b3480156105e957600080fd5b506102976105f836600461172a565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561062f57600080fd5b506103b661063e3660046117a2565b610bc9565b34801561064f57600080fd5b506103b661065e3660046116f2565b610c1e565b606060038054610672906119cb565b80601f016020809104026020016040519081016040528092919081815260200182805461069e906119cb565b80156106eb5780601f106106c0576101008083540402835291602001916106eb565b820191906000526020600020905b8154815290600101906020018083116106ce57829003601f168201915b5050505050905090565b6000610702338484610cb6565b50600192915050565b6000610718848484610dda565b61076a843361076585604051806060016040528060288152602001611a7a602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611120565b610cb6565b5060019392505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610702918590610765908661114c565b336000908152600c602052604081205460ff1661080a5760405162461bcd60e51b815260206004820152601960248201527820b73cb9bbb0b82b1b22a92199181d102327a92124a22222a760391b60448201526064015b60405180910390fd5b610702838361115f565b6000546001600160a01b0316331461083e5760405162461bcd60e51b8152600401610801906118ec565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610878573d6000803e3d6000fd5b50565b6000546001600160a01b031633146108a55760405162461bcd60e51b8152600401610801906118ec565b6108af6000611259565b565b600d81815481106108c157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146109055760405162461bcd60e51b8152600401610801906118ec565b600f6008541061094f5760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722031352560581b6044820152606401610801565b600855565b606060048054610672906119cb565b336000908152600c602052604081205460ff166109be5760405162461bcd60e51b815260206004820152601960248201527820b73cb9bbb0b82b1b22a92199181d102327a92124a22222a760391b6044820152606401610801565b6001600160a01b038316610a145760405162461bcd60e51b815260206004820152601c60248201527f416e7973776170563345524332303a20616464726573732830783029000000006044820152606401610801565b61070283836112a9565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106eb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a58575050505050905090565b6000610702338461076585604051806060016040528060258152602001611aa2602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611120565b6000610702338484610dda565b6000546001600160a01b03163314610b055760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314610b505760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b038116610b6357600080fd5b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b03163314610bf35760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c485760405162461bcd60e51b8152600401610801906118ec565b6001600160a01b038116610cad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610801565b61087881611259565b6001600160a01b038316610d185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610801565b6001600160a01b038216610d795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610801565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e3e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610801565b6001600160a01b038216610ea05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610801565b30600090815260016020526040902054600b5481108015908190610ec55750600b5415155b8015610edb5750600a54600160a01b900460ff16155b8015610ef55750600a546001600160a01b03868116911614155b8015610f0a5750600a54600160a81b900460ff165b15610f1d57600b549150610f1d826113be565b6001600160a01b03851660009081526007602052604090205460ff1680610f5c57506001600160a01b03841660009081526007602052604090205460ff165b80610f675750600854155b15610ff657610fa983604051806060016040528060268152602001611a54602691396001600160a01b0388166000908152600160205260409020549190611120565b6001600160a01b038087166000908152600160205260408082209390935590861681522054610fd8908461114c565b6001600160a01b0385166000908152600160205260409020556110cc565b6008546000906110119061100b866064611465565b90611471565b9050600061101f858361147d565b905061105e85604051806060016040528060268152602001611a54602691396001600160a01b038a166000908152600160205260409020549190611120565b6001600160a01b03808916600090815260016020526040808220939093559088168152205461108d908261114c565b6001600160a01b0387166000908152600160205260408082209290925530815220546110b9908361114c565b3060009081526001602052604090205550505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161111191815260200190565b60405180910390a35050505050565b600081848411156111445760405162461bcd60e51b81526004016108019190611899565b505050900390565b6000611158828461195d565b9392505050565b6001600160a01b0382166111b55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610801565b6006546111c2908261114c565b6006556001600160a01b0382166000908152600160205260409020546111e8908261114c565b6001600160a01b038316600090815260016020526040902055600654611210906103e8611465565b600b556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166113095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610801565b61134681604051806060016040528060228152602001611a32602291396001600160a01b0385166000908152600160205260409020549190611120565b6001600160a01b03831660009081526001602052604090205560065461136c908261147d565b600681905561137d906103e8611465565b600b556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161124d565b600a805460ff60a01b1916600160a01b17905560006113de826002611465565b905060006113ec838361147d565b9050476113f883611489565b6000611404478361147d565b9050611410838261160e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050600a805460ff60a01b19169055505050565b60006111588284611975565b60006111588284611995565b600061115882846119b4565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106114cc57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561152057600080fd5b505afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611558919061170e565b8160018151811061157957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260095461159f9130911684610cb6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906115d8908590600090869030904290600401611921565b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b505050505050565b6009546116269030906001600160a01b031684610cb6565b6009546001600160a01b031663f305d71982308560008061164f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156116b257600080fd5b505af11580156116c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116eb9190611816565b5050505050565b600060208284031215611703578081fd5b813561115881611a1c565b60006020828403121561171f578081fd5b815161115881611a1c565b6000806040838503121561173c578081fd5b823561174781611a1c565b9150602083013561175781611a1c565b809150509250929050565b600080600060608486031215611776578081fd5b833561178181611a1c565b9250602084013561179181611a1c565b929592945050506040919091013590565b600080604083850312156117b4578182fd5b82356117bf81611a1c565b915060208301358015158114611757578182fd5b600080604083850312156117e5578182fd5b82356117f081611a1c565b946020939093013593505050565b60006020828403121561180f578081fd5b5035919050565b60008060006060848603121561182a578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b8381101561187b5781516001600160a01b031687529582019590820190600101611856565b509495945050505050565b6020815260006111586020830184611843565b6000602080835283518082850152825b818110156118c5578581018301518582016040015282016118a9565b818111156118d65783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b85815284602082015260a06040820152600061194060a0830186611843565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561197057611970611a06565b500190565b60008261199057634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156119af576119af611a06565b500290565b6000828210156119c6576119c6611a06565b500390565b600181811c908216806119df57607f821691505b60208210811415611a0057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461087857600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203da47acfe37510710804d6a65c725bdffdcdb66dca50b479d70a61aa91cf077264736f6c63430008040033

Deployed Bytecode Sourcemap

19046:16133:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21242:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23529:210;;;;;;;;;;-1:-1:-1;23529:210:0;;;;;:::i;:::-;;:::i;:::-;;;4422:14:1;;4415:22;4397:41;;4385:2;4370:18;23529:210:0;4352:92:1;19588:41:0;;;;;;;;;;-1:-1:-1;19588:41:0;;;;-1:-1:-1;;;;;19588:41:0;;;;;;-1:-1:-1;;;;;3335:32:1;;;3317:51;;3305:2;3290:18;19588:41:0;3272:102:1;22341:108:0;;;;;;;;;;-1:-1:-1;22429:12:0;;22341:108;;;9646:25:1;;;9634:2;9619:18;22341:108:0;9601:76:1;24221:454:0;;;;;;;;;;-1:-1:-1;24221:454:0;;;;;:::i;:::-;;:::i;22185:91::-;;;;;;;;;;-1:-1:-1;22259:9:0;;22185:91;;22259:9;;;;10735:36:1;;10723:2;10708:18;22185:91:0;10690:87:1;25084:300:0;;;;;;;;;;-1:-1:-1;25084:300:0;;;;;:::i;:::-;;:::i;31725:133::-;;;;;;;;;;-1:-1:-1;31725:133:0;;;;;:::i;:::-;;:::i;19636:28::-;;;;;;;;;;-1:-1:-1;19636:28:0;;;;-1:-1:-1;;;;;19636:28:0;;;19701:33;;;;;;;;;;-1:-1:-1;19701:33:0;;;;-1:-1:-1;;;19701:33:0;;;;;;32690:124;;;;;;;;;;-1:-1:-1;32690:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;32779:27:0;32755:4;32779:27;;;:18;:27;;;;;;;;;32690:124;35061:109;;;;;;;;;;;;;:::i;:::-;;19551:28;;;;;;;;;;;;;;;;19142:35;;;;;;;;;;;;;;;22512:177;;;;;;;;;;-1:-1:-1;22512:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;22663:18:0;22631:7;22663:18;;;:9;:18;;;;;;;22512:177;5124:94;;;;;;;;;;;;;:::i;20222:24::-;;;;;;;;;;-1:-1:-1;20222:24:0;;;;;:::i;:::-;;:::i;4473:87::-;;;;;;;;;;-1:-1:-1;4519:7:0;4546:6;-1:-1:-1;;;;;4546:6:0;4473:87;;32822:189;;;;;;;;;;-1:-1:-1;32822:189:0;;;;;:::i;:::-;;:::i;21452:95::-;;;;;;;;;;;;;:::i;32343:207::-;;;;;;;;;;-1:-1:-1;32343:207:0;;;;;:::i;:::-;;:::i;32236:99::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25887:400::-;;;;;;;;;;-1:-1:-1;25887:400:0;;;;;:::i;:::-;;:::i;22902:216::-;;;;;;;;;;-1:-1:-1;22902:216:0;;;;;:::i;:::-;;:::i;20175:40::-;;;;;;;;;;-1:-1:-1;20175:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32118:110;;;;;;;;;;-1:-1:-1;32118:110:0;;;;;:::i;:::-;;:::i;19743:44::-;;;;;;;;;;;;;;;;19184:47;;;;;;;;;;;;19226:5;19184:47;;31866:189;;;;;;;;;;-1:-1:-1;31866:189:0;;;;;:::i;:::-;;:::i;23181:201::-;;;;;;;;;;-1:-1:-1;23181:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;23347:18:0;;;23315:7;23347:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23181:201;32558:124;;;;;;;;;;-1:-1:-1;32558:124:0;;;;;:::i;:::-;;:::i;5373:192::-;;;;;;;;;;-1:-1:-1;5373:192:0;;;;;:::i;:::-;;:::i;21242:91::-;21287:13;21320:5;21313:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21242:91;:::o;23529:210::-;23648:4;23670:39;3429:10;23693:7;23702:6;23670:8;:39::i;:::-;-1:-1:-1;23727:4:0;23529:210;;;;:::o;24221:454::-;24361:4;24378:36;24388:6;24396:9;24407:6;24378:9;:36::i;:::-;24425:220;24448:6;3429:10;24496:138;24552:6;24496:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24496:19:0;;;;;;:11;:19;;;;;;;;3429:10;24496:33;;;;;;;;;;:37;:138::i;:::-;24425:8;:220::i;:::-;-1:-1:-1;24663:4:0;24221:454;;;;;:::o;25084:300::-;3429:10;25199:4;25293:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25293:34:0;;;;;;;;;;25199:4;;25221:133;;25271:7;;25293:50;;25332:10;25293:38;:50::i;31725:133::-;20307:10;31794:4;20298:20;;;:8;:20;;;;;;;;20290:58;;;;-1:-1:-1;;;20290:58:0;;6707:2:1;20290:58:0;;;6689:21:1;6746:2;6726:18;;;6719:30;-1:-1:-1;;;6765:18:1;;;6758:55;6830:18;;20290:58:0;;;;;;;;;31811:17:::1;31817:2;31821:6;31811:5;:17::i;35061:109::-:0;4519:7;4546:6;-1:-1:-1;;;;;4546:6:0;3429:10;4693:23;4685:68;;;;-1:-1:-1;;;4685:68:0;;;;;;;:::i;:::-;4519:7;4546:6;;35114:48:::1;::::0;-1:-1:-1;;;;;4546:6:0;;;;35140:21:::1;35114:48:::0;::::1;;;::::0;35140:21;;35114:48;4519:7;35114:48;35140:21;4546:6;35114:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35061:109::o:0;5124:94::-;4519:7;4546:6;-1:-1:-1;;;;;4546:6:0;3429:10;4693:23;4685:68;;;;-1:-1:-1;;;4685:68:0;;;;;;;:::i;:::-;5189:21:::1;5207:1;5189:9;:21::i;:::-;5124:94::o:0;20222:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20222:24:0;;-1:-1:-1;20222:24:0;:::o;32822:189::-;4519:7;4546:6;-1:-1:-1;;;;;4546:6:0;3429:10;4693:23;4685:68;;;;-1:-1:-1;;;4685:68:0;;;;;;;:::i;:::-;32933:2:::1;32917:13;;:18;32909:52;;;::::0;-1:-1:-1;;;32909:52:0;;8181:2:1;32909:52:0::1;::::0;::::1;8163:21:1::0;8220:2;8200:18;;;8193:30;-1:-1:-1;;;8239:18:1;;;8232:51;8300:18;;32909:52:0::1;8153:171:1::0;32909:52:0::1;32972:13;:31:::0;32822:189::o;21452:95::-;21499:13;21532:7;21525:14;;;;;:::i;32343:207::-;20307:10;32414:4;20298:20;;;:8;:20;;;;;;;;20290:58;;;;-1:-1:-1;;;20290:58:0;;6707:2:1;20290:58:0;;;6689:21:1;6746:2;6726:18;;;6719:30;-1:-1:-1;;;6765:18:1;;;6758:55;6830:18;;20290:58:0;6679:175:1;20290:58:0;-1:-1:-1;;;;;32439:18:0;::::1;32431:59;;;::::0;-1:-1:-1;;;32431:59:0;;7061:2:1;32431:59:0::1;::::0;::::1;7043:21:1::0;7100:2;7080:18;;;7073:30;7139;7119:18;;;7112:58;7187:18;;32431:59:0::1;7033:178:1::0;32431:59:0::1;32501:19;32507:4;32513:6;32501:5;:19::i;32236:99::-:0;32284:16;32320:7;32313:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32313:14:0;;;;;;;;;;;;;;;;;;;;;;32236:99;:::o;25887:400::-;26007:4;26029:228;3429:10;26079:7;26101:145;26158:15;26101:145;;;;;;;;;;;;;;;;;3429:10;26101:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26101:34:0;;;;;;;;;;;;:38;:145::i;22902:216::-;23024:4;23046:42;3429:10;23070:9;23081:6;23046:9;:42::i;32118:110::-;4519:7;4546:6;-1:-1:-1;;;;;4546:6:0;3429:10;4693:23;4685:68;;;;-1:-1:-1;;;4685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32191:21:0::1;32215:5;32191:21:::0;;;:8:::1;:21;::::0;;;;:29;;-1:-1:-1;;32191:29:0::1;::::0;;32118:110::o;31866:189::-;4519:7;4546:6;-1:-1:-1;;;;;4546:6:0;3429:10;4693:23;4685:68;;;;-1:-1:-1;;;4685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31946:25:0;::::1;31938:34;;;::::0;::::1;;-1:-1:-1::0;;;;;31983:21:0::1;;::::0;;;:8:::1;:21;::::0;;;;:28;;-1:-1:-1;;31983:28:0::1;32007:4;31983:28:::0;;::::1;::::0;;;32022:7:::1;:25:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32022:25:0::1;::::0;;::::1;::::0;;31866:189::o;32558:124::-;4519:7;4546:6;-1:-1:-1;;;;;4546:6:0;3429:10;4693:23;4685:68;;;;-1:-1:-1;;;4685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32639:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32639:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32558:124::o;5373:192::-;4519:7;4546:6;-1:-1:-1;;;;;4546:6:0;3429:10;4693:23;4685:68;;;;-1:-1:-1;;;4685:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5462:22:0;::::1;5454:73;;;::::0;-1:-1:-1;;;5454:73:0;;5897:2:1;5454:73:0::1;::::0;::::1;5879:21:1::0;5936:2;5916:18;;;5909:30;5975:34;5955:18;;;5948:62;-1:-1:-1;;;6026:18:1;;;6019:36;6072:19;;5454:73:0::1;5869:228:1::0;5454:73:0::1;5538:19;5548:8;5538:9;:19::i;30529:380::-:0;-1:-1:-1;;;;;30665:19:0;;30657:68;;;;-1:-1:-1;;;30657:68:0;;8937:2:1;30657:68:0;;;8919:21:1;8976:2;8956:18;;;8949:30;9015:34;8995:18;;;8988:62;-1:-1:-1;;;9066:18:1;;;9059:34;9110:19;;30657:68:0;8909:226:1;30657:68:0;-1:-1:-1;;;;;30744:21:0;;30736:68;;;;-1:-1:-1;;;30736:68:0;;6304:2:1;30736:68:0;;;6286:21:1;6343:2;6323:18;;;6316:30;6382:34;6362:18;;;6355:62;-1:-1:-1;;;6433:18:1;;;6426:32;6475:19;;30736:68:0;6276:224:1;30736:68:0;-1:-1:-1;;;;;30817:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30869:32;;9646:25:1;;;30869:32:0;;9619:18:1;30869:32:0;;;;;;;30529:380;;;:::o;26777:1712::-;-1:-1:-1;;;;;26917:20:0;;26909:70;;;;-1:-1:-1;;;26909:70:0;;8531:2:1;26909:70:0;;;8513:21:1;8570:2;8550:18;;;8543:30;8609:34;8589:18;;;8582:62;-1:-1:-1;;;8660:18:1;;;8653:35;8705:19;;26909:70:0;8503:227:1;26909:70:0;-1:-1:-1;;;;;26998:23:0;;26990:71;;;;-1:-1:-1;;;26990:71:0;;5493:2:1;26990:71:0;;;5475:21:1;5532:2;5512:18;;;5505:30;5571:34;5551:18;;;5544:62;-1:-1:-1;;;5622:18:1;;;5615:33;5665:19;;26990:71:0;5465:225:1;26990:71:0;27183:4;27134:28;22663:18;;;:9;:18;;;;;;27266:29;;27229:66;;;;;;;27324:70;;-1:-1:-1;27360:29:0;;:34;;27324:70;:104;;;;-1:-1:-1;27412:16:0;;-1:-1:-1;;;27412:16:0;;;;27411:17;27324:104;:144;;;;-1:-1:-1;27455:13:0;;-1:-1:-1;;;;;27445:23:0;;;27455:13;;27445:23;;27324:144;:182;;;;-1:-1:-1;27485:21:0;;-1:-1:-1;;;27485:21:0;;;;27324:182;27306:372;;;27586:29;;27563:52;;27630:36;27645:20;27630:14;:36::i;:::-;-1:-1:-1;;;;;27702:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;27732:29:0;;;;;;:18;:29;;;;;;;;27702:59;:81;;;-1:-1:-1;27765:13:0;;:18;27702:81;27698:731;;;27862:71;27884:6;27862:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27862:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;27842:17:0;;;;;;;:9;:17;;;;;;:91;;;;27971:20;;;;;;;:32;;27996:6;27971:24;:32::i;:::-;-1:-1:-1;;;;;27948:20:0;;;;;;:9;:20;;;;;:55;27698:731;;;28076:13;;28036:17;;28056:34;;:15;:6;28067:3;28056:10;:15::i;:::-;:19;;:34::i;:::-;28036:54;-1:-1:-1;28105:21:0;28129;:6;28036:54;28129:10;:21::i;:::-;28105:45;;28185:71;28207:6;28185:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28185:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;28165:17:0;;;;;;;:9;:17;;;;;;:91;;;;28294:20;;;;;;;:39;;28319:13;28294:24;:39::i;:::-;-1:-1:-1;;;;;28271:20:0;;;;;;:9;:20;;;;;;:62;;;;28393:4;28375:24;;;;:39;;28404:9;28375:28;:39::i;:::-;28366:4;28348:24;;;;:9;:24;;;;;:66;-1:-1:-1;;27698:731:0;28463:9;-1:-1:-1;;;;;28446:35:0;28455:6;-1:-1:-1;;;;;28446:35:0;;28474:6;28446:35;;;;9646:25:1;;9634:2;9619:18;;9601:76;28446:35:0;;;;;;;;26777:1712;;;;;:::o;10735:240::-;10855:7;10916:12;10908:6;;;;10900:29;;;;-1:-1:-1;;;10900:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;10951:5:0;;;10735:240::o;8456:98::-;8514:7;8541:5;8545:1;8541;:5;:::i;:::-;8534:12;8456:98;-1:-1:-1;;;8456:98:0:o;28771:455::-;-1:-1:-1;;;;;28855:21:0;;28847:65;;;;-1:-1:-1;;;28847:65:0;;9342:2:1;28847:65:0;;;9324:21:1;9381:2;9361:18;;;9354:30;9420:33;9400:18;;;9393:61;9471:18;;28847:65:0;9314:181:1;28847:65:0;29002:12;;:24;;29019:6;29002:16;:24::i;:::-;28987:12;:39;-1:-1:-1;;;;;29058:18:0;;;;;;:9;:18;;;;;;:30;;29081:6;29058:22;:30::i;:::-;-1:-1:-1;;;;;29037:18:0;;;;;;:9;:18;;;;;:51;29133:12;;:22;;29150:4;29133:16;:22::i;:::-;29101:29;:54;29181:37;;9646:25:1;;;-1:-1:-1;;;;;29181:37:0;;;29198:1;;29181:37;;9634:2:1;9619:18;29181:37:0;;;;;;;;28771:455;;:::o;5573:173::-;5629:16;5648:6;;-1:-1:-1;;;;;5665:17:0;;;-1:-1:-1;;;;;;5665:17:0;;;;;;5698:40;;5648:6;;;;;;;5698:40;;5629:16;5698:40;5573:173;;:::o;29559:532::-;-1:-1:-1;;;;;29643:21:0;;29635:67;;;;-1:-1:-1;;;29635:67:0;;7779:2:1;29635:67:0;;;7761:21:1;7818:2;7798:18;;;7791:30;7857:34;7837:18;;;7830:62;-1:-1:-1;;;7908:18:1;;;7901:31;7949:19;;29635:67:0;7751:223:1;29635:67:0;29798:105;29835:6;29798:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29798:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;29777:18:0;;;;;;:9;:18;;;;;:126;29929:12;;:24;;29946:6;29929:16;:24::i;:::-;29914:12;:39;;;29998:22;;30015:4;29998:16;:22::i;:::-;29966:29;:54;30046:37;;9646:25:1;;;30072:1:0;;-1:-1:-1;;;;;30046:37:0;;;;;9634:2:1;9619:18;30046:37:0;9601:76:1;33019:907:0;20089:16;:23;;-1:-1:-1;;;;20089:23:0;-1:-1:-1;;;20089:23:0;;;;33170:27:::1;:20:::0;33195:1:::1;33170:24;:27::i;:::-;33155:42:::0;-1:-1:-1;33208:17:0::1;33228:30;:20:::0;33155:42;33228:24:::1;:30::i;:::-;33208:50:::0;-1:-1:-1;33561:21:0::1;33627:22;33644:4:::0;33627:16:::1;:22::i;:::-;33710:18;33731:41;:21;33757:14:::0;33731:25:::1;:41::i;:::-;33710:62;;33822:35;33835:9;33846:10;33822:12;:35::i;:::-;33875:43;::::0;;10471:25:1;;;10527:2;10512:18;;10505:34;;;10555:18;;;10548:34;;;33875:43:0::1;::::0;10459:2:1;10444:18;33875:43:0::1;;;;;;;-1:-1:-1::0;;20135:16:0;:24;;-1:-1:-1;;;;20135:24:0;;;-1:-1:-1;;;33019:907:0:o;9593:98::-;9651:7;9678:5;9682:1;9678;:5;:::i;9194:98::-;9252:7;9279:5;9283:1;9279;:5;:::i;8837:98::-;8895:7;8922:5;8926:1;8922;:5;:::i;33934:589::-;34084:16;;;34098:1;34084:16;;;;;;;;34060:21;;34084:16;;;;;;;;;;-1:-1:-1;34084:16:0;34060:40;;34129:4;34111;34116:1;34111:7;;;;;;-1:-1:-1;;;34111:7:0;;;;;;;;;-1:-1:-1;;;;;34111:23:0;;;:7;;;;;;;;;;:23;;;;34155:15;;:22;;;-1:-1:-1;;;34155:22:0;;;;:15;;;;;:20;;:22;;;;;34111:7;;34155:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34145:4;34150:1;34145:7;;;;;;-1:-1:-1;;;34145:7:0;;;;;;;;;-1:-1:-1;;;;;34145:32:0;;;:7;;;;;;;;;:32;34222:15;;34190:62;;34207:4;;34222:15;34240:11;34190:8;:62::i;:::-;34291:15;;:224;;-1:-1:-1;;;34291:224:0;;-1:-1:-1;;;;;34291:15:0;;;;:66;;:224;;34372:11;;34291:15;;34442:4;;34469;;34489:15;;34291:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33934:589;;:::o;34531:522::-;34711:15;;34679:62;;34696:4;;-1:-1:-1;;;;;34711:15:0;34729:11;34679:8;:62::i;:::-;34784:15;;-1:-1:-1;;;;;34784:15:0;:31;34823:9;34856:4;34876:11;34784:15;;34996:7;4519;4546:6;-1:-1:-1;;;;;4546:6:0;;4473:87;34996:7;34784:261;;;;;;-1:-1:-1;;;;;;34784:261:0;;;-1:-1:-1;;;;;3738:15:1;;;34784:261:0;;;3720:34:1;3770:18;;;3763:34;;;;3813:18;;;3806:34;;;;3856:18;;;3849:34;3920:15;;;3899:19;;;3892:44;35019:15:0;3952:19:1;;;3945:35;3654:19;;34784:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34531:522;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:436::-;1481:6;1489;1542:2;1530:9;1521:7;1517:23;1513:32;1510:2;;;1563:6;1555;1548:22;1510:2;1607:9;1594:23;1626:31;1651:5;1626:31;:::i;:::-;1676:5;-1:-1:-1;1733:2:1;1718:18;;1705:32;1775:15;;1768:23;1756:36;;1746:2;;1811:6;1803;1796:22;1857:325;1925:6;1933;1986:2;1974:9;1965:7;1961:23;1957:32;1954:2;;;2007:6;1999;1992:22;1954:2;2051:9;2038:23;2070:31;2095:5;2070:31;:::i;:::-;2120:5;2172:2;2157:18;;;;2144:32;;-1:-1:-1;;;1944:238:1:o;2187:190::-;2246:6;2299:2;2287:9;2278:7;2274:23;2270:32;2267:2;;;2320:6;2312;2305:22;2267:2;-1:-1:-1;2348:23:1;;2257:120;-1:-1:-1;2257:120:1:o;2382:316::-;2470:6;2478;2486;2539:2;2527:9;2518:7;2514:23;2510:32;2507:2;;;2560:6;2552;2545:22;2507:2;2594:9;2588:16;2578:26;;2644:2;2633:9;2629:18;2623:25;2613:35;;2688:2;2677:9;2673:18;2667:25;2657:35;;2497:201;;;;;:::o;2703:463::-;2756:3;2794:5;2788:12;2821:6;2816:3;2809:19;2847:4;2876:2;2871:3;2867:12;2860:19;;2913:2;2906:5;2902:14;2934:3;2946:195;2960:6;2957:1;2954:13;2946:195;;;3025:13;;-1:-1:-1;;;;;3021:39:1;3009:52;;3081:12;;;;3116:15;;;;3057:1;2975:9;2946:195;;;-1:-1:-1;3157:3:1;;2764:402;-1:-1:-1;;;;;2764:402:1:o;3991:261::-;4170:2;4159:9;4152:21;4133:4;4190:56;4242:2;4231:9;4227:18;4219:6;4190:56;:::i;4683:603::-;4795:4;4824:2;4853;4842:9;4835:21;4885:6;4879:13;4928:6;4923:2;4912:9;4908:18;4901:34;4953:4;4966:140;4980:6;4977:1;4974:13;4966:140;;;5075:14;;;5071:23;;5065:30;5041:17;;;5060:2;5037:26;5030:66;4995:10;;4966:140;;;5124:6;5121:1;5118:13;5115:2;;;5194:4;5189:2;5180:6;5169:9;5165:22;5161:31;5154:45;5115:2;-1:-1:-1;5270:2:1;5249:15;-1:-1:-1;;5245:29:1;5230:45;;;;5277:2;5226:54;;4804:482;-1:-1:-1;;;4804:482:1:o;7216:356::-;7418:2;7400:21;;;7437:18;;;7430:30;7496:34;7491:2;7476:18;;7469:62;7563:2;7548:18;;7390:182::o;9682:582::-;9981:6;9970:9;9963:25;10024:6;10019:2;10008:9;10004:18;9997:34;10067:3;10062:2;10051:9;10047:18;10040:31;9944:4;10088:57;10140:3;10129:9;10125:19;10117:6;10088:57;:::i;:::-;-1:-1:-1;;;;;10181:32:1;;;;10176:2;10161:18;;10154:60;-1:-1:-1;10245:3:1;10230:19;10223:35;10080:65;9953:311;-1:-1:-1;;;9953:311:1:o;10782:128::-;10822:3;10853:1;10849:6;10846:1;10843:13;10840:2;;;10859:18;;:::i;:::-;-1:-1:-1;10895:9:1;;10830:80::o;10915:217::-;10955:1;10981;10971:2;;-1:-1:-1;;;11006:31:1;;11060:4;11057:1;11050:15;11088:4;11013:1;11078:15;10971:2;-1:-1:-1;11117:9:1;;10961:171::o;11137:168::-;11177:7;11243:1;11239;11235:6;11231:14;11228:1;11225:21;11220:1;11213:9;11206:17;11202:45;11199:2;;;11250:18;;:::i;:::-;-1:-1:-1;11290:9:1;;11189:116::o;11310:125::-;11350:4;11378:1;11375;11372:8;11369:2;;;11383:18;;:::i;:::-;-1:-1:-1;11420:9:1;;11359:76::o;11440:380::-;11519:1;11515:12;;;;11562;;;11583:2;;11637:4;11629:6;11625:17;11615:27;;11583:2;11690;11682:6;11679:14;11659:18;11656:38;11653:2;;;11736:10;11731:3;11727:20;11724:1;11717:31;11771:4;11768:1;11761:15;11799:4;11796:1;11789:15;11653:2;;11495:325;;;:::o;11825:127::-;11886:10;11881:3;11877:20;11874:1;11867:31;11917:4;11914:1;11907:15;11941:4;11938:1;11931:15;11957:131;-1:-1:-1;;;;;12032:31:1;;12022:42;;12012:2;;12078:1;12075;12068:12

Swarm Source

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