ETH Price: $2,643.24 (+2.03%)

Token

Graph AI (GRAPHAI)
 

Overview

Max Total Supply

1,000,000,000 GRAPHAI

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,902,684.537468720036905175 GRAPHAI

Value
$0.00
0x7576876e73265ab493a35511e3fe41b6a3e0523c
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:
GRAPHAI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-09
*/

/*

GRAPHI AI
Find the Connections

Build complex, directed graphs to add structure to your
ideas using natural language. Understand the relationships 
between people, systems and text.

TELEGRAM: https://t.me/graph_AI
TWITTER:  https://twitter.com/GraphAIETH
WEBSITE:  https://graphai.tech

How to Use Video:
https://graphai.tech/graphai_example.m4v


*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.17;

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 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

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

    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"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

    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"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount)
        internal
        virtual
    {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership(bool confirmRenounce)
        external
        virtual
        onlyOwner
    {
        require(confirmRenounce, "Please confirm renounce!");
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

contract GRAPHAI is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

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

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

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 private originalSellOperationsFee;
    uint256 private originalSellLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

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

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

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

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() payable ERC20("Graph AI", "GRAPHAI") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;
        _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 20) / 1000; // 0.25%
        maxSellAmount = (totalSupply * 20) / 1000; // 0.25%
        maxWallet = (totalSupply * 20) / 1000; // 1.5%
        swapTokensAtAmount = (totalSupply * 2) / 10000; // 0.02 %

        buyOperationsFee = 12;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        originalSellOperationsFee = 25;
        originalSellLiquidityFee = 0;

        sellOperationsFee = 24; // increased sell tax at launch
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        operationsAddress = address(0x88aF5B00d73B505EFFf65122C992577Fc2531282);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(dexRouter), true);


    
        _createInitialSupply(newOwner, totalSupply); // Tokens for liquidity
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }


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

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 25) / 10000) / 1e18,
            "Cannot set max buy amount lower than 0.25%"
        );
        require(
            newNum <= ((totalSupply() * 2) / 100) / 1e18,
            "Cannot set buy sell amount higher than 2%"
        );
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 25) / 10000) / 1e18,
            "Cannot set max sell amount lower than 0.25%"
        );
        require(
            newNum <= ((totalSupply() * 2) / 100) / 1e18,
            "Cannot set max sell amount higher than 2%"
        );
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.5%"
        );
        require(
            newNum <= ((totalSupply() * 2) / 100) / 1e18,
            "Cannot set max wallet amount higher than 2%"
        );
        maxWallet = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded)
        private
    {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        external
        onlyOwner
    {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateFees(uint256 _operationsFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function restoreTaxes() external onlyOwner {
        buyOperationsFee = originalSellOperationsFee;
        buyLiquidityFee = originalSellLiquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = originalSellOperationsFee;
        sellLiquidityFee = originalSellLiquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;

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

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

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawContractETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function updateOpsWallet(address _operationsAddress)
        external
        onlyOwner
    {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    // remove limits after token is stable
    function removeTransactionLimits() external onlyOwner {
        limitsInEffect = false;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTransactionLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"updateOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d55600e805462ffffff191660019081179091556010805460ff191690911790556008608090815267477261706820414960c01b60a052610100604052600760c0908152664752415048414960c81b60e052600362000062838262000863565b50600462000071828262000863565b5050506000620000866200045b60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206200391a833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200012d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015391906200092f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dc91906200092f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025091906200092f565b600a80546001600160a01b0319166001600160a01b039290921691821790556200027c9060016200045f565b600a5462000295906001600160a01b03166001620004c2565b6b033b2e3c9fd0803ce80000006103e8620002b282601462000977565b620002be919062000997565b6006556103e8620002d182601462000977565b620002dd919062000997565b6007556103e8620002f082601462000977565b620002fc919062000997565b6008556127106200030f82600262000977565b6200031b919062000997565b600b55600c6012819055600060138190556200033791620009ba565b601155601960145560006015819055601860178190558181556200035c9190620009ba565b601655600c80546001600160a01b0319167388af5b00d73b505efff65122c992577fc2531282179055620003928360016200045f565b6200039f3060016200045f565b620003ae61dead60016200045f565b600c54620003c7906001600160a01b031660016200045f565b600954620003e0906001600160a01b031660016200045f565b620003ed8360016200052e565b620003fa3060016200052e565b6200040961dead60016200052e565b600c5462000422906001600160a01b031660016200052e565b6009546200043b906001600160a01b031660016200052e565b620004478382620005dc565b6200045283620006c1565b505050620009d0565b3390565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601d60205260409020805460ff1916821515179055620004f282826200045f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200057d5760405162461bcd60e51b81526020600482018190526024820152600080516020620038fa83398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006345760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000574565b8060026000828254620006489190620009ba565b90915550506001600160a01b0382166000908152602081905260408120805483929062000677908490620009ba565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200070c5760405162461bcd60e51b81526020600482018190526024820152600080516020620038fa833981519152604482015260640162000574565b6001600160a01b038116620007735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000574565b6005546040516001600160a01b038084169216906000805160206200391a83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007e957607f821691505b6020821081036200080a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200085e57600081815260208120601f850160051c81016020861015620008395750805b601f850160051c820191505b818110156200085a5782815560010162000845565b5050505b505050565b81516001600160401b038111156200087f576200087f620007be565b6200089781620008908454620007d4565b8462000810565b602080601f831160018114620008cf5760008415620008b65750858301515b600019600386901b1c1916600185901b1785556200085a565b600085815260208120601f198616915b828110156200090057888601518255948401946001909101908401620008df565b50858210156200091f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200094257600080fd5b81516001600160a01b03811681146200095a57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000991576200099162000961565b92915050565b600082620009b557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000991576200099162000961565b612f1a80620009e06000396000f3fe6080604052600436106103035760003560e01c806388e765ff11610190578063d257b34f116100dc578063ea4cfe1211610095578063f2fde38b1161006f578063f2fde38b146108db578063f6374342146108fb578063f8b45b0514610911578063fb002c971461092757600080fd5b8063ea4cfe121461088f578063ee40166e146108af578063f11a24d3146108c557600080fd5b8063d257b34f146107c8578063d85ba063146107e8578063dc3f0d0f146107fe578063dd62ed3e1461081e578063e2f4560514610864578063e884f2601461087a57600080fd5b8063a9059cbb11610149578063c024666811610123578063c024666814610759578063c18bc19514610779578063c1b207d514610799578063c876d0b9146107ae57600080fd5b8063a9059cbb146106ea578063b62496f51461070a578063bbc0c7421461073a57600080fd5b806388e765ff1461064c5780638a8c523c146106625780638da5cb5b1461067757806395d89b41146106955780639a7a23d6146106aa578063a457c2d7146106ca57600080fd5b80634a62bb651161024f5780636a486a8e1161020857806370a08231116101e257806370a08231146105b65780637571336a146105ec5780637e926b4b1461060c5780638366e79a1461062c57600080fd5b80636a486a8e146105605780636db79437146105765780636ddd17131461059657600080fd5b80634a62bb65146104da5780634f77f6c0146104f457806351f205e41461050a5780635a139dd41461051f5780635eed98e21461053557806366d602ae1461054a57600080fd5b80631c3909e6116102bc578063313ce56711610296578063313ce5671461046957806339509351146104855780633dd5b2da146104a5578063452ed4f1146104ba57600080fd5b80631c3909e61461040757806323b872dd146104295780632be32b611461044957600080fd5b806306fdde031461030f5780630758d9241461033a578063095ea7b31461037257806310d5de53146103a257806318160ddd146103d25780631a8145bb146103f157600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461093d565b6040516103319190612aac565b60405180910390f35b34801561034657600080fd5b5060095461035a906001600160a01b031681565b6040516001600160a01b039091168152602001610331565b34801561037e57600080fd5b5061039261038d366004612b12565b6109cf565b6040519015158152602001610331565b3480156103ae57600080fd5b506103926103bd366004612b3e565b601c6020526000908152604090205460ff1681565b3480156103de57600080fd5b506002545b604051908152602001610331565b3480156103fd57600080fd5b506103e3601a5481565b34801561041357600080fd5b50610427610422366004612b3e565b6109e6565b005b34801561043557600080fd5b50610392610444366004612b62565b610ac8565b34801561045557600080fd5b50610427610464366004612ba3565b610b72565b34801561047557600080fd5b5060405160128152602001610331565b34801561049157600080fd5b506103926104a0366004612b12565b610d14565b3480156104b157600080fd5b50610427610d50565b3480156104c657600080fd5b50600a5461035a906001600160a01b031681565b3480156104e657600080fd5b50600e546103929060ff1681565b34801561050057600080fd5b506103e360175481565b34801561051657600080fd5b50610427610dc7565b34801561052b57600080fd5b506103e360125481565b34801561054157600080fd5b50610427610ed7565b34801561055657600080fd5b506103e360075481565b34801561056c57600080fd5b506103e360165481565b34801561058257600080fd5b50610427610591366004612bbc565b610f3b565b3480156105a257600080fd5b50600e546103929062010000900460ff1681565b3480156105c257600080fd5b506103e36105d1366004612b3e565b6001600160a01b031660009081526020819052604090205490565b3480156105f857600080fd5b50610427610607366004612bec565b610fd2565b34801561061857600080fd5b50610427610627366004612c25565b61109a565b34801561063857600080fd5b50610392610647366004612c42565b61115c565b34801561065857600080fd5b506103e360065481565b34801561066e57600080fd5b50610427611396565b34801561068357600080fd5b506005546001600160a01b031661035a565b3480156106a157600080fd5b50610324611458565b3480156106b657600080fd5b506104276106c5366004612bec565b611467565b3480156106d657600080fd5b506103926106e5366004612b12565b61155b565b3480156106f657600080fd5b50610392610705366004612b12565b6115f4565b34801561071657600080fd5b50610392610725366004612b3e565b601d6020526000908152604090205460ff1681565b34801561074657600080fd5b50600e5461039290610100900460ff1681565b34801561076557600080fd5b50610427610774366004612bec565b611601565b34801561078557600080fd5b50610427610794366004612ba3565b61168a565b3480156107a557600080fd5b50610427611829565b3480156107ba57600080fd5b506010546103929060ff1681565b3480156107d457600080fd5b506104276107e3366004612ba3565b61185f565b3480156107f457600080fd5b506103e360115481565b34801561080a57600080fd5b50610427610819366004612ba3565b6119aa565b34801561082a57600080fd5b506103e3610839366004612c42565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561087057600080fd5b506103e3600b5481565b34801561088657600080fd5b50610427611b46565b34801561089b57600080fd5b50600c5461035a906001600160a01b031681565b3480156108bb57600080fd5b506103e3600d5481565b3480156108d157600080fd5b506103e360135481565b3480156108e757600080fd5b506104276108f6366004612b3e565b611b7c565b34801561090757600080fd5b506103e360185481565b34801561091d57600080fd5b506103e360085481565b34801561093357600080fd5b506103e360195481565b60606003805461094c90612c70565b80601f016020809104026020016040519081016040528092919081815260200182805461097890612c70565b80156109c55780601f1061099a576101008083540402835291602001916109c5565b820191906000526020600020905b8154815290600101906020018083116109a857829003601f168201915b5050505050905090565b60006109dc338484611c67565b5060015b92915050565b6005546001600160a01b03163314610a195760405162461bcd60e51b8152600401610a1090612caa565b60405180910390fd5b6001600160a01b038116610a7e5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610a10565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6000610ad5848484611d8b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b5a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a10565b610b678533858403611c67565b506001949350505050565b6005546001600160a01b03163314610b9c5760405162461bcd60e51b8152600401610a1090612caa565b670de0b6b3a7640000612710610bb160025490565b610bbc906019612cf5565b610bc69190612d0c565b610bd09190612d0c565b811015610c325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e32352560b01b6064820152608401610a10565b670de0b6b3a76400006064610c4660025490565b610c51906002612cf5565b610c5b9190612d0c565b610c659190612d0c565b811115610cc65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610a10565b610cd881670de0b6b3a7640000612cf5565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109dc918590610d4b908690612d2e565b611c67565b6005546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610a1090612caa565b604051600090339047908381818185875af1925050503d8060008114610dbc576040519150601f19603f3d011682016040523d82523d6000602084013e610dc1565b606091505b50505050565b6005546001600160a01b03163314610df15760405162461bcd60e51b8152600401610a1090612caa565b600b54306000908152602081905260409020541015610e7a576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610a10565b600a805460ff60a01b1916600160a01b179055610e95612530565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b03163314610f015760405162461bcd60e51b8152600401610a1090612caa565b60145460128190556015546013819055610f1a91612d2e565b60115560145460178190556015546018819055610f3691612d2e565b601655565b6005546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a1090612caa565b60178290556018819055610f798183612d2e565b601681905560141015610fce5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610a10565b5050565b6005546001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610a1090612caa565b8061106f57600a546001600160a01b039081169083160361106f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a10565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110c45760405162461bcd60e51b8152600401610a1090612caa565b806111115760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610a10565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546000906001600160a01b031633146111895760405162461bcd60e51b8152600401610a1090612caa565b6001600160a01b0383166111df5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a10565b6001600160a01b038316301415806111ff5750600e54610100900460ff16155b6112685760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610a10565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d39190612d41565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190612d5a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146113c05760405162461bcd60e51b8152600401610a1090612caa565b600e54610100900460ff16156114185760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610a10565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60606004805461094c90612c70565b6005546001600160a01b031633146114915760405162461bcd60e51b8152600401610a1090612caa565b600a546001600160a01b03908116908316036115155760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a10565b61151f8282612697565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a10565b6115ea3385858403611c67565b5060019392505050565b60006109dc338484611d8b565b6005546001600160a01b0316331461162b5760405162461bcd60e51b8152600401610a1090612caa565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116b45760405162461bcd60e51b8152600401610a1090612caa565b670de0b6b3a76400006103e86116c960025490565b6116d4906005612cf5565b6116de9190612d0c565b6116e89190612d0c565b81101561174c5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610a10565b670de0b6b3a7640000606461176060025490565b61176b906002612cf5565b6117759190612d0c565b61177f9190612d0c565b8111156117e25760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610a10565b6117f481670de0b6b3a7640000612cf5565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d09565b6005546001600160a01b031633146118535760405162461bcd60e51b8152600401610a1090612caa565b600e805460ff19169055565b6005546001600160a01b031633146118895760405162461bcd60e51b8152600401610a1090612caa565b620186a061189660025490565b6118a1906001612cf5565b6118ab9190612d0c565b8110156119185760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a10565b6103e861192460025490565b61192f906001612cf5565b6119399190612d0c565b8111156119a55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610a10565b600b55565b6005546001600160a01b031633146119d45760405162461bcd60e51b8152600401610a1090612caa565b670de0b6b3a76400006127106119e960025490565b6119f4906019612cf5565b6119fe9190612d0c565b611a089190612d0c565b811015611a6b5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e32352560a81b6064820152608401610a10565b670de0b6b3a76400006064611a7f60025490565b611a8a906002612cf5565b611a949190612d0c565b611a9e9190612d0c565b811115611aff5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610a10565b611b1181670de0b6b3a7640000612cf5565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d09565b6005546001600160a01b03163314611b705760405162461bcd60e51b8152600401610a1090612caa565b6010805460ff19169055565b6005546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610a1090612caa565b6001600160a01b038116611c0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a10565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611cc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a10565b6001600160a01b038216611d2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a10565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611db15760405162461bcd60e51b8152600401610a1090612d77565b6001600160a01b038216611dd75760405162461bcd60e51b8152600401610a1090612dbc565b60008111611e275760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a10565b600e54610100900460ff16611eba576001600160a01b0383166000908152601b602052604090205460ff1680611e7557506001600160a01b0382166000908152601b602052604090205460ff165b611eba5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a10565b600e5460ff16156122b8576005546001600160a01b03848116911614801590611ef157506005546001600160a01b03838116911614155b8015611f0857506001600160a01b03821661dead14155b8015611f2d57506001600160a01b0383166000908152601b602052604090205460ff16155b8015611f5257506001600160a01b0382166000908152601b602052604090205460ff16155b156122b85760105460ff161561206b576009546001600160a01b03838116911614801590611f8e5750600a546001600160a01b03838116911614155b1561206b57611f9e600243612dff565b326000908152600f6020526040902054108015611fdc5750611fc1600243612dff565b6001600160a01b0383166000908152600f6020526040902054105b6120465760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610a10565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601d602052604090205460ff1680156120ac57506001600160a01b0382166000908152601c602052604090205460ff16155b15612183576006548111156121145760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610a10565b6008546001600160a01b03831660009081526020819052604090205461213a9083612d2e565b111561217e5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610a10565b6122b8565b6001600160a01b0382166000908152601d602052604090205460ff1680156121c457506001600160a01b0383166000908152601c602052604090205460ff16155b1561222e5760075481111561217e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610a10565b6001600160a01b0382166000908152601c602052604090205460ff166122b8576008546001600160a01b0383166000908152602081905260409020546122749083612d2e565b11156122b85760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610a10565b30600090815260208190526040902054600b54811080159081906122e45750600e5462010000900460ff165b80156122fa5750600a54600160a01b900460ff16155b801561231e57506001600160a01b0384166000908152601d602052604090205460ff165b1561234c57600a805460ff60a01b1916600160a01b17905561233e612530565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601b602052604090205460019060ff168061238e57506001600160a01b0385166000908152601b602052604090205460ff165b15612397575060005b6000811561251c576001600160a01b0386166000908152601d602052604090205460ff1680156123c957506000601654115b15612451576064601654866123de9190612cf5565b6123e89190612d0c565b9050601654601854826123fb9190612cf5565b6124059190612d0c565b601a60008282546124169190612d2e565b909155505060165460175461242b9083612cf5565b6124359190612d0c565b601960008282546124469190612d2e565b909155506124fe9050565b6001600160a01b0387166000908152601d602052604090205460ff16801561247b57506000601154115b156124fe576064601154866124909190612cf5565b61249a9190612d0c565b9050601154601354826124ad9190612cf5565b6124b79190612d0c565b601a60008282546124c89190612d2e565b90915550506011546012546124dd9083612cf5565b6124e79190612d0c565b601960008282546124f89190612d2e565b90915550505b801561250f5761250f8730836126c5565b6125198186612dff565b94505b6125278787876126c5565b50505050505050565b3060009081526020819052604081205490506000601954601a546125549190612d2e565b9050811580612561575080155b1561256a575050565b600b5461257890600a612cf5565b82111561259057600b5461258d90600a612cf5565b91505b600080600283601a54866125a49190612cf5565b6125ae9190612d0c565b6125b89190612d0c565b90506125cc6125c78286612dff565b61281a565b601a54479081906000906125e290600290612d0c565b6125ec9087612dff565b6019546125f99085612cf5565b6126039190612d0c565b905061260f8183612dff565b6000601a8190556019559150831580159061262a5750600082115b15612639576126398483612974565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612686576040519150601f19603f3d011682016040523d82523d6000602084013e61268b565b606091505b50505050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff191682151517905561151f8282612a49565b6001600160a01b0383166126eb5760405162461bcd60e51b8152600401610a1090612d77565b6001600160a01b0382166127115760405162461bcd60e51b8152600401610a1090612dbc565b6001600160a01b038316600090815260208190526040902054818110156127895760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a10565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906127c0908490612d2e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161280c91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061284f5761284f612e12565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190612e28565b816001815181106128df576128df612e12565b6001600160a01b0392831660209182029290920101526009546129059130911684611c67565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061293e908590600090869030904290600401612e45565b600060405180830381600087803b15801561295857600080fd5b505af115801561296c573d6000803e3d6000fd5b505050505050565b60095461298c9030906001600160a01b031684611c67565b6009546001600160a01b031663f305d7198230856000806129b56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a1d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a429190612eb6565b5050505050565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612ad957858101830151858201604001528201612abd565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612b0f57600080fd5b50565b60008060408385031215612b2557600080fd5b8235612b3081612afa565b946020939093013593505050565b600060208284031215612b5057600080fd5b8135612b5b81612afa565b9392505050565b600080600060608486031215612b7757600080fd5b8335612b8281612afa565b92506020840135612b9281612afa565b929592945050506040919091013590565b600060208284031215612bb557600080fd5b5035919050565b60008060408385031215612bcf57600080fd5b50508035926020909101359150565b8015158114612b0f57600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612afa565b91506020830135612c1a81612bde565b809150509250929050565b600060208284031215612c3757600080fd5b8135612b5b81612bde565b60008060408385031215612c5557600080fd5b8235612c6081612afa565b91506020830135612c1a81612afa565b600181811c90821680612c8457607f821691505b602082108103612ca457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109e0576109e0612cdf565b600082612d2957634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109e0576109e0612cdf565b600060208284031215612d5357600080fd5b5051919050565b600060208284031215612d6c57600080fd5b8151612b5b81612bde565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109e0576109e0612cdf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e3a57600080fd5b8151612b5b81612afa565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e955784516001600160a01b031683529383019391830191600101612e70565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ecb57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220942b79888642e18b723f94c9dd37f1b8120e452bca5d94c8ab94f623f59b027a64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103035760003560e01c806388e765ff11610190578063d257b34f116100dc578063ea4cfe1211610095578063f2fde38b1161006f578063f2fde38b146108db578063f6374342146108fb578063f8b45b0514610911578063fb002c971461092757600080fd5b8063ea4cfe121461088f578063ee40166e146108af578063f11a24d3146108c557600080fd5b8063d257b34f146107c8578063d85ba063146107e8578063dc3f0d0f146107fe578063dd62ed3e1461081e578063e2f4560514610864578063e884f2601461087a57600080fd5b8063a9059cbb11610149578063c024666811610123578063c024666814610759578063c18bc19514610779578063c1b207d514610799578063c876d0b9146107ae57600080fd5b8063a9059cbb146106ea578063b62496f51461070a578063bbc0c7421461073a57600080fd5b806388e765ff1461064c5780638a8c523c146106625780638da5cb5b1461067757806395d89b41146106955780639a7a23d6146106aa578063a457c2d7146106ca57600080fd5b80634a62bb651161024f5780636a486a8e1161020857806370a08231116101e257806370a08231146105b65780637571336a146105ec5780637e926b4b1461060c5780638366e79a1461062c57600080fd5b80636a486a8e146105605780636db79437146105765780636ddd17131461059657600080fd5b80634a62bb65146104da5780634f77f6c0146104f457806351f205e41461050a5780635a139dd41461051f5780635eed98e21461053557806366d602ae1461054a57600080fd5b80631c3909e6116102bc578063313ce56711610296578063313ce5671461046957806339509351146104855780633dd5b2da146104a5578063452ed4f1146104ba57600080fd5b80631c3909e61461040757806323b872dd146104295780632be32b611461044957600080fd5b806306fdde031461030f5780630758d9241461033a578063095ea7b31461037257806310d5de53146103a257806318160ddd146103d25780631a8145bb146103f157600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461093d565b6040516103319190612aac565b60405180910390f35b34801561034657600080fd5b5060095461035a906001600160a01b031681565b6040516001600160a01b039091168152602001610331565b34801561037e57600080fd5b5061039261038d366004612b12565b6109cf565b6040519015158152602001610331565b3480156103ae57600080fd5b506103926103bd366004612b3e565b601c6020526000908152604090205460ff1681565b3480156103de57600080fd5b506002545b604051908152602001610331565b3480156103fd57600080fd5b506103e3601a5481565b34801561041357600080fd5b50610427610422366004612b3e565b6109e6565b005b34801561043557600080fd5b50610392610444366004612b62565b610ac8565b34801561045557600080fd5b50610427610464366004612ba3565b610b72565b34801561047557600080fd5b5060405160128152602001610331565b34801561049157600080fd5b506103926104a0366004612b12565b610d14565b3480156104b157600080fd5b50610427610d50565b3480156104c657600080fd5b50600a5461035a906001600160a01b031681565b3480156104e657600080fd5b50600e546103929060ff1681565b34801561050057600080fd5b506103e360175481565b34801561051657600080fd5b50610427610dc7565b34801561052b57600080fd5b506103e360125481565b34801561054157600080fd5b50610427610ed7565b34801561055657600080fd5b506103e360075481565b34801561056c57600080fd5b506103e360165481565b34801561058257600080fd5b50610427610591366004612bbc565b610f3b565b3480156105a257600080fd5b50600e546103929062010000900460ff1681565b3480156105c257600080fd5b506103e36105d1366004612b3e565b6001600160a01b031660009081526020819052604090205490565b3480156105f857600080fd5b50610427610607366004612bec565b610fd2565b34801561061857600080fd5b50610427610627366004612c25565b61109a565b34801561063857600080fd5b50610392610647366004612c42565b61115c565b34801561065857600080fd5b506103e360065481565b34801561066e57600080fd5b50610427611396565b34801561068357600080fd5b506005546001600160a01b031661035a565b3480156106a157600080fd5b50610324611458565b3480156106b657600080fd5b506104276106c5366004612bec565b611467565b3480156106d657600080fd5b506103926106e5366004612b12565b61155b565b3480156106f657600080fd5b50610392610705366004612b12565b6115f4565b34801561071657600080fd5b50610392610725366004612b3e565b601d6020526000908152604090205460ff1681565b34801561074657600080fd5b50600e5461039290610100900460ff1681565b34801561076557600080fd5b50610427610774366004612bec565b611601565b34801561078557600080fd5b50610427610794366004612ba3565b61168a565b3480156107a557600080fd5b50610427611829565b3480156107ba57600080fd5b506010546103929060ff1681565b3480156107d457600080fd5b506104276107e3366004612ba3565b61185f565b3480156107f457600080fd5b506103e360115481565b34801561080a57600080fd5b50610427610819366004612ba3565b6119aa565b34801561082a57600080fd5b506103e3610839366004612c42565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561087057600080fd5b506103e3600b5481565b34801561088657600080fd5b50610427611b46565b34801561089b57600080fd5b50600c5461035a906001600160a01b031681565b3480156108bb57600080fd5b506103e3600d5481565b3480156108d157600080fd5b506103e360135481565b3480156108e757600080fd5b506104276108f6366004612b3e565b611b7c565b34801561090757600080fd5b506103e360185481565b34801561091d57600080fd5b506103e360085481565b34801561093357600080fd5b506103e360195481565b60606003805461094c90612c70565b80601f016020809104026020016040519081016040528092919081815260200182805461097890612c70565b80156109c55780601f1061099a576101008083540402835291602001916109c5565b820191906000526020600020905b8154815290600101906020018083116109a857829003601f168201915b5050505050905090565b60006109dc338484611c67565b5060015b92915050565b6005546001600160a01b03163314610a195760405162461bcd60e51b8152600401610a1090612caa565b60405180910390fd5b6001600160a01b038116610a7e5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610a10565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6000610ad5848484611d8b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b5a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a10565b610b678533858403611c67565b506001949350505050565b6005546001600160a01b03163314610b9c5760405162461bcd60e51b8152600401610a1090612caa565b670de0b6b3a7640000612710610bb160025490565b610bbc906019612cf5565b610bc69190612d0c565b610bd09190612d0c565b811015610c325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e32352560b01b6064820152608401610a10565b670de0b6b3a76400006064610c4660025490565b610c51906002612cf5565b610c5b9190612d0c565b610c659190612d0c565b811115610cc65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610a10565b610cd881670de0b6b3a7640000612cf5565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109dc918590610d4b908690612d2e565b611c67565b6005546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610a1090612caa565b604051600090339047908381818185875af1925050503d8060008114610dbc576040519150601f19603f3d011682016040523d82523d6000602084013e610dc1565b606091505b50505050565b6005546001600160a01b03163314610df15760405162461bcd60e51b8152600401610a1090612caa565b600b54306000908152602081905260409020541015610e7a576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610a10565b600a805460ff60a01b1916600160a01b179055610e95612530565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b03163314610f015760405162461bcd60e51b8152600401610a1090612caa565b60145460128190556015546013819055610f1a91612d2e565b60115560145460178190556015546018819055610f3691612d2e565b601655565b6005546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a1090612caa565b60178290556018819055610f798183612d2e565b601681905560141015610fce5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610a10565b5050565b6005546001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610a1090612caa565b8061106f57600a546001600160a01b039081169083160361106f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a10565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110c45760405162461bcd60e51b8152600401610a1090612caa565b806111115760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610a10565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546000906001600160a01b031633146111895760405162461bcd60e51b8152600401610a1090612caa565b6001600160a01b0383166111df5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a10565b6001600160a01b038316301415806111ff5750600e54610100900460ff16155b6112685760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610a10565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d39190612d41565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190612d5a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146113c05760405162461bcd60e51b8152600401610a1090612caa565b600e54610100900460ff16156114185760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610a10565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60606004805461094c90612c70565b6005546001600160a01b031633146114915760405162461bcd60e51b8152600401610a1090612caa565b600a546001600160a01b03908116908316036115155760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a10565b61151f8282612697565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a10565b6115ea3385858403611c67565b5060019392505050565b60006109dc338484611d8b565b6005546001600160a01b0316331461162b5760405162461bcd60e51b8152600401610a1090612caa565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116b45760405162461bcd60e51b8152600401610a1090612caa565b670de0b6b3a76400006103e86116c960025490565b6116d4906005612cf5565b6116de9190612d0c565b6116e89190612d0c565b81101561174c5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610a10565b670de0b6b3a7640000606461176060025490565b61176b906002612cf5565b6117759190612d0c565b61177f9190612d0c565b8111156117e25760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610a10565b6117f481670de0b6b3a7640000612cf5565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d09565b6005546001600160a01b031633146118535760405162461bcd60e51b8152600401610a1090612caa565b600e805460ff19169055565b6005546001600160a01b031633146118895760405162461bcd60e51b8152600401610a1090612caa565b620186a061189660025490565b6118a1906001612cf5565b6118ab9190612d0c565b8110156119185760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a10565b6103e861192460025490565b61192f906001612cf5565b6119399190612d0c565b8111156119a55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610a10565b600b55565b6005546001600160a01b031633146119d45760405162461bcd60e51b8152600401610a1090612caa565b670de0b6b3a76400006127106119e960025490565b6119f4906019612cf5565b6119fe9190612d0c565b611a089190612d0c565b811015611a6b5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e32352560a81b6064820152608401610a10565b670de0b6b3a76400006064611a7f60025490565b611a8a906002612cf5565b611a949190612d0c565b611a9e9190612d0c565b811115611aff5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610a10565b611b1181670de0b6b3a7640000612cf5565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d09565b6005546001600160a01b03163314611b705760405162461bcd60e51b8152600401610a1090612caa565b6010805460ff19169055565b6005546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610a1090612caa565b6001600160a01b038116611c0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a10565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611cc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a10565b6001600160a01b038216611d2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a10565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611db15760405162461bcd60e51b8152600401610a1090612d77565b6001600160a01b038216611dd75760405162461bcd60e51b8152600401610a1090612dbc565b60008111611e275760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a10565b600e54610100900460ff16611eba576001600160a01b0383166000908152601b602052604090205460ff1680611e7557506001600160a01b0382166000908152601b602052604090205460ff165b611eba5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a10565b600e5460ff16156122b8576005546001600160a01b03848116911614801590611ef157506005546001600160a01b03838116911614155b8015611f0857506001600160a01b03821661dead14155b8015611f2d57506001600160a01b0383166000908152601b602052604090205460ff16155b8015611f5257506001600160a01b0382166000908152601b602052604090205460ff16155b156122b85760105460ff161561206b576009546001600160a01b03838116911614801590611f8e5750600a546001600160a01b03838116911614155b1561206b57611f9e600243612dff565b326000908152600f6020526040902054108015611fdc5750611fc1600243612dff565b6001600160a01b0383166000908152600f6020526040902054105b6120465760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610a10565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601d602052604090205460ff1680156120ac57506001600160a01b0382166000908152601c602052604090205460ff16155b15612183576006548111156121145760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610a10565b6008546001600160a01b03831660009081526020819052604090205461213a9083612d2e565b111561217e5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610a10565b6122b8565b6001600160a01b0382166000908152601d602052604090205460ff1680156121c457506001600160a01b0383166000908152601c602052604090205460ff16155b1561222e5760075481111561217e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610a10565b6001600160a01b0382166000908152601c602052604090205460ff166122b8576008546001600160a01b0383166000908152602081905260409020546122749083612d2e565b11156122b85760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610a10565b30600090815260208190526040902054600b54811080159081906122e45750600e5462010000900460ff165b80156122fa5750600a54600160a01b900460ff16155b801561231e57506001600160a01b0384166000908152601d602052604090205460ff165b1561234c57600a805460ff60a01b1916600160a01b17905561233e612530565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601b602052604090205460019060ff168061238e57506001600160a01b0385166000908152601b602052604090205460ff165b15612397575060005b6000811561251c576001600160a01b0386166000908152601d602052604090205460ff1680156123c957506000601654115b15612451576064601654866123de9190612cf5565b6123e89190612d0c565b9050601654601854826123fb9190612cf5565b6124059190612d0c565b601a60008282546124169190612d2e565b909155505060165460175461242b9083612cf5565b6124359190612d0c565b601960008282546124469190612d2e565b909155506124fe9050565b6001600160a01b0387166000908152601d602052604090205460ff16801561247b57506000601154115b156124fe576064601154866124909190612cf5565b61249a9190612d0c565b9050601154601354826124ad9190612cf5565b6124b79190612d0c565b601a60008282546124c89190612d2e565b90915550506011546012546124dd9083612cf5565b6124e79190612d0c565b601960008282546124f89190612d2e565b90915550505b801561250f5761250f8730836126c5565b6125198186612dff565b94505b6125278787876126c5565b50505050505050565b3060009081526020819052604081205490506000601954601a546125549190612d2e565b9050811580612561575080155b1561256a575050565b600b5461257890600a612cf5565b82111561259057600b5461258d90600a612cf5565b91505b600080600283601a54866125a49190612cf5565b6125ae9190612d0c565b6125b89190612d0c565b90506125cc6125c78286612dff565b61281a565b601a54479081906000906125e290600290612d0c565b6125ec9087612dff565b6019546125f99085612cf5565b6126039190612d0c565b905061260f8183612dff565b6000601a8190556019559150831580159061262a5750600082115b15612639576126398483612974565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612686576040519150601f19603f3d011682016040523d82523d6000602084013e61268b565b606091505b50505050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff191682151517905561151f8282612a49565b6001600160a01b0383166126eb5760405162461bcd60e51b8152600401610a1090612d77565b6001600160a01b0382166127115760405162461bcd60e51b8152600401610a1090612dbc565b6001600160a01b038316600090815260208190526040902054818110156127895760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a10565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906127c0908490612d2e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161280c91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061284f5761284f612e12565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190612e28565b816001815181106128df576128df612e12565b6001600160a01b0392831660209182029290920101526009546129059130911684611c67565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061293e908590600090869030904290600401612e45565b600060405180830381600087803b15801561295857600080fd5b505af115801561296c573d6000803e3d6000fd5b505050505050565b60095461298c9030906001600160a01b031684611c67565b6009546001600160a01b031663f305d7198230856000806129b56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a1d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a429190612eb6565b5050505050565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612ad957858101830151858201604001528201612abd565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612b0f57600080fd5b50565b60008060408385031215612b2557600080fd5b8235612b3081612afa565b946020939093013593505050565b600060208284031215612b5057600080fd5b8135612b5b81612afa565b9392505050565b600080600060608486031215612b7757600080fd5b8335612b8281612afa565b92506020840135612b9281612afa565b929592945050506040919091013590565b600060208284031215612bb557600080fd5b5035919050565b60008060408385031215612bcf57600080fd5b50508035926020909101359150565b8015158114612b0f57600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612afa565b91506020830135612c1a81612bde565b809150509250929050565b600060208284031215612c3757600080fd5b8135612b5b81612bde565b60008060408385031215612c5557600080fd5b8235612c6081612afa565b91506020830135612c1a81612afa565b600181811c90821680612c8457607f821691505b602082108103612ca457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109e0576109e0612cdf565b600082612d2957634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109e0576109e0612cdf565b600060208284031215612d5357600080fd5b5051919050565b600060208284031215612d6c57600080fd5b8151612b5b81612bde565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109e0576109e0612cdf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e3a57600080fd5b8151612b5b81612afa565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e955784516001600160a01b031683529383019391830191600101612e70565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ecb57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220942b79888642e18b723f94c9dd37f1b8120e452bca5d94c8ab94f623f59b027a64736f6c63430008110033

Deployed Bytecode Sourcemap

11054:17298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4406:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11198:27;;;;;;;;;;-1:-1:-1;11198:27:0;;;;-1:-1:-1;;;;;11198:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;11198:27:0;567:221:1;5461:210:0;;;;;;;;;;-1:-1:-1;5461:210:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5461:210:0;1249:187:1;12343:63:0;;;;;;;;;;-1:-1:-1;12343:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4727:108;;;;;;;;;;-1:-1:-1;4815:12:0;;4727:108;;;1839:25:1;;;1827:2;1812:18;4727:108:0;1693:177:1;12161:33:0;;;;;;;;;;;;;;;;27447:352;;;;;;;;;;-1:-1:-1;27447:352:0;;;;;:::i;:::-;;:::i;:::-;;5679:529;;;;;;;;;;-1:-1:-1;5679:529:0;;;;;:::i;:::-;;:::i;15925:459::-;;;;;;;;;;-1:-1:-1;15925:459:0;;;;;:::i;:::-;;:::i;4626:93::-;;;;;;;;;;-1:-1:-1;4626:93:0;;4709:2;2663:36:1;;2651:2;2636:18;4626:93:0;2521:184:1;6216:297:0;;;;;;;;;;-1:-1:-1;6216:297:0;;;;;:::i;:::-;;:::i;27251:188::-;;;;;;;;;;;;;:::i;11232:21::-;;;;;;;;;;-1:-1:-1;11232:21:0;;;;-1:-1:-1;;;;;11232:21:0;;;11452:33;;;;;;;;;;-1:-1:-1;11452:33:0;;;;;;;;12041:32;;;;;;;;;;;;;;;;27851:349;;;;;;;;;;;;;:::i;11832:31::-;;;;;;;;;;;;;;;;19355:394;;;;;;;;;;;;;:::i;11130:28::-;;;;;;;;;;;;;;;;12006;;;;;;;;;;;;;;;;19007:340;;;;;;;;;;-1:-1:-1;19007:340:0;;;;;:::i;:::-;;:::i;11532:31::-;;;;;;;;;;-1:-1:-1;11532:31:0;;;;;;;;;;;4843:177;;;;;;;;;;-1:-1:-1;4843:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4994:18:0;4962:7;4994:18;;;;;;;;;;;;4843:177;18060:334;;;;;;;;;;-1:-1:-1;18060:334:0;;;;;:::i;:::-;;:::i;8937:265::-;;;;;;;;;;-1:-1:-1;8937:265:0;;;;;:::i;:::-;;:::i;26614:567::-;;;;;;;;;;-1:-1:-1;26614:567:0;;;;;:::i;:::-;;:::i;11096:27::-;;;;;;;;;;;;;;;;15507:249;;;;;;;;;;;;;:::i;8723:79::-;;;;;;;;;;-1:-1:-1;8788:6:0;;-1:-1:-1;;;;;8788:6:0;8723:79;;4514:104;;;;;;;;;;;;;:::i;18402:353::-;;;;;;;;;;-1:-1:-1;18402:353:0;;;;;:::i;:::-;;:::i;6521:482::-;;;;;;;;;;-1:-1:-1;6521:482:0;;;;;:::i;:::-;;:::i;5028:216::-;;;;;;;;;;-1:-1:-1;5028:216:0;;;;;:::i;:::-;;:::i;12564:57::-;;;;;;;;;;-1:-1:-1;12564:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11492:33;;;;;;;;;;-1:-1:-1;11492:33:0;;;;;;;;;;;19757:182;;;;;;;;;;-1:-1:-1;19757:182:0;;;;;:::i;:::-;;:::i;16864:461::-;;;;;;;;;;-1:-1:-1;16864:461:0;;;;;:::i;:::-;;:::i;28252:95::-;;;;;;;;;;;;;:::i;11750:39::-;;;;;;;;;;-1:-1:-1;11750:39:0;;;;;;;;17395:428;;;;;;;;;;-1:-1:-1;17395:428:0;;;;;:::i;:::-;;:::i;11798:27::-;;;;;;;;;;;;;;;;16392:464;;;;;;;;;;-1:-1:-1;16392:464:0;;;;;:::i;:::-;;:::i;5252:201::-;;;;;;;;;;-1:-1:-1;5252:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5418:18:0;;;5386:7;5418:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5252:201;11290:33;;;;;;;;;;;;;;;;15819:98;;;;;;;;;;;;;:::i;11332:32::-;;;;;;;;;;-1:-1:-1;11332:32:0;;;;-1:-1:-1;;;;;11332:32:0;;;11373:37;;;;;;;;;;;;;;;;11870:30;;;;;;;;;;;;;;;;9210:281;;;;;;;;;;-1:-1:-1;9210:281:0;;;;;:::i;:::-;;:::i;12080:31::-;;;;;;;;;;;;;;;;11165:24;;;;;;;;;;;;;;;;12120:34;;;;;;;;;;;;;;;;4406:100;4460:13;4493:5;4486:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4406:100;:::o;5461:210::-;5580:4;5602:39;556:10;5625:7;5634:6;5602:8;:39::i;:::-;-1:-1:-1;5659:4:0;5461:210;;;;;:::o;27447:352::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27575:32:0;::::1;27553:120;;;::::0;-1:-1:-1;;;27553:120:0;;5268:2:1;27553:120:0::1;::::0;::::1;5250:21:1::0;5307:2;5287:18;;;5280:30;5346:34;5326:18;;;5319:62;-1:-1:-1;;;5397:18:1;;;5390:36;5443:19;;27553:120:0::1;5066:402:1::0;27553:120:0::1;27684:17;:47:::0;;-1:-1:-1;;;;;;27684:47:0::1;-1:-1:-1::0;;;;;27684:47:0;::::1;::::0;;::::1;::::0;;;27747:44:::1;::::0;::::1;::::0;-1:-1:-1;;27747:44:0::1;27447:352:::0;:::o;5679:529::-;5819:4;5836:36;5846:6;5854:9;5865:6;5836:9;:36::i;:::-;-1:-1:-1;;;;;5912:19:0;;5885:24;5912:19;;;:11;:19;;;;;;;;556:10;5912:33;;;;;;;;5978:26;;;;5956:116;;;;-1:-1:-1;;;5956:116:0;;5675:2:1;5956:116:0;;;5657:21:1;5714:2;5694:18;;;5687:30;5753:34;5733:18;;;5726:62;-1:-1:-1;;;5804:18:1;;;5797:38;5852:19;;5956:116:0;5473:404:1;5956:116:0;6108:57;6117:6;556:10;6158:6;6139:16;:25;6108:8;:57::i;:::-;-1:-1:-1;6196:4:0;;5679:529;-1:-1:-1;;;;5679:529:0:o;15925:459::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;16064:4:::1;16055:5;16033:13;4815:12:::0;;;4727:108;16033:13:::1;:18;::::0;16049:2:::1;16033:18;:::i;:::-;16032:28;;;;:::i;:::-;16031:37;;;;:::i;:::-;16021:6;:47;;15999:139;;;::::0;-1:-1:-1;;;15999:139:0;;6611:2:1;15999:139:0::1;::::0;::::1;6593:21:1::0;6650:2;6630:18;;;6623:30;6689:34;6669:18;;;6662:62;-1:-1:-1;;;6740:18:1;;;6733:40;6790:19;;15999:139:0::1;6409:406:1::0;15999:139:0::1;16211:4;16204:3;16183:13;4815:12:::0;;;4727:108;16183:13:::1;:17;::::0;16199:1:::1;16183:17;:::i;:::-;16182:25;;;;:::i;:::-;16181:34;;;;:::i;:::-;16171:6;:44;;16149:135;;;::::0;-1:-1:-1;;;16149:135:0;;7022:2:1;16149:135:0::1;::::0;::::1;7004:21:1::0;7061:2;7041:18;;;7034:30;7100:34;7080:18;;;7073:62;-1:-1:-1;;;7151:18:1;;;7144:39;7200:19;;16149:135:0::1;6820:405:1::0;16149:135:0::1;16310:17;:6:::0;16320::::1;16310:17;:::i;:::-;16295:12;:32:::0;;;16343:33:::1;::::0;1839:25:1;;;16343:33:0::1;::::0;1827:2:1;1812:18;16343:33:0::1;;;;;;;;15925:459:::0;:::o;6216:297::-;556:10;6331:4;6425:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6425:34:0;;;;;;;;;;6331:4;;6353:130;;6403:7;;6425:47;;6462:10;;6425:47;:::i;:::-;6353:8;:130::i;27251:188::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;27349:82:::1;::::0;27312:12:::1;::::0;27357:10:::1;::::0;27381:21:::1;::::0;27312:12;27349:82;27312:12;27349:82;27381:21;27357:10;27349:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;27251:188:0:o;27851:349::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;27956:18:::1;::::0;27946:4:::1;4962:7:::0;4994:18;;;;;;;;;;;27928:46:::1;;27906:160;;;::::0;;-1:-1:-1;;;27906:160:0;;7772:2:1;27906:160:0::1;::::0;::::1;7754:21:1::0;7791:18;;;7784:30;;;;7850:34;7830:18;;;7823:62;7921:34;7901:18;;;7894:62;7973:19;;27906:160:0::1;7570:428:1::0;27906:160:0::1;28077:8;:15:::0;;-1:-1:-1;;;;28077:15:0::1;-1:-1:-1::0;;;28077:15:0::1;::::0;;28103:10:::1;:8;:10::i;:::-;28124:8;:16:::0;;-1:-1:-1;;;;28124:16:0::1;::::0;;28156:36:::1;::::0;28176:15:::1;1839:25:1::0;;28156:36:0::1;::::0;1827:2:1;1812:18;28156:36:0::1;;;;;;;27851:349::o:0;19355:394::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;19428:25:::1;::::0;19409:16:::1;:44:::0;;;19482:24:::1;::::0;19464:15:::1;:42:::0;;;19532:34:::1;::::0;::::1;:::i;:::-;19517:12;:49:::0;19599:25:::1;::::0;19579:17:::1;:45:::0;;;19654:24:::1;::::0;19635:16:::1;:43:::0;;;19705:36:::1;::::0;::::1;:::i;:::-;19689:13;:52:::0;19355:394::o;19007:340::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;19127:17:::1;:34:::0;;;19172:16:::1;:32:::0;;;19231:36:::1;19191:13:::0;19147:14;19231:36:::1;:::i;:::-;19215:13;:52:::0;;;19303:2:::1;-1:-1:-1::0;19286:19:0::1;19278:61;;;::::0;-1:-1:-1;;;19278:61:0;;8205:2:1;19278:61:0::1;::::0;::::1;8187:21:1::0;8244:2;8224:18;;;8217:30;8283:31;8263:18;;;8256:59;8332:18;;19278:61:0::1;8003:353:1::0;19278:61:0::1;19007:340:::0;;:::o;18060:334::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;18180:4:::1;18175:155;;18237:6;::::0;-1:-1:-1;;;;;18237:6:0;;::::1;18227:16:::0;;::::1;::::0;18201:117:::1;;;::::0;-1:-1:-1;;;18201:117:0;;8563:2:1;18201:117:0::1;::::0;::::1;8545:21:1::0;8602:2;8582:18;;;8575:30;8641:34;8621:18;;;8614:62;-1:-1:-1;;;8692:18:1;;;8685:37;8739:19;;18201:117:0::1;8361:403:1::0;18201:117:0::1;-1:-1:-1::0;;;;;18340:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18340:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18060:334::o;8937:265::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;9064:15:::1;9056:52;;;::::0;-1:-1:-1;;;9056:52:0;;8971:2:1;9056:52:0::1;::::0;::::1;8953:21:1::0;9010:2;8990:18;;;8983:30;9049:26;9029:18;;;9022:54;9093:18;;9056:52:0::1;8769:348:1::0;9056:52:0::1;9145:6;::::0;9124:40:::1;::::0;9161:1:::1;::::0;-1:-1:-1;;;;;9145:6:0::1;::::0;9124:40:::1;::::0;9161:1;;9124:40:::1;-1:-1:-1::0;9175:6:0::1;:19:::0;;-1:-1:-1;;;;;;9175:19:0::1;::::0;;8937:265::o;26614:567::-;8850:6;;26728:10;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26764:20:0;::::1;26756:59;;;::::0;-1:-1:-1;;;26756:59:0;;9324:2:1;26756:59:0::1;::::0;::::1;9306:21:1::0;9363:2;9343:18;;;9336:30;9402:28;9382:18;;;9375:56;9448:18;;26756:59:0::1;9122:350:1::0;26756:59:0::1;-1:-1:-1::0;;;;;26848:23:0;::::1;26866:4;26848:23;;::::0;:41:::1;;-1:-1:-1::0;26876:13:0::1;::::0;::::1;::::0;::::1;;;26875:14;26848:41;26826:143;;;::::0;-1:-1:-1;;;26826:143:0;;9679:2:1;26826:143:0::1;::::0;::::1;9661:21:1::0;9718:2;9698:18;;;9691:30;9757:34;9737:18;;;9730:62;-1:-1:-1;;;9808:18:1;;;9801:50;9868:19;;26826:143:0::1;9477:416:1::0;26826:143:0::1;27007:39;::::0;-1:-1:-1;;;27007:39:0;;27040:4:::1;27007:39;::::0;::::1;731:51:1::0;26980:24:0::1;::::0;-1:-1:-1;;;;;27007:24:0;::::1;::::0;::::1;::::0;704:18:1;;27007:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27065:46;::::0;-1:-1:-1;;;27065:46:0;;-1:-1:-1;;;;;10279:32:1;;;27065:46:0::1;::::0;::::1;10261:51:1::0;10328:18;;;10321:34;;;26980:66:0;;-1:-1:-1;27065:23:0;;::::1;::::0;::::1;::::0;10234:18:1;;27065:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27127;::::0;;-1:-1:-1;;;;;10279:32:1;;10261:51;;10343:2;10328:18;;10321:34;;;27057:54:0;;-1:-1:-1;27127:46:0::1;::::0;10234:18:1;27127:46:0::1;;;;;;;26745:436;26614:567:::0;;;;:::o;15507:249::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;15571:13:::1;::::0;::::1;::::0;::::1;;;15570:14;15562:50;;;::::0;-1:-1:-1;;;15562:50:0;;10818:2:1;15562:50:0::1;::::0;::::1;10800:21:1::0;10857:2;10837:18;;;10830:30;10896:25;10876:18;;;10869:53;10939:18;;15562:50:0::1;10616:347:1::0;15562:50:0::1;15623:13;:20:::0;;-1:-1:-1;;15654:18:0;;;;;15704:12:::1;15683:18;:33:::0;15732:16:::1;::::0;::::1;::::0;-1:-1:-1;;15732:16:0::1;15507:249::o:0;4514:104::-;4570:13;4603:7;4596:14;;;;;:::i;18402:353::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;18548:6:::1;::::0;-1:-1:-1;;;;;18548:6:0;;::::1;18540:14:::0;;::::1;::::0;18518:121:::1;;;::::0;-1:-1:-1;;;18518:121:0;;11170:2:1;18518:121:0::1;::::0;::::1;11152:21:1::0;11209:2;11189:18;;;11182:30;11248:34;11228:18;;;11221:62;11319:27;11299:18;;;11292:55;11364:19;;18518:121:0::1;10968:421:1::0;18518:121:0::1;18650:41;18679:4;18685:5;18650:28;:41::i;:::-;18707:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18707:40:0;::::1;::::0;::::1;::::0;;;::::1;18402:353:::0;;:::o;6521:482::-;556:10;6641:4;6690:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6690:34:0;;;;;;;;;;6757:35;;;;6735:122;;;;-1:-1:-1;;;6735:122:0;;11596:2:1;6735:122:0;;;11578:21:1;11635:2;11615:18;;;11608:30;11674:34;11654:18;;;11647:62;-1:-1:-1;;;11725:18:1;;;11718:35;11770:19;;6735:122:0;11394:401:1;6735:122:0;6893:67;556:10;6916:7;6944:15;6925:16;:34;6893:8;:67::i;:::-;-1:-1:-1;6991:4:0;;6521:482;-1:-1:-1;;;6521:482:0:o;5028:216::-;5150:4;5172:42;556:10;5196:9;5207:6;5172:9;:42::i;19757:182::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19842:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;19842:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19897:34;;1389:41:1;;;19897:34:0::1;::::0;1362:18:1;19897:34:0::1;;;;;;;19757:182:::0;;:::o;16864:461::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;17004:4:::1;16996;16975:13;4815:12:::0;;;4727:108;16975:13:::1;:17;::::0;16991:1:::1;16975:17;:::i;:::-;16974:26;;;;:::i;:::-;16973:35;;;;:::i;:::-;16963:6;:45;;16941:139;;;::::0;-1:-1:-1;;;16941:139:0;;12002:2:1;16941:139:0::1;::::0;::::1;11984:21:1::0;12041:2;12021:18;;;12014:30;12080:34;12060:18;;;12053:62;-1:-1:-1;;;12131:18:1;;;12124:42;12183:19;;16941:139:0::1;11800:408:1::0;16941:139:0::1;17153:4;17146:3;17125:13;4815:12:::0;;;4727:108;17125:13:::1;:17;::::0;17141:1:::1;17125:17;:::i;:::-;17124:25;;;;:::i;:::-;17123:34;;;;:::i;:::-;17113:6;:44;;17091:137;;;::::0;-1:-1:-1;;;17091:137:0;;12415:2:1;17091:137:0::1;::::0;::::1;12397:21:1::0;12454:2;12434:18;;;12427:30;12493:34;12473:18;;;12466:62;-1:-1:-1;;;12544:18:1;;;12537:41;12595:19;;17091:137:0::1;12213:407:1::0;17091:137:0::1;17251:17;:6:::0;17261::::1;17251:17;:::i;:::-;17239:9;:29:::0;;;17284:33:::1;::::0;1839:25:1;;;17284:33:0::1;::::0;1827:2:1;1812:18;17284:33:0::1;1693:177:1::0;28252:95:0;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;28317:14:::1;:22:::0;;-1:-1:-1;;28317:22:0::1;::::0;;28252:95::o;17395:428::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;17535:6:::1;17514:13;4815:12:::0;;;4727:108;17514:13:::1;:17;::::0;17530:1:::1;17514:17;:::i;:::-;17513:28;;;;:::i;:::-;17500:9;:41;;17478:144;;;::::0;-1:-1:-1;;;17478:144:0;;12827:2:1;17478:144:0::1;::::0;::::1;12809:21:1::0;12866:2;12846:18;;;12839:30;12905:34;12885:18;;;12878:62;-1:-1:-1;;;12956:18:1;;;12949:51;13017:19;;17478:144:0::1;12625:417:1::0;17478:144:0::1;17690:4;17669:13;4815:12:::0;;;4727:108;17669:13:::1;:17;::::0;17685:1:::1;17669:17;:::i;:::-;17668:26;;;;:::i;:::-;17655:9;:39;;17633:141;;;::::0;-1:-1:-1;;;17633:141:0;;13249:2:1;17633:141:0::1;::::0;::::1;13231:21:1::0;13288:2;13268:18;;;13261:30;13327:34;13307:18;;;13300:62;-1:-1:-1;;;13378:18:1;;;13371:50;13438:19;;17633:141:0::1;13047:416:1::0;17633:141:0::1;17785:18;:30:::0;17395:428::o;16392:464::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;16532:4:::1;16523:5;16501:13;4815:12:::0;;;4727:108;16501:13:::1;:18;::::0;16517:2:::1;16501:18;:::i;:::-;16500:28;;;;:::i;:::-;16499:37;;;;:::i;:::-;16489:6;:47;;16467:140;;;::::0;-1:-1:-1;;;16467:140:0;;13670:2:1;16467:140:0::1;::::0;::::1;13652:21:1::0;13709:2;13689:18;;;13682:30;13748:34;13728:18;;;13721:62;-1:-1:-1;;;13799:18:1;;;13792:41;13850:19;;16467:140:0::1;13468:407:1::0;16467:140:0::1;16680:4;16673:3;16652:13;4815:12:::0;;;4727:108;16652:13:::1;:17;::::0;16668:1:::1;16652:17;:::i;:::-;16651:25;;;;:::i;:::-;16650:34;;;;:::i;:::-;16640:6;:44;;16618:135;;;::::0;-1:-1:-1;;;16618:135:0;;14082:2:1;16618:135:0::1;::::0;::::1;14064:21:1::0;14121:2;14101:18;;;14094:30;14160:34;14140:18;;;14133:62;-1:-1:-1;;;14211:18:1;;;14204:39;14260:19;;16618:135:0::1;13880:405:1::0;16618:135:0::1;16780:17;:6:::0;16790::::1;16780:17;:::i;:::-;16764:13;:33:::0;;;16813:35:::1;::::0;1839:25:1;;;16813:35:0::1;::::0;1827:2:1;1812:18;16813:35:0::1;1693:177:1::0;15819:98:0;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;15881:20:::1;:28:::0;;-1:-1:-1;;15881:28:0::1;::::0;;15819:98::o;9210:281::-;8850:6;;-1:-1:-1;;;;;8850:6:0;556:10;8850:22;8842:67;;;;-1:-1:-1;;;8842:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9313:22:0;::::1;9291:110;;;::::0;-1:-1:-1;;;9291:110:0;;14492:2:1;9291:110:0::1;::::0;::::1;14474:21:1::0;14531:2;14511:18;;;14504:30;14570:34;14550:18;;;14543:62;-1:-1:-1;;;14621:18:1;;;14614:36;14667:19;;9291:110:0::1;14290:402:1::0;9291:110:0::1;9438:6;::::0;9417:38:::1;::::0;-1:-1:-1;;;;;9417:38:0;;::::1;::::0;9438:6:::1;::::0;9417:38:::1;::::0;9438:6:::1;::::0;9417:38:::1;9466:6;:17:::0;;-1:-1:-1;;;;;;9466:17:0::1;-1:-1:-1::0;;;;;9466:17:0;;;::::1;::::0;;;::::1;::::0;;9210:281::o;7992:380::-;-1:-1:-1;;;;;8128:19:0;;8120:68;;;;-1:-1:-1;;;8120:68:0;;14899:2:1;8120:68:0;;;14881:21:1;14938:2;14918:18;;;14911:30;14977:34;14957:18;;;14950:62;-1:-1:-1;;;15028:18:1;;;15021:34;15072:19;;8120:68:0;14697:400:1;8120:68:0;-1:-1:-1;;;;;8207:21:0;;8199:68;;;;-1:-1:-1;;;8199:68:0;;15304:2:1;8199:68:0;;;15286:21:1;15343:2;15323:18;;;15316:30;15382:34;15362:18;;;15355:62;-1:-1:-1;;;15433:18:1;;;15426:32;15475:19;;8199:68:0;15102:398:1;8199:68:0;-1:-1:-1;;;;;8280:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8332:32;;1839:25:1;;;8332:32:0;;1812:18:1;8332:32:0;;;;;;;7992:380;;;:::o;19947:4294::-;-1:-1:-1;;;;;20079:18:0;;20071:68;;;;-1:-1:-1;;;20071:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20158:16:0;;20150:64;;;;-1:-1:-1;;;20150:64:0;;;;;;;:::i;:::-;20242:1;20233:6;:10;20225:52;;;;-1:-1:-1;;;20225:52:0;;16517:2:1;20225:52:0;;;16499:21:1;16556:2;16536:18;;;16529:30;16595:31;16575:18;;;16568:59;16644:18;;20225:52:0;16315:353:1;20225:52:0;20295:13;;;;;;;20290:183;;-1:-1:-1;;;;;20351:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20380:23:0;;;;;;:19;:23;;;;;;;;20351:52;20325:136;;;;-1:-1:-1;;;20325:136:0;;16875:2:1;20325:136:0;;;16857:21:1;16914:2;16894:18;;;16887:30;-1:-1:-1;;;16933:18:1;;;16926:52;16995:18;;20325:136:0;16673:346:1;20325:136:0;20489:14;;;;20485:2148;;;8788:6;;-1:-1:-1;;;;;20542:15:0;;;8788:6;;20542:15;;;;:49;;-1:-1:-1;8788:6:0;;-1:-1:-1;;;;;20578:13:0;;;8788:6;;20578:13;;20542:49;:91;;;;-1:-1:-1;;;;;;20612:21:0;;20626:6;20612:21;;20542:91;:138;;;;-1:-1:-1;;;;;;20655:25:0;;;;;;:19;:25;;;;;;;;20654:26;20542:138;:183;;;;-1:-1:-1;;;;;;20702:23:0;;;;;;:19;:23;;;;;;;;20701:24;20542:183;20520:2102;;;20764:20;;;;20760:692;;;20827:9;;-1:-1:-1;;;;;20813:24:0;;;20827:9;;20813:24;;;;:49;;-1:-1:-1;20855:6:0;;-1:-1:-1;;;;;20841:21:0;;;20855:6;;20841:21;;20813:49;20809:624;;;21004:16;21019:1;21004:12;:16;:::i;:::-;20958:9;20929:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;21125:16:0;21140:1;21125:12;:16;:::i;:::-;-1:-1:-1;;;;;21057:32:0;;;;;;:28;:32;;;;;;:84;20929:212;20891:363;;;;-1:-1:-1;;;20891:363:0;;17359:2:1;20891:363:0;;;17341:21:1;17398:2;17378:18;;;17371:30;17437:34;17417:18;;;17410:62;-1:-1:-1;;;17488:18:1;;;17481:51;17549:19;;20891:363:0;17157:417:1;20891:363:0;21310:9;21281:39;;;;:28;:39;;;;;;21323:12;21281:54;;;;-1:-1:-1;;;;;21362:32:0;;;;;;:47;20809:624;-1:-1:-1;;;;;21526:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;21583:35:0;;;;;;:31;:35;;;;;;;;21582:36;21526:92;21500:1107;;;21705:12;;21695:6;:22;;21661:148;;;;-1:-1:-1;;;21661:148:0;;17781:2:1;21661:148:0;;;17763:21:1;17820:2;17800:18;;;17793:30;17859:34;17839:18;;;17832:62;-1:-1:-1;;;17910:18:1;;;17903:38;17958:19;;21661:148:0;17579:404:1;21661:148:0;21892:9;;-1:-1:-1;;;;;4994:18:0;;4962:7;4994:18;;;;;;;;;;;21866:22;;:6;:22;:::i;:::-;:35;;21832:140;;;;-1:-1:-1;;;21832:140:0;;18190:2:1;21832:140:0;;;18172:21:1;18229:2;18209:18;;;18202:30;-1:-1:-1;;;18248:18:1;;;18241:49;18307:18;;21832:140:0;17988:343:1;21832:140:0;21500:1107;;;-1:-1:-1;;;;;22070:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;22125:37:0;;;;;;:31;:37;;;;;;;;22124:38;22070:92;22044:563;;;22249:13;;22239:6;:23;;22205:151;;;;-1:-1:-1;;;22205:151:0;;18538:2:1;22205:151:0;;;18520:21:1;18577:2;18557:18;;;18550:30;18616:34;18596:18;;;18589:62;-1:-1:-1;;;18667:18:1;;;18660:40;18717:19;;22205:151:0;18336:406:1;22044:563:0;-1:-1:-1;;;;;22387:35:0;;;;;;:31;:35;;;;;;;;22382:225;;22507:9;;-1:-1:-1;;;;;4994:18:0;;4962:7;4994:18;;;;;;;;;;;22481:22;;:6;:22;:::i;:::-;:35;;22447:140;;;;-1:-1:-1;;;22447:140:0;;18190:2:1;22447:140:0;;;18172:21:1;18229:2;18209:18;;;18202:30;-1:-1:-1;;;18248:18:1;;;18241:49;18307:18;;22447:140:0;17988:343:1;22447:140:0;22694:4;22645:28;4994:18;;;;;;;;;;;22752;;22728:42;;;;;;;22801:22;;-1:-1:-1;22812:11:0;;;;;;;22801:22;:35;;;;-1:-1:-1;22828:8:0;;-1:-1:-1;;;22828:8:0;;;;22827:9;22801:35;:68;;;;-1:-1:-1;;;;;;22840:29:0;;;;;;:25;:29;;;;;;;;22801:68;22783:196;;;22896:8;:15;;-1:-1:-1;;;;22896:15:0;-1:-1:-1;;;22896:15:0;;;22926:10;:8;:10::i;:::-;22951:8;:16;;-1:-1:-1;;;;22951:16:0;;;22783:196;-1:-1:-1;;;;;23110:25:0;;22991:12;23110:25;;;:19;:25;;;;;;23006:4;;23110:25;;;:52;;-1:-1:-1;;;;;;23139:23:0;;;;;;:19;:23;;;;;;;;23110:52;23106:100;;;-1:-1:-1;23189:5:0;23106:100;23218:12;23323:7;23319:869;;;-1:-1:-1;;;;;23375:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23424:1;23408:13;;:17;23375:50;23371:668;;;23480:3;23463:13;;23454:6;:22;;;;:::i;:::-;23453:30;;;;:::i;:::-;23446:37;;23552:13;;23532:16;;23525:4;:23;;;;:::i;:::-;23524:41;;;;:::i;:::-;23502:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23678:13:0;;23636:17;;23629:24;;:4;:24;:::i;:::-;23628:63;;;;:::i;:::-;23584:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;23371:668:0;;-1:-1:-1;23371:668:0;;-1:-1:-1;;;;;23753:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;23803:1;23788:12;;:16;23753:51;23749:290;;;23858:3;23842:12;;23833:6;:21;;;;:::i;:::-;23832:29;;;;:::i;:::-;23825:36;;23929:12;;23910:15;;23903:4;:22;;;;:::i;:::-;23902:39;;;;:::i;:::-;23880:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24011:12:0;;23991:16;;23984:23;;:4;:23;:::i;:::-;23983:40;;;;:::i;:::-;23960:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23749:290:0;24059:8;;24055:91;;24088:42;24104:4;24118;24125;24088:15;:42::i;:::-;24162:14;24172:4;24162:14;;:::i;:::-;;;23319:869;24200:33;24216:4;24222:2;24226:6;24200:15;:33::i;:::-;20060:4181;;;;19947:4294;;;:::o;25337:1269::-;25420:4;25376:23;4994:18;;;;;;;;;;;25376:50;;25437:25;25486:19;;25465:18;;:40;;;;:::i;:::-;25437:68;-1:-1:-1;25522:20:0;;;:46;;-1:-1:-1;25546:22:0;;25522:46;25518:85;;;25585:7;;25337:1269::o;25518:85::-;25637:18;;:23;;25658:2;25637:23;:::i;:::-;25619:15;:41;25615:115;;;25695:18;;:23;;25716:2;25695:23;:::i;:::-;25677:41;;25615:115;25742:12;25816:23;25929:1;25896:17;25861:18;;25843:15;:36;;;;:::i;:::-;25842:71;;;;:::i;:::-;:88;;;;:::i;:::-;25816:114;-1:-1:-1;25943:51:0;25960:33;25816:114;25960:15;:33;:::i;:::-;25943:16;:51::i;:::-;26208:18;;26028:21;;;;26007:18;;26208:22;;26229:1;;26208:22;:::i;:::-;26187:44;;:17;:44;:::i;:::-;26150:19;;26137:32;;:10;:32;:::i;:::-;26136:96;;;;:::i;:::-;26109:123;-1:-1:-1;26245:35:0;26109:123;26245:35;;:::i;:::-;26314:1;26293:18;:22;;;26326:19;:23;26245:35;-1:-1:-1;26366:19:0;;;;;:42;;;26407:1;26389:15;:19;26366:42;26362:121;;;26425:46;26438:15;26455;26425:12;:46::i;:::-;26517:17;;26509:89;;-1:-1:-1;;;;;26517:17:0;;;;26562:21;;26509:89;;;;26562:21;26517:17;26509:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;25337:1269:0:o;18763:236::-;-1:-1:-1;;;;;18846:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18846:39:0;;;;;;;18896;18846:31;:39;18896:26;:39::i;7011:651::-;-1:-1:-1;;;;;7151:20:0;;7143:70;;;;-1:-1:-1;;;7143:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7232:23:0;;7224:71;;;;-1:-1:-1;;;7224:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7332:17:0;;7308:21;7332:17;;;;;;;;;;;7382:23;;;;7360:111;;;;-1:-1:-1;;;7360:111:0;;18949:2:1;7360:111:0;;;18931:21:1;18988:2;18968:18;;;18961:30;19027:34;19007:18;;;19000:62;-1:-1:-1;;;19078:18:1;;;19071:36;19124:19;;7360:111:0;18747:402:1;7360:111:0;-1:-1:-1;;;;;7507:17:0;;;:9;:17;;;;;;;;;;;7527:22;;;7507:42;;7571:20;;;;;;;;:30;;7543:6;;7507:9;7571:30;;7543:6;;7571:30;:::i;:::-;;;;;;;;7636:9;-1:-1:-1;;;;;7619:35:0;7628:6;-1:-1:-1;;;;;7619:35:0;;7647:6;7619:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7619:35:0;;;;;;;;7132:530;7011:651;;;:::o;24249:571::-;24399:16;;;24413:1;24399:16;;;;;;;;24375:21;;24399:16;;;;;;;;;;-1:-1:-1;24399:16:0;24375:40;;24444:4;24426;24431:1;24426:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24426:23:0;;;:7;;;;;;;;;;:23;;;;24470:9;;:16;;;-1:-1:-1;;;24470:16:0;;;;:9;;;;;:14;;:16;;;;;24426:7;;24470:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24460:4;24465:1;24460:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24460:26:0;;;:7;;;;;;;;;:26;24531:9;;24499:56;;24516:4;;24531:9;24543:11;24499:8;:56::i;:::-;24594:9;;:218;;-1:-1:-1;;;24594:218:0;;-1:-1:-1;;;;;24594:9:0;;;;:60;;:218;;24669:11;;24594:9;;24739:4;;24766;;24786:15;;24594:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24304:516;24249:571;:::o;24828:501::-;25008:9;;24976:56;;24993:4;;-1:-1:-1;;;;;25008:9:0;25020:11;24976:8;:56::i;:::-;25075:9;;-1:-1:-1;;;;;25075:9:0;:25;25108:9;25141:4;25161:11;25075:9;;25273:7;8788:6;;-1:-1:-1;;;;;8788:6:0;;8723:79;25273:7;25075:246;;;;;;-1:-1:-1;;;;;;25075:246:0;;;-1:-1:-1;;;;;21018:15:1;;;25075:246:0;;;21000:34:1;21050:18;;;21043:34;;;;21093:18;;;21086:34;;;;21136:18;;;21129:34;21200:15;;;21179:19;;;21172:44;25295:15:0;21232:19:1;;;21225:35;20934:19;;25075:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24828:501;;:::o;17831:221::-;-1:-1:-1;;;;;17933:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17933:52:0;;;;;;;;;;18001:43;;21750:51:1;;;21817:18;;;21810:50;18001:43:0;;21723:18:1;18001:43:0;;;;;;;17831:221;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;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;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2918:248::-;2986:6;2994;3047:2;3035:9;3026:7;3022:23;3018:32;3015:52;;;3063:1;3060;3053:12;3015:52;-1:-1:-1;;3086:23:1;;;3156:2;3141:18;;;3128:32;;-1:-1:-1;2918:248:1:o;3171:118::-;3257:5;3250:13;3243:21;3236:5;3233:32;3223:60;;3279:1;3276;3269:12;3294:382;3359:6;3367;3420:2;3408:9;3399:7;3395:23;3391:32;3388:52;;;3436:1;3433;3426:12;3388:52;3475:9;3462:23;3494:31;3519:5;3494:31;:::i;:::-;3544:5;-1:-1:-1;3601:2:1;3586:18;;3573:32;3614:30;3573:32;3614:30;:::i;:::-;3663:7;3653:17;;;3294:382;;;;;:::o;3681:241::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:52;;;3806:1;3803;3796:12;3758:52;3845:9;3832:23;3864:28;3886:5;3864:28;:::i;3927:388::-;3995:6;4003;4056:2;4044:9;4035:7;4031:23;4027:32;4024:52;;;4072:1;4069;4062:12;4024:52;4111:9;4098:23;4130:31;4155:5;4130:31;:::i;:::-;4180:5;-1:-1:-1;4237:2:1;4222:18;;4209:32;4250:33;4209:32;4250:33;:::i;4320:380::-;4399:1;4395:12;;;;4442;;;4463:61;;4517:4;4509:6;4505:17;4495:27;;4463:61;4570:2;4562:6;4559:14;4539:18;4536:38;4533:161;;4616:10;4611:3;4607:20;4604:1;4597:31;4651:4;4648:1;4641:15;4679:4;4676:1;4669:15;4533:161;;4320:380;;;:::o;4705:356::-;4907:2;4889:21;;;4926:18;;;4919:30;4985:34;4980:2;4965:18;;4958:62;5052:2;5037:18;;4705:356::o;5882:127::-;5943:10;5938:3;5934:20;5931:1;5924:31;5974:4;5971:1;5964:15;5998:4;5995:1;5988:15;6014:168;6087:9;;;6118;;6135:15;;;6129:22;;6115:37;6105:71;;6156:18;;:::i;6187:217::-;6227:1;6253;6243:132;;6297:10;6292:3;6288:20;6285:1;6278:31;6332:4;6329:1;6322:15;6360:4;6357:1;6350:15;6243:132;-1:-1:-1;6389:9:1;;6187:217::o;7230:125::-;7295:9;;;7316:10;;;7313:36;;;7329:18;;:::i;9898:184::-;9968:6;10021:2;10009:9;10000:7;9996:23;9992:32;9989:52;;;10037:1;10034;10027:12;9989:52;-1:-1:-1;10060:16:1;;9898:184;-1:-1:-1;9898:184:1:o;10366:245::-;10433:6;10486:2;10474:9;10465:7;10461:23;10457:32;10454:52;;;10502:1;10499;10492:12;10454:52;10534:9;10528:16;10553:28;10575:5;10553:28;:::i;15505:401::-;15707:2;15689:21;;;15746:2;15726:18;;;15719:30;15785:34;15780:2;15765:18;;15758:62;-1:-1:-1;;;15851:2:1;15836:18;;15829:35;15896:3;15881:19;;15505:401::o;15911:399::-;16113:2;16095:21;;;16152:2;16132:18;;;16125:30;16191:34;16186:2;16171:18;;16164:62;-1:-1:-1;;;16257:2:1;16242:18;;16235:33;16300:3;16285:19;;15911:399::o;17024:128::-;17091:9;;;17112:11;;;17109:37;;;17126:18;;:::i;19286:127::-;19347:10;19342:3;19338:20;19335:1;19328:31;19378:4;19375:1;19368:15;19402:4;19399:1;19392:15;19418:251;19488:6;19541:2;19529:9;19520:7;19516:23;19512:32;19509:52;;;19557:1;19554;19547:12;19509:52;19589:9;19583:16;19608:31;19633:5;19608:31;:::i;19674:980::-;19936:4;19984:3;19973:9;19969:19;20015:6;20004:9;19997:25;20041:2;20079:6;20074:2;20063:9;20059:18;20052:34;20122:3;20117:2;20106:9;20102:18;20095:31;20146:6;20181;20175:13;20212:6;20204;20197:22;20250:3;20239:9;20235:19;20228:26;;20289:2;20281:6;20277:15;20263:29;;20310:1;20320:195;20334:6;20331:1;20328:13;20320:195;;;20399:13;;-1:-1:-1;;;;;20395:39:1;20383:52;;20490:15;;;;20455:12;;;;20431:1;20349:9;20320:195;;;-1:-1:-1;;;;;;;20571:32:1;;;;20566:2;20551:18;;20544:60;-1:-1:-1;;;20635:3:1;20620:19;20613:35;20532:3;19674:980;-1:-1:-1;;;19674:980:1:o;21271:306::-;21359:6;21367;21375;21428:2;21416:9;21407:7;21403:23;21399:32;21396:52;;;21444:1;21441;21434:12;21396:52;21473:9;21467:16;21457:26;;21523:2;21512:9;21508:18;21502:25;21492:35;;21567:2;21556:9;21552:18;21546:25;21536:35;;21271:306;;;;;:::o

Swarm Source

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