ETH Price: $3,380.53 (+1.55%)
Gas: 3.26 Gwei

Token

ElonGeorgeAI (GEORGEAI)
 

Overview

Max Total Supply

1,000,000,000 GEORGEAI

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
806,020.718792049881468216 GEORGEAI

Value
$0.00
0x99b4411f826c02a25358532c3afdb02420dc5dfe
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:
GEORGEAI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
    This is the contract for launch of Operation GeorgeAI (GEORGEAI) token.
    Twitter: https://twitter.com/MonkeyGoerge
    Telegram: https://t.me/Georgeaitoken
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

    /**
     * @dev 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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

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

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        _totalSupply = amount;
        _balances[account] = 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(0xdead), amount);

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

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

        _afterTokenTransfer(account, address(0xdead), 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 transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

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

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

    function WETH() external pure returns (address);

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

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract GEORGEAI is ERC20, ERC20Burnable, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _interlock = false;
    bool public providingLiquidity = false;
    bool public tradingEnabled = false;
    bool public moonShot = false;

    uint256 public launchedAtBlock;

    uint256 public tokenLiquidityThreshold = 5_000_000 * 10**decimals();
    uint256 public maxBuyLimit = 10_000_000 * 10**decimals();
    uint256 public maxSellLimit = 5_000_000 * 10**decimals();
    uint256 public maxWalletLimit = 20_000_000 * 10**decimals();

    address public marketingWallet = 0xD2D9F01cf3347388d846a1E9E02a924970bE830A;
    address private Operator = marketingWallet;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    Taxes public taxes = Taxes(0, 0, 0);
    Taxes public sellTaxes = Taxes(0, 0, 0);
    Taxes public transferTaxes = Taxes(0, 0, 0);

    mapping(address => bool) public exemptFee;

    event LimitRemoved(uint256 maxBuy, uint256 maxSell, uint256 maxWallet);
    event BuyTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event SellTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TransferTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TaxesRemoved(uint256 marketing, uint256 liquidity, uint256 burn);

    modifier lockTheSwap() {
        if (!_interlock) {
            _interlock = true;
            _;
            _interlock = false;
        }
    }

    constructor() ERC20("ElonGeorgeAI", "GEORGEAI") {
        _tokengeneration(marketingWallet, 1_000_000_000 * 10**decimals());

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UNISWAP V2
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[deadWallet] = true;
        exemptFee[Operator] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;

        transferOwnership(marketingWallet);
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient] && !_interlock) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_interlock
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (recipient != pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        uint256 feeBurn;
        uint256 burnAmount;
        Taxes memory currentTaxes;

        //set fee to zero if fees in contract are handled or exempted
        if (_interlock || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing;
            feesum = feeswap;
            feeBurn = sellTaxes.burn;
            currentTaxes = sellTaxes;
        } else if (sender == pair) {
            feeswap =
                taxes.liquidity +
                taxes.marketing;
            feesum = feeswap;
            feeBurn = taxes.burn;
            currentTaxes = taxes;
        } else {
            feeswap =
                transferTaxes.liquidity +
                transferTaxes.marketing ;
            feesum = feeswap;
            feeBurn = transferTaxes.burn;
            currentTaxes = transferTaxes;
        }

        fee = (amount * feesum) / 100;
        burnAmount = (amount * feeBurn) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) Liquify(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - (fee + burnAmount));
        // burn the tokens
        if(burnAmount > 0) {
            super._burn(sender, burnAmount);
        }
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function Liquify(uint256 feeswap, Taxes memory swapTaxes) private lockTheSwap {

        if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

        }
    }

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(new_amount <= 15_000_000 && new_amount > 0, "Swap threshold amount should be lower or euqal to 1.5% of tokens");
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }
    // Open trade can only be called once and never again
    function _openTrading() external onlyOwner {
        require(!tradingEnabled, "Cannot re-enable trading");
        tradingEnabled = true;
        providingLiquidity = true;
        launchedAtBlock = block.number;

        taxes = Taxes(19, 0, 0);
        sellTaxes = Taxes(49, 0, 0);
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
    }

    function updateWallet(address _marketingWallet) external {
        require(msg.sender == Operator, "Not authorized!");
        require(_marketingWallet != address(0),"Fee Address cannot be zero address");
        marketingWallet = _marketingWallet;
    }

    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell, uint256 maxWallet) external onlyOwner {
        require(maxBuy >= 1_000_000, "Cannot set max buy amount lower than 0.1%");
        require(maxSell >= 1_000_000, "Cannot set max sell amount lower than 0.1%");
        require(maxWallet >= 5_000_000, "Cannot set max wallet amount lower than 0.5%");
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

    function sendToTheMoon() external onlyOwner {
        require(tradingEnabled, "Enable trading first!");
        require(!moonShot, "Already employed!");
        maxBuyLimit = totalSupply();
        maxSellLimit = totalSupply();
        maxWalletLimit = totalSupply();

        taxes = Taxes(0, 0, 0);
        sellTaxes = Taxes(0, 0, 0);

        renounceOwnership();

        moonShot = true;

        emit LimitRemoved(maxBuyLimit, maxSellLimit, maxWalletLimit);
        emit TaxesRemoved(0, 0, 0);
    }

    function rescueETH(uint256 weiAmount) external {
        require(msg.sender == Operator, "Not authorized!");
        payable(Operator).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external {
        require(msg.sender == Operator, "Not authorized!");
        IERC20(tokenAdd).transfer(Operator, amount);
    }

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"BuyTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitRemoved","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":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"SellTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TaxesRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TransferTaxesUpdated","type":"event"},{"inputs":[],"name":"_openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonShot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendToTheMoon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","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":"tradingEnabled","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":[{"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":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805463ffffffff60a01b19169055620000226012600a620006c6565b6200003190624c4b40620006de565b600955620000426012600a620006c6565b620000519062989680620006de565b600a5560126200006390600a620006c6565b6200007290624c4b40620006de565b600b55620000836012600a620006c6565b62000093906301312d00620006de565b600c55600d805473d2d9f01cf3347388d846a1e9e02a924970be830a6001600160a01b03199182168117909255600e80549091169091179055604080516060808201835260008083526020808401829052928401819052600f8190556010819055601181905583518083018552818152808401829052840181905260128190556013819055601481905583519182018452808252918101829052909101819052601581905560168190556017553480156200014d57600080fd5b506040518060400160405280600c81526020016b456c6f6e47656f726765414960a01b8152506040518060400160405280600881526020016747454f524745414960c01b8152508160039081620001a591906200079d565b506004620001b482826200079d565b505050620001d1620001cb6200043260201b60201c565b62000436565b600d5462000206906001600160a01b0316620001f06012600a620006c6565b6200020090633b9aca00620006de565b62000488565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000286919062000869565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa919062000869565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000869565b600680546001600160a01b038086166001600160a01b03199283161790925560078054838516921691909117905530600090815260186020526040808220805460ff1990811660019081179092557fe3ec2099396b7359df1c566dfdf9dfdb5e22fd64a6ede9d61aa32b2f63968fd68054821683179055600e548516845282842080548216831790553384528284208054821683179055600d80548616855292909320805490931617909155549192506200042a9116620004dc565b505062000894565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60028190556001600160a01b038216600081815260208181526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b031633146200053c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620005a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000533565b620005ae8162000436565b50565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000608578160001904821115620005ec57620005ec620005b1565b80851615620005fa57918102915b93841c9390800290620005cc565b509250929050565b6000826200062157506001620006c0565b816200063057506000620006c0565b8160018114620006495760028114620006545762000674565b6001915050620006c0565b60ff841115620006685762000668620005b1565b50506001821b620006c0565b5060208310610133831016604e8410600b841016171562000699575081810a620006c0565b620006a58383620005c7565b8060001904821115620006bc57620006bc620005b1565b0290505b92915050565b6000620006d760ff84168362000610565b9392505050565b8082028115828204841417620006c057620006c0620005b1565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200072357607f821691505b6020821081036200074457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200079857600081815260208120601f850160051c81016020861015620007735750805b601f850160051c820191505b8181101562000794578281556001016200077f565b5050505b505050565b81516001600160401b03811115620007b957620007b9620006f8565b620007d181620007ca84546200070e565b846200074a565b602080601f831160018114620008095760008415620007f05750858301515b600019600386901b1c1916600185901b17855562000794565b600085815260208120601f198616915b828110156200083a5788860151825594840194600190910190840162000819565b5085821015620008595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200087c57600080fd5b81516001600160a01b0381168114620006d757600080fd5b61267180620008a46000396000f3fe60806040526004361061024a5760003560e01c8063715018a6116101395780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e146106c1578063e1b450ad14610707578063f2fde38b14610727578063f66895a314610747578063f887ea4014610766578063fbe6324e1461078657600080fd5b80639e252f0014610611578063a457c2d714610631578063a8aa1b3114610651578063a9059cbb14610671578063c5d32bb21461069157600080fd5b806385141a77116100fd57806385141a77146105925780638cd4426d146105a85780638da5cb5b146105c85780638de890bd146105e657806395d89b41146105fc57600080fd5b8063715018a6146104e6578063728f8eea146104fb57806375f0a8741461051a57806379cc679014610552578063848b86e31461057257600080fd5b806340b28c2f116101c75780635331803c1161018b5780635331803c14610434578063652e2f041461046e57806366a88d96146104845780636aa5b37f1461049a57806370a08231146104b057600080fd5b806340b28c2f1461039257806342966c68146103b257806342b6fa11146103d257806348c34a60146103f25780634ada218b1461041357600080fd5b806318160ddd1161020e57806318160ddd1461030c5780631c1702f31461032157806323b872dd14610336578063313ce56714610356578063395093511461037257600080fd5b806306fdde0314610256578063095ea7b31461028157806310dfd37d146102b15780631340538f146102c85780631675d802146102e857600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b6107a7565b60405161027891906121af565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612212565b610839565b6040519015158152602001610278565b3480156102bd57600080fd5b506102c6610850565b005b3480156102d457600080fd5b506102c66102e336600461224c565b610a2a565b3480156102f457600080fd5b506102fe60095481565b604051908152602001610278565b34801561031857600080fd5b506002546102fe565b34801561032d57600080fd5b506102c6610a72565b34801561034257600080fd5b506102a1610351366004612270565b610b66565b34801561036257600080fd5b5060405160128152602001610278565b34801561037e57600080fd5b506102a161038d366004612212565b610c17565b34801561039e57600080fd5b506102c66103ad3660046122b1565b610c4e565b3480156103be57600080fd5b506102c66103cd3660046122ea565b610ca6565b3480156103de57600080fd5b506102c66103ed3660046122ea565b610cb3565b3480156103fe57600080fd5b506007546102a190600160b81b900460ff1681565b34801561041f57600080fd5b506007546102a190600160b01b900460ff1681565b34801561044057600080fd5b5060155460165460175461045392919083565b60408051938452602084019290925290820152606001610278565b34801561047a57600080fd5b506102fe600b5481565b34801561049057600080fd5b506102fe600c5481565b3480156104a657600080fd5b506102fe600a5481565b3480156104bc57600080fd5b506102fe6104cb366004612303565b6001600160a01b031660009081526020819052604090205490565b3480156104f257600080fd5b506102c6610d80565b34801561050757600080fd5b50600f5460105460115461045392919083565b34801561052657600080fd5b50600d5461053a906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561055e57600080fd5b506102c661056d366004612212565b610db6565b34801561057e57600080fd5b506102c661058d366004612303565b610dcf565b34801561059e57600080fd5b5061053a61dead81565b3480156105b457600080fd5b506102c66105c3366004612212565b610e7c565b3480156105d457600080fd5b506005546001600160a01b031661053a565b3480156105f257600080fd5b506102fe60085481565b34801561060857600080fd5b5061026b610f22565b34801561061d57600080fd5b506102c661062c3660046122ea565b610f31565b34801561063d57600080fd5b506102a161064c366004612212565b610f95565b34801561065d57600080fd5b5060075461053a906001600160a01b031681565b34801561067d57600080fd5b506102a161068c366004612212565b611030565b34801561069d57600080fd5b506102a16106ac366004612303565b60186020526000908152604090205460ff1681565b3480156106cd57600080fd5b506102fe6106dc3660046122b1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071357600080fd5b506102c6610722366004612320565b61103d565b34801561073357600080fd5b506102c6610742366004612303565b6111eb565b34801561075357600080fd5b5060125460135460145461045392919083565b34801561077257600080fd5b5060065461053a906001600160a01b031681565b34801561079257600080fd5b506007546102a190600160a81b900460ff1681565b6060600380546107b69061234c565b80601f01602080910402602001604051908101604052809291908181526020018280546107e29061234c565b801561082f5780601f106108045761010080835404028352916020019161082f565b820191906000526020600020905b81548152906001019060200180831161081257829003601f168201915b5050505050905090565b6000610846338484611283565b5060015b92915050565b6005546001600160a01b031633146108835760405162461bcd60e51b815260040161087a90612386565b60405180910390fd5b600754600160b01b900460ff166108d45760405162461bcd60e51b8152602060048201526015602482015274456e61626c652074726164696e672066697273742160581b604482015260640161087a565b600754600160b81b900460ff16156109225760405162461bcd60e51b8152602060048201526011602482015270416c726561647920656d706c6f7965642160781b604482015260640161087a565b600254600a55600254600b55600254600c55604080516060808201835260008083526020808401829052928401819052600f81905560108190556011819055835191820184528082529181018290529091018190526012819055601381905560145561098c610d80565b6007805460ff60b81b1916600160b81b179055600a54600b54600c54604080519384526020840192909252908201527f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d359060600160405180910390a1604080516000808252602082018190528183015290517f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b09289181900360600190a1565b6005546001600160a01b03163314610a545760405162461bcd60e51b815260040161087a90612386565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6005546001600160a01b03163314610a9c5760405162461bcd60e51b815260040161087a90612386565b600754600160b01b900460ff1615610af65760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e670000000000000000604482015260640161087a565b6007805461ffff60a81b191661010160a81b179055436008556040805160608082018352601380835260006020808501829052938501819052600f829055601081905560118190558451928301855260318084529383018190529190930181905260129190915590819055601455565b6000610b738484846113a7565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610bf85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161087a565b610c0c8533610c0786856123d1565b611283565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610846918590610c079086906123e4565b6005546001600160a01b03163314610c785760405162461bcd60e51b815260040161087a90612386565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b610cb0338261195b565b50565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b815260040161087a90612386565b62e4e1c08111158015610cf05750600081115b610d64576040805162461bcd60e51b81526020600482015260248101919091527f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060448201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e73606482015260840161087a565b610d706012600a6124db565b610d7a90826124ea565b60095550565b6005546001600160a01b03163314610daa5760405162461bcd60e51b815260040161087a90612386565b610db46000611a91565b565b610dc1823383611ae3565b610dcb828261195b565b5050565b600e546001600160a01b03163314610df95760405162461bcd60e51b815260040161087a90612501565b6001600160a01b038116610e5a5760405162461bcd60e51b815260206004820152602260248201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604482015261737360f01b606482015260840161087a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b03163314610ea65760405162461bcd60e51b815260040161087a90612501565b600e5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061252a565b505050565b6060600480546107b69061234c565b600e546001600160a01b03163314610f5b5760405162461bcd60e51b815260040161087a90612501565b600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610dcb573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110175760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161087a565b6110263385610c0786856123d1565b5060019392505050565b60006108463384846113a7565b6005546001600160a01b031633146110675760405162461bcd60e51b815260040161087a90612386565b620f42408310156110cc5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b606482015260840161087a565b620f42408210156111325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b606482015260840161087a565b624c4b4081101561119a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b606482015260840161087a565b6111a66012600a6124db565b6111b090846124ea565b600a5560126111c090600a6124db565b6111ca90836124ea565b600b556111d96012600a6124db565b6111e390826124ea565b600c55505050565b6005546001600160a01b031633146112155760405162461bcd60e51b815260040161087a90612386565b6001600160a01b03811661127a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087a565b610cb081611a91565b6001600160a01b0383166112e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161087a565b6001600160a01b0382166113465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161087a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081116114095760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161087a565b6001600160a01b03831660009081526018602052604090205460ff1615801561144b57506001600160a01b03821660009081526018602052604090205460ff16155b1561149f57600754600160b01b900460ff1661149f5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b604482015260640161087a565b6007546001600160a01b0384811691161480156114d557506001600160a01b03821660009081526018602052604090205460ff16155b80156114eb5750600754600160a01b900460ff16155b156115bd57600a548111156115425760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d6974000000604482015260640161087a565b600c5481611565846001600160a01b031660009081526020819052604090205490565b61156f91906123e4565b11156115bd5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161087a565b6007546001600160a01b038481169116148015906115f457506001600160a01b03821660009081526018602052604090205460ff16155b801561161957506001600160a01b03831660009081526018602052604090205460ff16155b801561162f5750600754600160a01b900460ff16155b1561171657600b548111156116865760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d69740000604482015260640161087a565b6007546001600160a01b0383811691161461171657600c54816116be846001600160a01b031660009081526020819052604090205490565b6116c891906123e4565b11156117165760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161087a565b600080600080600061174260405180606001604052806000815260200160008152602001600081525090565b600754600160a01b900460ff168061177257506001600160a01b03891660009081526018602052604090205460ff165b8061179557506001600160a01b03881660009081526018602052604090205460ff165b156117a35760009350611888565b6007546001600160a01b03908116908916036117f8576012546013546117c991906123e4565b601454604080516060810182526012548152601354602082015290810182905291975087965093509050611888565b6007546001600160a01b03908116908a160361184d57600f5460105461181e91906123e4565b60115460408051606081018252600f548152601054602082015290810182905291975087965093509050611888565b60155460165461185d91906123e4565b6017546040805160608101825260155481526016546020820152908101829052919750879650935090505b606461189486896124ea565b61189e9190612547565b935060646118ac84896124ea565b6118b69190612547565b600754909250600160a81b900460ff1680156118e057506007546001600160a01b038a8116911614155b156118ef576118ef8682611b75565b61190d89896118fe85886123e4565b611908908b6123d1565b611cb2565b811561191d5761191d898361195b565b83156119505785156119505760006064611937888a6124ea565b6119419190612547565b905061194e8a3083611cb2565b505b505050505050505050565b6001600160a01b0382166119bb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161087a565b6001600160a01b03821660009081526020819052604090205481811015611a2f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161087a565b6001600160a01b038316600081815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611b6f5781811015611b625760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161087a565b611b6f8484848403611283565b50505050565b600754600160a01b900460ff16610dcb576007805460ff60a01b1916600160a01b1790558115611ca157306000908152602081905260409020546009548110611c9f5760016009541115611bc857506009545b6000611bd58460026124ea565b9050600081846020015184611bea91906124ea565b611bf49190612547565b90506000611c0282856123d1565b905047611c0e82611e8a565b6000611c1a82476123d1565b90506000876020015186611c2e91906123d1565b611c389083612547565b90506000886020015182611c4c91906124ea565b90508015611c5e57611c5e8682611fe4565b8851600090611c6e8460026124ea565b611c7891906124ea565b90508015611c9657600d54611c96906001600160a01b031682612096565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b038316611d165760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161087a565b6001600160a01b038216611d785760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161087a565b6001600160a01b03831660009081526020819052604090205481811015611df05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161087a565b611dfa82826123d1565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611e309084906123e4565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e7c91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ebf57611ebf612569565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3c919061257f565b81600181518110611f4f57611f4f612569565b6001600160a01b039283166020918202929092010152600654611f759130911684611283565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fae90859060009086903090429060040161259c565b600060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b505050505050565b600654611ffc9030906001600160a01b031684611283565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561206a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061208f919061260d565b5050505050565b804710156120e65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161087a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612133576040519150601f19603f3d011682016040523d82523d6000602084013e612138565b606091505b5050905080610f1d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161087a565b600060208083528351808285015260005b818110156121dc578581018301518582016040015282016121c0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cb057600080fd5b6000806040838503121561222557600080fd5b8235612230816121fd565b946020939093013593505050565b8015158114610cb057600080fd5b60006020828403121561225e57600080fd5b81356122698161223e565b9392505050565b60008060006060848603121561228557600080fd5b8335612290816121fd565b925060208401356122a0816121fd565b929592945050506040919091013590565b600080604083850312156122c457600080fd5b82356122cf816121fd565b915060208301356122df816121fd565b809150509250929050565b6000602082840312156122fc57600080fd5b5035919050565b60006020828403121561231557600080fd5b8135612269816121fd565b60008060006060848603121561233557600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061236057607f821691505b60208210810361238057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561084a5761084a6123bb565b8082018082111561084a5761084a6123bb565b600181815b80851115612432578160001904821115612418576124186123bb565b8085161561242557918102915b93841c93908002906123fc565b509250929050565b6000826124495750600161084a565b816124565750600061084a565b816001811461246c576002811461247657612492565b600191505061084a565b60ff841115612487576124876123bb565b50506001821b61084a565b5060208310610133831016604e8410600b84101617156124b5575081810a61084a565b6124bf83836123f7565b80600019048211156124d3576124d36123bb565b029392505050565b600061226960ff84168361243a565b808202811582820484141761084a5761084a6123bb565b6020808252600f908201526e4e6f7420617574686f72697a65642160881b604082015260600190565b60006020828403121561253c57600080fd5b81516122698161223e565b60008261256457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561259157600080fd5b8151612269816121fd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125ec5784516001600160a01b0316835293830193918301916001016125c7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561262257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220caf86e6b8d1aa921ec631163ef0b1086ff033f550395499a416f14ddcc4e241f64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063715018a6116101395780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e146106c1578063e1b450ad14610707578063f2fde38b14610727578063f66895a314610747578063f887ea4014610766578063fbe6324e1461078657600080fd5b80639e252f0014610611578063a457c2d714610631578063a8aa1b3114610651578063a9059cbb14610671578063c5d32bb21461069157600080fd5b806385141a77116100fd57806385141a77146105925780638cd4426d146105a85780638da5cb5b146105c85780638de890bd146105e657806395d89b41146105fc57600080fd5b8063715018a6146104e6578063728f8eea146104fb57806375f0a8741461051a57806379cc679014610552578063848b86e31461057257600080fd5b806340b28c2f116101c75780635331803c1161018b5780635331803c14610434578063652e2f041461046e57806366a88d96146104845780636aa5b37f1461049a57806370a08231146104b057600080fd5b806340b28c2f1461039257806342966c68146103b257806342b6fa11146103d257806348c34a60146103f25780634ada218b1461041357600080fd5b806318160ddd1161020e57806318160ddd1461030c5780631c1702f31461032157806323b872dd14610336578063313ce56714610356578063395093511461037257600080fd5b806306fdde0314610256578063095ea7b31461028157806310dfd37d146102b15780631340538f146102c85780631675d802146102e857600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b6107a7565b60405161027891906121af565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612212565b610839565b6040519015158152602001610278565b3480156102bd57600080fd5b506102c6610850565b005b3480156102d457600080fd5b506102c66102e336600461224c565b610a2a565b3480156102f457600080fd5b506102fe60095481565b604051908152602001610278565b34801561031857600080fd5b506002546102fe565b34801561032d57600080fd5b506102c6610a72565b34801561034257600080fd5b506102a1610351366004612270565b610b66565b34801561036257600080fd5b5060405160128152602001610278565b34801561037e57600080fd5b506102a161038d366004612212565b610c17565b34801561039e57600080fd5b506102c66103ad3660046122b1565b610c4e565b3480156103be57600080fd5b506102c66103cd3660046122ea565b610ca6565b3480156103de57600080fd5b506102c66103ed3660046122ea565b610cb3565b3480156103fe57600080fd5b506007546102a190600160b81b900460ff1681565b34801561041f57600080fd5b506007546102a190600160b01b900460ff1681565b34801561044057600080fd5b5060155460165460175461045392919083565b60408051938452602084019290925290820152606001610278565b34801561047a57600080fd5b506102fe600b5481565b34801561049057600080fd5b506102fe600c5481565b3480156104a657600080fd5b506102fe600a5481565b3480156104bc57600080fd5b506102fe6104cb366004612303565b6001600160a01b031660009081526020819052604090205490565b3480156104f257600080fd5b506102c6610d80565b34801561050757600080fd5b50600f5460105460115461045392919083565b34801561052657600080fd5b50600d5461053a906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561055e57600080fd5b506102c661056d366004612212565b610db6565b34801561057e57600080fd5b506102c661058d366004612303565b610dcf565b34801561059e57600080fd5b5061053a61dead81565b3480156105b457600080fd5b506102c66105c3366004612212565b610e7c565b3480156105d457600080fd5b506005546001600160a01b031661053a565b3480156105f257600080fd5b506102fe60085481565b34801561060857600080fd5b5061026b610f22565b34801561061d57600080fd5b506102c661062c3660046122ea565b610f31565b34801561063d57600080fd5b506102a161064c366004612212565b610f95565b34801561065d57600080fd5b5060075461053a906001600160a01b031681565b34801561067d57600080fd5b506102a161068c366004612212565b611030565b34801561069d57600080fd5b506102a16106ac366004612303565b60186020526000908152604090205460ff1681565b3480156106cd57600080fd5b506102fe6106dc3660046122b1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071357600080fd5b506102c6610722366004612320565b61103d565b34801561073357600080fd5b506102c6610742366004612303565b6111eb565b34801561075357600080fd5b5060125460135460145461045392919083565b34801561077257600080fd5b5060065461053a906001600160a01b031681565b34801561079257600080fd5b506007546102a190600160a81b900460ff1681565b6060600380546107b69061234c565b80601f01602080910402602001604051908101604052809291908181526020018280546107e29061234c565b801561082f5780601f106108045761010080835404028352916020019161082f565b820191906000526020600020905b81548152906001019060200180831161081257829003601f168201915b5050505050905090565b6000610846338484611283565b5060015b92915050565b6005546001600160a01b031633146108835760405162461bcd60e51b815260040161087a90612386565b60405180910390fd5b600754600160b01b900460ff166108d45760405162461bcd60e51b8152602060048201526015602482015274456e61626c652074726164696e672066697273742160581b604482015260640161087a565b600754600160b81b900460ff16156109225760405162461bcd60e51b8152602060048201526011602482015270416c726561647920656d706c6f7965642160781b604482015260640161087a565b600254600a55600254600b55600254600c55604080516060808201835260008083526020808401829052928401819052600f81905560108190556011819055835191820184528082529181018290529091018190526012819055601381905560145561098c610d80565b6007805460ff60b81b1916600160b81b179055600a54600b54600c54604080519384526020840192909252908201527f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d359060600160405180910390a1604080516000808252602082018190528183015290517f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b09289181900360600190a1565b6005546001600160a01b03163314610a545760405162461bcd60e51b815260040161087a90612386565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6005546001600160a01b03163314610a9c5760405162461bcd60e51b815260040161087a90612386565b600754600160b01b900460ff1615610af65760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e670000000000000000604482015260640161087a565b6007805461ffff60a81b191661010160a81b179055436008556040805160608082018352601380835260006020808501829052938501819052600f829055601081905560118190558451928301855260318084529383018190529190930181905260129190915590819055601455565b6000610b738484846113a7565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610bf85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161087a565b610c0c8533610c0786856123d1565b611283565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610846918590610c079086906123e4565b6005546001600160a01b03163314610c785760405162461bcd60e51b815260040161087a90612386565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b610cb0338261195b565b50565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b815260040161087a90612386565b62e4e1c08111158015610cf05750600081115b610d64576040805162461bcd60e51b81526020600482015260248101919091527f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060448201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e73606482015260840161087a565b610d706012600a6124db565b610d7a90826124ea565b60095550565b6005546001600160a01b03163314610daa5760405162461bcd60e51b815260040161087a90612386565b610db46000611a91565b565b610dc1823383611ae3565b610dcb828261195b565b5050565b600e546001600160a01b03163314610df95760405162461bcd60e51b815260040161087a90612501565b6001600160a01b038116610e5a5760405162461bcd60e51b815260206004820152602260248201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604482015261737360f01b606482015260840161087a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b03163314610ea65760405162461bcd60e51b815260040161087a90612501565b600e5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061252a565b505050565b6060600480546107b69061234c565b600e546001600160a01b03163314610f5b5760405162461bcd60e51b815260040161087a90612501565b600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610dcb573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110175760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161087a565b6110263385610c0786856123d1565b5060019392505050565b60006108463384846113a7565b6005546001600160a01b031633146110675760405162461bcd60e51b815260040161087a90612386565b620f42408310156110cc5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b606482015260840161087a565b620f42408210156111325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b606482015260840161087a565b624c4b4081101561119a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b606482015260840161087a565b6111a66012600a6124db565b6111b090846124ea565b600a5560126111c090600a6124db565b6111ca90836124ea565b600b556111d96012600a6124db565b6111e390826124ea565b600c55505050565b6005546001600160a01b031633146112155760405162461bcd60e51b815260040161087a90612386565b6001600160a01b03811661127a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087a565b610cb081611a91565b6001600160a01b0383166112e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161087a565b6001600160a01b0382166113465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161087a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081116114095760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161087a565b6001600160a01b03831660009081526018602052604090205460ff1615801561144b57506001600160a01b03821660009081526018602052604090205460ff16155b1561149f57600754600160b01b900460ff1661149f5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b604482015260640161087a565b6007546001600160a01b0384811691161480156114d557506001600160a01b03821660009081526018602052604090205460ff16155b80156114eb5750600754600160a01b900460ff16155b156115bd57600a548111156115425760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d6974000000604482015260640161087a565b600c5481611565846001600160a01b031660009081526020819052604090205490565b61156f91906123e4565b11156115bd5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161087a565b6007546001600160a01b038481169116148015906115f457506001600160a01b03821660009081526018602052604090205460ff16155b801561161957506001600160a01b03831660009081526018602052604090205460ff16155b801561162f5750600754600160a01b900460ff16155b1561171657600b548111156116865760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d69740000604482015260640161087a565b6007546001600160a01b0383811691161461171657600c54816116be846001600160a01b031660009081526020819052604090205490565b6116c891906123e4565b11156117165760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161087a565b600080600080600061174260405180606001604052806000815260200160008152602001600081525090565b600754600160a01b900460ff168061177257506001600160a01b03891660009081526018602052604090205460ff165b8061179557506001600160a01b03881660009081526018602052604090205460ff165b156117a35760009350611888565b6007546001600160a01b03908116908916036117f8576012546013546117c991906123e4565b601454604080516060810182526012548152601354602082015290810182905291975087965093509050611888565b6007546001600160a01b03908116908a160361184d57600f5460105461181e91906123e4565b60115460408051606081018252600f548152601054602082015290810182905291975087965093509050611888565b60155460165461185d91906123e4565b6017546040805160608101825260155481526016546020820152908101829052919750879650935090505b606461189486896124ea565b61189e9190612547565b935060646118ac84896124ea565b6118b69190612547565b600754909250600160a81b900460ff1680156118e057506007546001600160a01b038a8116911614155b156118ef576118ef8682611b75565b61190d89896118fe85886123e4565b611908908b6123d1565b611cb2565b811561191d5761191d898361195b565b83156119505785156119505760006064611937888a6124ea565b6119419190612547565b905061194e8a3083611cb2565b505b505050505050505050565b6001600160a01b0382166119bb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161087a565b6001600160a01b03821660009081526020819052604090205481811015611a2f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161087a565b6001600160a01b038316600081815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611b6f5781811015611b625760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161087a565b611b6f8484848403611283565b50505050565b600754600160a01b900460ff16610dcb576007805460ff60a01b1916600160a01b1790558115611ca157306000908152602081905260409020546009548110611c9f5760016009541115611bc857506009545b6000611bd58460026124ea565b9050600081846020015184611bea91906124ea565b611bf49190612547565b90506000611c0282856123d1565b905047611c0e82611e8a565b6000611c1a82476123d1565b90506000876020015186611c2e91906123d1565b611c389083612547565b90506000886020015182611c4c91906124ea565b90508015611c5e57611c5e8682611fe4565b8851600090611c6e8460026124ea565b611c7891906124ea565b90508015611c9657600d54611c96906001600160a01b031682612096565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b038316611d165760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161087a565b6001600160a01b038216611d785760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161087a565b6001600160a01b03831660009081526020819052604090205481811015611df05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161087a565b611dfa82826123d1565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611e309084906123e4565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e7c91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ebf57611ebf612569565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3c919061257f565b81600181518110611f4f57611f4f612569565b6001600160a01b039283166020918202929092010152600654611f759130911684611283565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fae90859060009086903090429060040161259c565b600060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b505050505050565b600654611ffc9030906001600160a01b031684611283565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561206a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061208f919061260d565b5050505050565b804710156120e65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161087a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612133576040519150601f19603f3d011682016040523d82523d6000602084013e612138565b606091505b5050905080610f1d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161087a565b600060208083528351808285015260005b818110156121dc578581018301518582016040015282016121c0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cb057600080fd5b6000806040838503121561222557600080fd5b8235612230816121fd565b946020939093013593505050565b8015158114610cb057600080fd5b60006020828403121561225e57600080fd5b81356122698161223e565b9392505050565b60008060006060848603121561228557600080fd5b8335612290816121fd565b925060208401356122a0816121fd565b929592945050506040919091013590565b600080604083850312156122c457600080fd5b82356122cf816121fd565b915060208301356122df816121fd565b809150509250929050565b6000602082840312156122fc57600080fd5b5035919050565b60006020828403121561231557600080fd5b8135612269816121fd565b60008060006060848603121561233557600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061236057607f821691505b60208210810361238057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561084a5761084a6123bb565b8082018082111561084a5761084a6123bb565b600181815b80851115612432578160001904821115612418576124186123bb565b8085161561242557918102915b93841c93908002906123fc565b509250929050565b6000826124495750600161084a565b816124565750600061084a565b816001811461246c576002811461247657612492565b600191505061084a565b60ff841115612487576124876123bb565b50506001821b61084a565b5060208310610133831016604e8410600b84101617156124b5575081810a61084a565b6124bf83836123f7565b80600019048211156124d3576124d36123bb565b029392505050565b600061226960ff84168361243a565b808202811582820484141761084a5761084a6123bb565b6020808252600f908201526e4e6f7420617574686f72697a65642160881b604082015260600190565b60006020828403121561253c57600080fd5b81516122698161223e565b60008261256457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561259157600080fd5b8151612269816121fd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125ec5784516001600160a01b0316835293830193918301916001016125c7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561262257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220caf86e6b8d1aa921ec631163ef0b1086ff033f550395499a416f14ddcc4e241f64736f6c63430008130033

Deployed Bytecode Sourcemap

16051:11983:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2549:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18382:161;;;;;;;;;;-1:-1:-1;18382:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;18382:161:0;1023:187:1;27088:521:0;;;;;;;;;;;;;:::i;:::-;;25296:152;;;;;;;;;;-1:-1:-1;25296:152:0;;;;;:::i;:::-;;:::i;16407:67::-;;;;;;;;;;;;;;;;;;;1730:25:1;;;1718:2;1703:18;16407:67:0;1584:177:1;3669:108:0;;;;;;;;;;-1:-1:-1;3757:12:0;;3669:108;;25828:297;;;;;;;;;;;;;:::i;18551:448::-;;;;;;;;;;-1:-1:-1;18551:448:0;;;;;:::i;:::-;;:::i;3511:93::-;;;;;;;;;;-1:-1:-1;3511:93:0;;3594:2;2369:36:1;;2357:2;2342:18;3511:93:0;2227:184:1;19007:248:0;;;;;;;;;;-1:-1:-1;19007:248:0;;;;;:::i;:::-;;:::i;26133:155::-;;;;;;;;;;-1:-1:-1;26133:155:0;;;;;:::i;:::-;;:::i;15470:91::-;;;;;;;;;;-1:-1:-1;15470:91:0;;;;;:::i;:::-;;:::i;25456:307::-;;;;;;;;;;-1:-1:-1;25456:307:0;;;;;:::i;:::-;;:::i;16331:28::-;;;;;;;;;;-1:-1:-1;16331:28:0;;;;-1:-1:-1;;;16331:28:0;;;;;;16290:34;;;;;;;;;;-1:-1:-1;16290:34:0;;;;-1:-1:-1;;;16290:34:0;;;;;;17087:43;;;;;;;;;;-1:-1:-1;17087:43:0;;;;;;;;;;;;;;;;3196:25:1;;;3252:2;3237:18;;3230:34;;;;3280:18;;;3273:34;3184:2;3169:18;17087:43:0;2994:319:1;16544:56:0;;;;;;;;;;;;;;;;16607:59;;;;;;;;;;;;;;;;16481:56;;;;;;;;;;;;;;;;3840:127;;;;;;;;;;-1:-1:-1;3840:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3941:18:0;3914:7;3941:18;;;;;;;;;;;;3840:127;13754:94;;;;;;;;;;;;;:::i;16999:35::-;;;;;;;;;;-1:-1:-1;16999:35:0;;;;;;;;;;;;16675:75;;;;;;;;;;-1:-1:-1;16675:75:0;;;;-1:-1:-1;;;;;16675:75:0;;;;;;-1:-1:-1;;;;;3734:32:1;;;3716:51;;3704:2;3689:18;16675:75:0;3570:203:1;15880:164:0;;;;;;;;;;-1:-1:-1;15880:164:0;;;;;:::i;:::-;;:::i;26296:258::-;;;;;;;;;;-1:-1:-1;26296:258:0;;;;;:::i;:::-;;:::i;16803:79::-;;;;;;;;;;;;16840:42;16803:79;;27789:187;;;;;;;;;;-1:-1:-1;27789:187:0;;;;;:::i;:::-;;:::i;13531:87::-;;;;;;;;;;-1:-1:-1;13604:6:0;;-1:-1:-1;;;;;13604:6:0;13531:87;;16368:30;;;;;;;;;;;;;;;;2768:104;;;;;;;;;;;;;:::i;27617:164::-;;;;;;;;;;-1:-1:-1;27617:164:0;;;;;:::i;:::-;;:::i;19263:410::-;;;;;;;;;;-1:-1:-1;19263:410:0;;;;;:::i;:::-;;:::i;16179:19::-;;;;;;;;;;-1:-1:-1;16179:19:0;;;;-1:-1:-1;;;;;16179:19:0;;;19681:165;;;;;;;;;;-1:-1:-1;19681:165:0;;;;;:::i;:::-;;:::i;17139:41::-;;;;;;;;;;-1:-1:-1;17139:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4459:201;;;;;;;;;;-1:-1:-1;4459:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;4625:18:0;;;4593:7;4625:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4459:201;26562:518;;;;;;;;;;-1:-1:-1;26562:518:0;;;;;:::i;:::-;;:::i;13856:192::-;;;;;;;;;;-1:-1:-1;13856:192:0;;;;;:::i;:::-;;:::i;17041:39::-;;;;;;;;;;-1:-1:-1;17041:39:0;;;;;;;;;;;;16151:21;;;;;;;;;;-1:-1:-1;16151:21:0;;;;-1:-1:-1;;;;;16151:21:0;;;16245:38;;;;;;;;;;-1:-1:-1;16245:38:0;;;;-1:-1:-1;;;16245:38:0;;;;;;2549:100;2603:13;2636:5;2629:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2549:100;:::o;18382:161::-;18457:4;18474:39;351:10;18497:7;18506:6;18474:8;:39::i;:::-;-1:-1:-1;18531:4:0;18382:161;;;;;:::o;27088:521::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;;;;;;;;;27151:14:::1;::::0;-1:-1:-1;;;27151:14:0;::::1;;;27143:48;;;::::0;-1:-1:-1;;;27143:48:0;;5270:2:1;27143:48:0::1;::::0;::::1;5252:21:1::0;5309:2;5289:18;;;5282:30;-1:-1:-1;;;5328:18:1;;;5321:51;5389:18;;27143:48:0::1;5068:345:1::0;27143:48:0::1;27211:8;::::0;-1:-1:-1;;;27211:8:0;::::1;;;27210:9;27202:39;;;::::0;-1:-1:-1;;;27202:39:0;;5620:2:1;27202:39:0::1;::::0;::::1;5602:21:1::0;5659:2;5639:18;;;5632:30;-1:-1:-1;;;5678:18:1;;;5671:47;5735:18;;27202:39:0::1;5418:341:1::0;27202:39:0::1;3757:12:::0;;27252:11:::1;:27:::0;3757:12;;27290::::1;:28:::0;3757:12;;27329:14:::1;:30:::0;27380:14:::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;27380:14:0;;;::::1;::::0;;::::1;::::0;;;;;;;;;27372:5:::1;:22:::0;;;;;;;;;;;27417:14;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;27405:9:::1;:26:::0;;;;;;;;;27444:19:::1;:17;:19::i;:::-;27476:8;:15:::0;;-1:-1:-1;;;;27476:15:0::1;-1:-1:-1::0;;;27476:15:0::1;::::0;;27522:11:::1;::::0;27535:12:::1;::::0;27549:14:::1;::::0;27509:55:::1;::::0;;3196:25:1;;;3252:2;3237:18;;3230:34;;;;3280:18;;;3273:34;27509:55:0::1;::::0;3184:2:1;3169:18;27509:55:0::1;;;;;;;27580:21;::::0;;27593:1:::1;3196:25:1::0;;;3252:2;3237:18;;3230:34;;;3280:18;;;3273:34;27580:21:0;;::::1;::::0;;;;3184:2:1;27580:21:0;;::::1;27088:521::o:0;25296:152::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;25414:18:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;25414:26:0::1;-1:-1:-1::0;;;;25414:26:0;;::::1;::::0;;;::::1;::::0;;25296:152::o;25828:297::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;25891:14:::1;::::0;-1:-1:-1;;;25891:14:0;::::1;;;25890:15;25882:52;;;::::0;-1:-1:-1;;;25882:52:0;;6314:2:1;25882:52:0::1;::::0;::::1;6296:21:1::0;6353:2;6333:18;;;6326:30;6392:26;6372:18;;;6365:54;6436:18;;25882:52:0::1;6112:348:1::0;25882:52:0::1;25945:14;:21:::0;;-1:-1:-1;;;;25977:25:0;-1:-1:-1;;;25977:25:0;;;26031:12:::1;26013:15;:30:::0;26064:15:::1;::::0;;::::1;::::0;;::::1;::::0;;26070:2:::1;26064:15:::0;;;-1:-1:-1;26064:15:0::1;::::0;;::::1;::::0;;;;;;;;;26056:5:::1;:23:::0;;;;;;;;;;;26102:15;;;;::::1;::::0;;26108:2:::1;26102:15:::0;;;;;::::1;::::0;;;;;;;;;;26090:9:::1;:27:::0;;;;;;;;;;25828:297::o;18551:448::-;18683:4;18700:36;18710:6;18718:9;18729:6;18700:9;:36::i;:::-;-1:-1:-1;;;;;18776:19:0;;18749:24;18776:19;;;:11;:19;;;;;;;;351:10;18776:33;;;;;;;;18828:26;;;;18820:79;;;;-1:-1:-1;;;18820:79:0;;6667:2:1;18820:79:0;;;6649:21:1;6706:2;6686:18;;;6679:30;6745:34;6725:18;;;6718:62;-1:-1:-1;;;6796:18:1;;;6789:38;6844:19;;18820:79:0;6465:404:1;18820:79:0;18910:57;18919:6;351:10;18941:25;18960:6;18941:16;:25;:::i;:::-;18910:8;:57::i;:::-;-1:-1:-1;18987:4:0;;18551:448;-1:-1:-1;;;;18551:448:0:o;19007:248::-;351:10;19123:4;19177:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19177:34:0;;;;;;;;;;19123:4;;19145:80;;19168:7;;19177:47;;19214:10;;19177:47;:::i;26133:155::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;26228:6:::1;:27:::0;;-1:-1:-1;;;;;26228:27:0;;::::1;-1:-1:-1::0;;;;;;26228:27:0;;::::1;;::::0;;;26266:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;26133:155::o;15470:91::-;15526:27;351:10;15546:6;15526:5;:27::i;:::-;15470:91;:::o;25456:307::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;25594:10:::1;25580;:24;;:42;;;;;25621:1;25608:10;:14;25580:42;25572:119;;;::::0;;-1:-1:-1;;;25572:119:0;;7471:2:1;25572:119:0::1;::::0;::::1;7453:21:1::0;7490:18;;;7483:30;;;;7549:34;7529:18;;;7522:62;7620:34;7600:18;;;7593:62;7672:19;;25572:119:0::1;7269:428:1::0;25572:119:0::1;25741:14;3594:2:::0;25741::::1;:14;:::i;:::-;25728:27;::::0;:10;:27:::1;:::i;:::-;25702:23;:53:::0;-1:-1:-1;25456:307:0:o;13754:94::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;13819:21:::1;13837:1;13819:9;:21::i;:::-;13754:94::o:0;15880:164::-;15957:46;15973:7;351:10;15996:6;15957:15;:46::i;:::-;16014:22;16020:7;16029:6;16014:5;:22::i;:::-;15880:164;;:::o;26296:258::-;26386:8;;-1:-1:-1;;;;;26386:8:0;26372:10;:22;26364:50;;;;-1:-1:-1;;;26364:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26433:30:0;;26425:76;;;;-1:-1:-1;;;26425:76:0;;9804:2:1;26425:76:0;;;9786:21:1;9843:2;9823:18;;;9816:30;9882:34;9862:18;;;9855:62;-1:-1:-1;;;9933:18:1;;;9926:32;9975:19;;26425:76:0;9602:398:1;26425:76:0;26512:15;:34;;-1:-1:-1;;;;;;26512:34:0;-1:-1:-1;;;;;26512:34:0;;;;;;;;;;26296:258::o;27789:187::-;27886:8;;-1:-1:-1;;;;;27886:8:0;27872:10;:22;27864:50;;;;-1:-1:-1;;;27864:50:0;;;;;;;:::i;:::-;27951:8;;27925:43;;-1:-1:-1;;;27925:43:0;;-1:-1:-1;;;;;27951:8:0;;;27925:43;;;10179:51:1;10246:18;;;10239:34;;;27925:25:0;;;;;;10152:18:1;;27925:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27789:187;;:::o;2768:104::-;2824:13;2857:7;2850:14;;;;;:::i;27617:164::-;27697:8;;-1:-1:-1;;;;;27697:8:0;27683:10;:22;27675:50;;;;-1:-1:-1;;;27675:50:0;;;;;;;:::i;:::-;27744:8;;27736:37;;-1:-1:-1;;;;;27744:8:0;;;;27736:37;;;;;27763:9;;27744:8;27736:37;27744:8;27736:37;27763:9;27744:8;27736:37;;;;;;;;;;;;;;;;;;;19263:410;351:10;19384:4;19433:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19433:34:0;;;;;;;;;;19486:35;;;;19478:85;;;;-1:-1:-1;;;19478:85:0;;10736:2:1;19478:85:0;;;10718:21:1;10775:2;10755:18;;;10748:30;10814:34;10794:18;;;10787:62;-1:-1:-1;;;10865:18:1;;;10858:35;10910:19;;19478:85:0;10534:401:1;19478:85:0;19574:67;351:10;19597:7;19606:34;19625:15;19606:16;:34;:::i;19574:67::-;-1:-1:-1;19661:4:0;;19263:410;-1:-1:-1;;;19263:410:0:o;19681:165::-;19759:4;19776:40;19786:10;19798:9;19809:6;19776:9;:40::i;26562:518::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;26688:9:::1;26678:6;:19;;26670:73;;;::::0;-1:-1:-1;;;26670:73:0;;11142:2:1;26670:73:0::1;::::0;::::1;11124:21:1::0;11181:2;11161:18;;;11154:30;11220:34;11200:18;;;11193:62;-1:-1:-1;;;11271:18:1;;;11264:39;11320:19;;26670:73:0::1;10940:405:1::0;26670:73:0::1;26773:9;26762:7;:20;;26754:75;;;::::0;-1:-1:-1;;;26754:75:0;;11552:2:1;26754:75:0::1;::::0;::::1;11534:21:1::0;11591:2;11571:18;;;11564:30;11630:34;11610:18;;;11603:62;-1:-1:-1;;;11681:18:1;;;11674:40;11731:19;;26754:75:0::1;11350:406:1::0;26754:75:0::1;26861:9;26848;:22;;26840:79;;;::::0;-1:-1:-1;;;26840:79:0;;11963:2:1;26840:79:0::1;::::0;::::1;11945:21:1::0;12002:2;11982:18;;;11975:30;12041:34;12021:18;;;12014:62;-1:-1:-1;;;12092:18:1;;;12085:42;12144:19;;26840:79:0::1;11761:408:1::0;26840:79:0::1;26953:14;3594:2:::0;26953::::1;:14;:::i;:::-;26944:23;::::0;:6;:23:::1;:::i;:::-;26930:11;:37:::0;3594:2;27003:14:::1;::::0;:2:::1;:14;:::i;:::-;26993:24;::::0;:7;:24:::1;:::i;:::-;26978:12;:39:::0;27057:14:::1;3594:2:::0;27057::::1;:14;:::i;:::-;27045:26;::::0;:9;:26:::1;:::i;:::-;27028:14;:43:::0;-1:-1:-1;;;26562:518:0:o;13856:192::-;13604:6;;-1:-1:-1;;;;;13604:6:0;351:10;13666:23;13658:68;;;;-1:-1:-1;;;13658:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13945:22:0;::::1;13937:73;;;::::0;-1:-1:-1;;;13937:73:0;;12376:2:1;13937:73:0::1;::::0;::::1;12358:21:1::0;12415:2;12395:18;;;12388:30;12454:34;12434:18;;;12427:62;-1:-1:-1;;;12505:18:1;;;12498:36;12551:19;;13937:73:0::1;12174:402:1::0;13937:73:0::1;14021:19;14031:8;14021:9;:19::i;11179:380::-:0;-1:-1:-1;;;;;11315:19:0;;11307:68;;;;-1:-1:-1;;;11307:68:0;;12783:2:1;11307:68:0;;;12765:21:1;12822:2;12802:18;;;12795:30;12861:34;12841:18;;;12834:62;-1:-1:-1;;;12912:18:1;;;12905:34;12956:19;;11307:68:0;12581:400:1;11307:68:0;-1:-1:-1;;;;;11394:21:0;;11386:68;;;;-1:-1:-1;;;11386:68:0;;13188:2:1;11386:68:0;;;13170:21:1;13227:2;13207:18;;;13200:30;13266:34;13246:18;;;13239:62;-1:-1:-1;;;13317:18:1;;;13310:32;13359:19;;11386:68:0;12986:398:1;11386:68:0;-1:-1:-1;;;;;11467:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11519:32;;1730:25:1;;;11519:32:0;;1703:18:1;11519:32:0;;;;;;;11179:380;;;:::o;19854:2939::-;20004:1;19995:6;:10;19987:64;;;;-1:-1:-1;;;19987:64:0;;13591:2:1;19987:64:0;;;13573:21:1;13630:2;13610:18;;;13603:30;13669:34;13649:18;;;13642:62;-1:-1:-1;;;13720:18:1;;;13713:39;13769:19;;19987:64:0;13389:405:1;19987:64:0;-1:-1:-1;;;;;20069:17:0;;;;;;:9;:17;;;;;;;;20068:18;:43;;;;-1:-1:-1;;;;;;20091:20:0;;;;;;:9;:20;;;;;;;;20090:21;20068:43;20064:122;;;20136:14;;-1:-1:-1;;;20136:14:0;;;;20128:46;;;;-1:-1:-1;;;20128:46:0;;14001:2:1;20128:46:0;;;13983:21:1;14040:2;14020:18;;;14013:30;-1:-1:-1;;;14059:18:1;;;14052:49;14118:18;;20128:46:0;13799:343:1;20128:46:0;20212:4;;-1:-1:-1;;;;;20202:14:0;;;20212:4;;20202:14;:39;;;;-1:-1:-1;;;;;;20221:20:0;;;;;;:9;:20;;;;;;;;20220:21;20202:39;:54;;;;-1:-1:-1;20246:10:0;;-1:-1:-1;;;20246:10:0;;;;20245:11;20202:54;20198:306;;;20291:11;;20281:6;:21;;20273:63;;;;-1:-1:-1;;;20273:63:0;;14349:2:1;20273:63:0;;;14331:21:1;14388:2;14368:18;;;14361:30;14427:31;14407:18;;;14400:59;14476:18;;20273:63:0;14147:353:1;20273:63:0;20410:14;;20400:6;20377:20;20387:9;-1:-1:-1;;;;;3941:18:0;3914:7;3941:18;;;;;;;;;;;;3840:127;20377:20;:29;;;;:::i;:::-;:47;;20351:141;;;;-1:-1:-1;;;20351:141:0;;14707:2:1;20351:141:0;;;14689:21:1;;;14726:18;;;14719:30;14785:34;14765:18;;;14758:62;14837:18;;20351:141:0;14505:356:1;20351:141:0;20544:4;;-1:-1:-1;;;;;20534:14:0;;;20544:4;;20534:14;;;;:39;;-1:-1:-1;;;;;;20553:20:0;;;;;;:9;:20;;;;;;;;20552:21;20534:39;:61;;;;-1:-1:-1;;;;;;20578:17:0;;;;;;:9;:17;;;;;;;;20577:18;20534:61;:76;;;;-1:-1:-1;20600:10:0;;-1:-1:-1;;;20600:10:0;;;;20599:11;20534:76;20516:423;;;20655:12;;20645:6;:22;;20637:65;;;;-1:-1:-1;;;20637:65:0;;15068:2:1;20637:65:0;;;15050:21:1;15107:2;15087:18;;;15080:30;15146:32;15126:18;;;15119:60;15196:18;;20637:65:0;14866:354:1;20637:65:0;20734:4;;-1:-1:-1;;;;;20721:17:0;;;20734:4;;20721:17;20717:211;;20822:14;;20812:6;20789:20;20799:9;-1:-1:-1;;;;;3941:18:0;3914:7;3941:18;;;;;;;;;;;;3840:127;20789:20;:29;;;;:::i;:::-;:47;;20759:153;;;;-1:-1:-1;;;20759:153:0;;14707:2:1;20759:153:0;;;14689:21:1;;;14726:18;;;14719:30;14785:34;14765:18;;;14758:62;14837:18;;20759:153:0;14505:356:1;20759:153:0;20951:15;20977:14;21002:11;21024:15;21050:18;21079:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;21079:25:0;21192:10;;-1:-1:-1;;;21192:10:0;;;;;:31;;-1:-1:-1;;;;;;21206:17:0;;;;;;:9;:17;;;;;;;;21192:31;:55;;;-1:-1:-1;;;;;;21227:20:0;;;;;;:9;:20;;;;;;;;21192:55;21188:847;;;21268:1;21262:7;;21188:847;;;21333:4;;-1:-1:-1;;;;;21333:4:0;;;21320:17;;;;21316:719;;21420:9;:19;21381;;:58;;21420:19;21381:58;:::i;:::-;21495:14;;21524:24;;;;;;;;21495:9;21524:24;;;;;;;;;;;;;;;21354:85;;-1:-1:-1;21354:85:0;;-1:-1:-1;21495:14:0;-1:-1:-1;21524:24:0;-1:-1:-1;21316:719:0;;;21580:4;;-1:-1:-1;;;;;21580:4:0;;;21570:14;;;;21566:469;;21663:5;:15;21628;;:50;;21663:15;21628:50;:::i;:::-;21734:10;;21759:20;;;;;;;;21734:5;21759:20;;;;;;;;;;;;;;;21601:77;;-1:-1:-1;21601:77:0;;-1:-1:-1;21734:10:0;-1:-1:-1;21759:20:0;-1:-1:-1;21566:469:0;;;21882:13;:23;21839;;:66;;21882:23;21839:66;:::i;:::-;21962:18;;21995:28;;;;;;;;21962:13;21995:28;;;;;;;;;;;;;;;21812:93;;-1:-1:-1;21812:93:0;;-1:-1:-1;21962:18:0;-1:-1:-1;21995:28:0;-1:-1:-1;21566:469:0;22073:3;22054:15;22063:6;22054;:15;:::i;:::-;22053:23;;;;:::i;:::-;22047:29;-1:-1:-1;22121:3:0;22101:16;22110:7;22101:6;:16;:::i;:::-;22100:24;;;;:::i;:::-;22238:18;;22087:37;;-1:-1:-1;;;;22238:18:0;;;;:36;;;;-1:-1:-1;22270:4:0;;-1:-1:-1;;;;;22260:14:0;;;22270:4;;22260:14;;22238:36;22234:72;;;22276:30;22284:7;22293:12;22276:7;:30::i;:::-;22348:63;22364:6;22372:9;22393:16;22399:10;22393:3;:16;:::i;:::-;22383:27;;:6;:27;:::i;:::-;22348:15;:63::i;:::-;22453:14;;22450:77;;22484:31;22496:6;22504:10;22484:11;:31::i;:::-;22541:7;;22537:249;;22613:11;;22609:164;;22645:17;22686:3;22666:16;22675:7;22666:6;:16;:::i;:::-;22665:24;;;;:::i;:::-;22645:44;;22708:49;22724:6;22740:4;22747:9;22708:15;:49::i;:::-;22626:147;22609:164;19976:2817;;;;;;19854:2939;;;:::o;9997:744::-;-1:-1:-1;;;;;10081:21:0;;10073:67;;;;-1:-1:-1;;;10073:67:0;;15649:2:1;10073:67:0;;;15631:21:1;15688:2;15668:18;;;15661:30;15727:34;15707:18;;;15700:62;-1:-1:-1;;;15778:18:1;;;15771:31;15819:19;;10073:67:0;15447:397:1;10073:67:0;-1:-1:-1;;;;;10245:18:0;;10220:22;10245:18;;;;;;;;;;;10282:24;;;;10274:71;;;;-1:-1:-1;;;10274:71:0;;16051:2:1;10274:71:0;;;16033:21:1;16090:2;16070:18;;;16063:30;16129:34;16109:18;;;16102:62;-1:-1:-1;;;16180:18:1;;;16173:32;16222:19;;10274:71:0;15849:398:1;10274:71:0;-1:-1:-1;;;;;10381:18:0;;:9;:18;;;;;;;;;;;;10402:23;;;10381:44;;10520:12;:22;;;;;;;10625:42;;1730:25:1;;;10651:6:0;;10381:18;10625:42;;1703:18:1;10625:42:0;;;;;;;27925:43;27789:187;;:::o;14056:173::-;14131:6;;;-1:-1:-1;;;;;14148:17:0;;;-1:-1:-1;;;;;;14148:17:0;;;;;;;14181:40;;14131:6;;;14148:17;14131:6;;14181:40;;14112:16;;14181:40;14101:128;14056:173;:::o;5268:419::-;-1:-1:-1;;;;;4625:18:0;;;5369:24;4625:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;5436:37:0;;5432:248;;5518:6;5498:16;:26;;5490:68;;;;-1:-1:-1;;;5490:68:0;;16454:2:1;5490:68:0;;;16436:21:1;16493:2;16473:18;;;16466:30;16532:31;16512:18;;;16505:59;16581:18;;5490:68:0;16252:353:1;5490:68:0;5602:51;5611:5;5618:7;5646:6;5627:16;:25;5602:8;:51::i;:::-;5358:329;5268:419;;;:::o;22801:1437::-;17630:10;;-1:-1:-1;;;17630:10:0;;;;17625:110;;17657:10;:17;;-1:-1:-1;;;;17657:17:0;-1:-1:-1;;;17657:17:0;;;22892:49;;22923:7:::1;22892:49;22997:4;22953:23;3941:18:::0;;;;;;;;;;;23037:23:::1;::::0;23018:42;::::1;23014:1217;;23107:1;23081:23;;:27;23077:109;;;-1:-1:-1::0;23147:23:0::1;::::0;23077:109:::1;23257:19;23279:11;:7:::0;23289:1:::1;23279:11;:::i;:::-;23257:33;;23305:32;23399:11;23359:9;:19;;;23341:15;:37;;;;:::i;:::-;23340:70;;;;:::i;:::-;23305:105:::0;-1:-1:-1;23425:14:0::1;23442:42;23305:105:::0;23442:15;:42:::1;:::i;:::-;23425:59:::0;-1:-1:-1;23526:21:0::1;23564:24;23425:59:::0;23564:16:::1;:24::i;:::-;23605:20;23628:38;23652:14:::0;23628:21:::1;:38;:::i;:::-;23605:61;;23681:19;23733:9;:19;;;23719:11;:33;;;;:::i;:::-;23703:50;::::0;:12;:50:::1;:::i;:::-;23681:72;;23768:29;23814:9;:19;;;23800:11;:33;;;;:::i;:::-;23768:65:::0;-1:-1:-1;23854:25:0;;23850:172:::1;;23945:61;23958:24;23984:21;23945:12;:61::i;:::-;24079:19:::0;;24038:20:::1;::::0;24061:15:::1;:11:::0;24075:1:::1;24061:15;:::i;:::-;:37;;;;:::i;:::-;24038:60:::0;-1:-1:-1;24117:16:0;;24113:105:::1;;24162:15;::::0;24154:48:::1;::::0;-1:-1:-1;;;;;24162:15:0::1;24189:12:::0;24154:34:::1;:48::i;:::-;23062:1169;;;;;;;;23014:1217;22879:1359;17689:1;17705:10:::0;:18;;-1:-1:-1;;;;17705:18:0;;;22801:1437;;:::o;8683:578::-;-1:-1:-1;;;;;8823:20:0;;8815:70;;;;-1:-1:-1;;;8815:70:0;;16812:2:1;8815:70:0;;;16794:21:1;16851:2;16831:18;;;16824:30;16890:34;16870:18;;;16863:62;-1:-1:-1;;;16941:18:1;;;16934:35;16986:19;;8815:70:0;16610:401:1;8815:70:0;-1:-1:-1;;;;;8904:23:0;;8896:71;;;;-1:-1:-1;;;8896:71:0;;17218:2:1;8896:71:0;;;17200:21:1;17257:2;17237:18;;;17230:30;17296:34;17276:18;;;17269:62;-1:-1:-1;;;17347:18:1;;;17340:33;17390:19;;8896:71:0;17016:399:1;8896:71:0;-1:-1:-1;;;;;9004:17:0;;8980:21;9004:17;;;;;;;;;;;9040:23;;;;9032:74;;;;-1:-1:-1;;;9032:74:0;;17622:2:1;9032:74:0;;;17604:21:1;17661:2;17641:18;;;17634:30;17700:34;17680:18;;;17673:62;-1:-1:-1;;;17751:18:1;;;17744:36;17797:19;;9032:74:0;17420:402:1;9032:74:0;9137:22;9153:6;9137:13;:22;:::i;:::-;-1:-1:-1;;;;;9117:17:0;;;:9;:17;;;;;;;;;;;:42;;;;9170:20;;;;;;;;:30;;9194:6;;9117:9;9170:30;;9194:6;;9170:30;:::i;:::-;;;;;;;;9235:9;-1:-1:-1;;;;;9218:35:0;9227:6;-1:-1:-1;;;;;9218:35:0;;9246:6;9218:35;;;;1730:25:1;;1718:2;1703:18;;1584:177;9218:35:0;;;;;;;;8804:457;8683:578;;;:::o;24246:534::-;24396:16;;;24410:1;24396:16;;;;;;;;24372:21;;24396:16;;;;;;;;;;-1:-1:-1;24396:16:0;24372:40;;24441:4;24423;24428:1;24423:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24423:23:0;;;:7;;;;;;;;;;:23;;;;24467:6;;:13;;;-1:-1:-1;;;24467:13:0;;;;:6;;;;;:11;;:13;;;;;24423:7;;24467:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24457:4;24462:1;24457:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24457:23:0;;;:7;;;;;;;;;:23;24525:6;;24493:53;;24510:4;;24525:6;24534:11;24493:8;:53::i;:::-;24585:6;;:187;;-1:-1:-1;;;24585:187:0;;-1:-1:-1;;;;;24585:6:0;;;;:57;;:187;;24657:11;;24585:6;;24699:4;;24726;;24746:15;;24585:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24301:479;24246:534;:::o;24788:500::-;24968:6;;24936:53;;24953:4;;-1:-1:-1;;;;;24968:6:0;24977:11;24936:8;:53::i;:::-;25032:6;;:248;;-1:-1:-1;;;25032:248:0;;25097:4;25032:248;;;19673:34:1;19723:18;;;19716:34;;;25032:6:0;19766:18:1;;;19759:34;;;19809:18;;;19802:34;16840:42:0;19852:19:1;;;19845:44;25254:15:0;19905:19:1;;;19898:35;-1:-1:-1;;;;;25032:6:0;;;;:22;;25063:9;;19607:19:1;;25032:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24788:500;;:::o;12974:319::-;13089:6;13064:21;:31;;13056:73;;;;-1:-1:-1;;;13056:73:0;;20457:2:1;13056:73:0;;;20439:21:1;20496:2;20476:18;;;20469:30;20535:31;20515:18;;;20508:59;20584:18;;13056:73:0;20255:353:1;13056:73:0;13143:12;13161:9;-1:-1:-1;;;;;13161:14:0;13184:6;13161:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13142:54;;;13215:7;13207:78;;;;-1:-1:-1;;;13207:78:0;;21025:2:1;13207:78:0;;;21007:21:1;21064:2;21044:18;;;21037:30;21103:34;21083:18;;;21076:62;21174:28;21154:18;;;21147:56;21220:19;;13207:78:0;20823:422:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:241;1394:6;1447:2;1435:9;1426:7;1422:23;1418:32;1415:52;;;1463:1;1460;1453:12;1415:52;1502:9;1489:23;1521:28;1543:5;1521:28;:::i;:::-;1568:5;1338:241;-1:-1:-1;;;1338:241:1:o;1766:456::-;1843:6;1851;1859;1912:2;1900:9;1891:7;1887:23;1883:32;1880:52;;;1928:1;1925;1918:12;1880:52;1967:9;1954:23;1986:31;2011:5;1986:31;:::i;:::-;2036:5;-1:-1:-1;2093:2:1;2078:18;;2065:32;2106:33;2065:32;2106:33;:::i;:::-;1766:456;;2158:7;;-1:-1:-1;;;2212:2:1;2197:18;;;;2184:32;;1766:456::o;2416:388::-;2484:6;2492;2545:2;2533:9;2524:7;2520:23;2516:32;2513:52;;;2561:1;2558;2551:12;2513:52;2600:9;2587:23;2619:31;2644:5;2619:31;:::i;:::-;2669:5;-1:-1:-1;2726:2:1;2711:18;;2698:32;2739:33;2698:32;2739:33;:::i;:::-;2791:7;2781:17;;;2416:388;;;;;:::o;2809:180::-;2868:6;2921:2;2909:9;2900:7;2896:23;2892:32;2889:52;;;2937:1;2934;2927:12;2889:52;-1:-1:-1;2960:23:1;;2809:180;-1:-1:-1;2809:180:1:o;3318:247::-;3377:6;3430:2;3418:9;3409:7;3405:23;3401:32;3398:52;;;3446:1;3443;3436:12;3398:52;3485:9;3472:23;3504:31;3529:5;3504:31;:::i;3778:316::-;3855:6;3863;3871;3924:2;3912:9;3903:7;3899:23;3895:32;3892:52;;;3940:1;3937;3930:12;3892:52;-1:-1:-1;;3963:23:1;;;4033:2;4018:18;;4005:32;;-1:-1:-1;4084:2:1;4069:18;;;4056:32;;3778:316;-1:-1:-1;3778:316:1:o;4322:380::-;4401:1;4397:12;;;;4444;;;4465:61;;4519:4;4511:6;4507:17;4497:27;;4465:61;4572:2;4564:6;4561:14;4541:18;4538:38;4535:161;;4618:10;4613:3;4609:20;4606:1;4599:31;4653:4;4650:1;4643:15;4681:4;4678:1;4671:15;4535:161;;4322:380;;;:::o;4707:356::-;4909:2;4891:21;;;4928:18;;;4921:30;4987:34;4982:2;4967:18;;4960:62;5054:2;5039:18;;4707:356::o;6874:127::-;6935:10;6930:3;6926:20;6923:1;6916:31;6966:4;6963:1;6956:15;6990:4;6987:1;6980:15;7006:128;7073:9;;;7094:11;;;7091:37;;;7108:18;;:::i;7139:125::-;7204:9;;;7225:10;;;7222:36;;;7238:18;;:::i;7702:422::-;7791:1;7834:5;7791:1;7848:270;7869:7;7859:8;7856:21;7848:270;;;7928:4;7924:1;7920:6;7916:17;7910:4;7907:27;7904:53;;;7937:18;;:::i;:::-;7987:7;7977:8;7973:22;7970:55;;;8007:16;;;;7970:55;8086:22;;;;8046:15;;;;7848:270;;;7852:3;7702:422;;;;;:::o;8129:806::-;8178:5;8208:8;8198:80;;-1:-1:-1;8249:1:1;8263:5;;8198:80;8297:4;8287:76;;-1:-1:-1;8334:1:1;8348:5;;8287:76;8379:4;8397:1;8392:59;;;;8465:1;8460:130;;;;8372:218;;8392:59;8422:1;8413:10;;8436:5;;;8460:130;8497:3;8487:8;8484:17;8481:43;;;8504:18;;:::i;:::-;-1:-1:-1;;8560:1:1;8546:16;;8575:5;;8372:218;;8674:2;8664:8;8661:16;8655:3;8649:4;8646:13;8642:36;8636:2;8626:8;8623:16;8618:2;8612:4;8609:12;8605:35;8602:77;8599:159;;;-1:-1:-1;8711:19:1;;;8743:5;;8599:159;8790:34;8815:8;8809:4;8790:34;:::i;:::-;8860:6;8856:1;8852:6;8848:19;8839:7;8836:32;8833:58;;;8871:18;;:::i;:::-;8909:20;;8129:806;-1:-1:-1;;;8129:806:1:o;8940:140::-;8998:5;9027:47;9068:4;9058:8;9054:19;9048:4;9027:47;:::i;9085:168::-;9158:9;;;9189;;9206:15;;;9200:22;;9186:37;9176:71;;9227:18;;:::i;9258:339::-;9460:2;9442:21;;;9499:2;9479:18;;;9472:30;-1:-1:-1;;;9533:2:1;9518:18;;9511:45;9588:2;9573:18;;9258:339::o;10284:245::-;10351:6;10404:2;10392:9;10383:7;10379:23;10375:32;10372:52;;;10420:1;10417;10410:12;10372:52;10452:9;10446:16;10471:28;10493:5;10471:28;:::i;15225:217::-;15265:1;15291;15281:132;;15335:10;15330:3;15326:20;15323:1;15316:31;15370:4;15367:1;15360:15;15398:4;15395:1;15388:15;15281:132;-1:-1:-1;15427:9:1;;15225:217::o;17959:127::-;18020:10;18015:3;18011:20;18008:1;18001:31;18051:4;18048:1;18041:15;18075:4;18072:1;18065:15;18091:251;18161:6;18214:2;18202:9;18193:7;18189:23;18185:32;18182:52;;;18230:1;18227;18220:12;18182:52;18262:9;18256:16;18281:31;18306:5;18281:31;:::i;18347:980::-;18609:4;18657:3;18646:9;18642:19;18688:6;18677:9;18670:25;18714:2;18752:6;18747:2;18736:9;18732:18;18725:34;18795:3;18790:2;18779:9;18775:18;18768:31;18819:6;18854;18848:13;18885:6;18877;18870:22;18923:3;18912:9;18908:19;18901:26;;18962:2;18954:6;18950:15;18936:29;;18983:1;18993:195;19007:6;19004:1;19001:13;18993:195;;;19072:13;;-1:-1:-1;;;;;19068:39:1;19056:52;;19163:15;;;;19128:12;;;;19104:1;19022:9;18993:195;;;-1:-1:-1;;;;;;;19244:32:1;;;;19239:2;19224:18;;19217:60;-1:-1:-1;;;19308:3:1;19293:19;19286:35;19205:3;18347:980;-1:-1:-1;;;18347:980:1:o;19944:306::-;20032:6;20040;20048;20101:2;20089:9;20080:7;20076:23;20072:32;20069:52;;;20117:1;20114;20107:12;20069:52;20146:9;20140:16;20130:26;;20196:2;20185:9;20181:18;20175:25;20165:35;;20240:2;20229:9;20225:18;20219:25;20209:35;;19944:306;;;;;:::o

Swarm Source

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