ETH Price: $3,443.76 (-2.21%)
Gas: 3 Gwei

Token

Sphynx (SPHYNX)
 

Overview

Max Total Supply

70,500,000 SPHYNX

Holders

91

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
164,200.010811850896624083 SPHYNX

Value
$0.00
0xe8e13cbcf1e7606572f8dd1cb9f69849fe6fa4a5
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:
SPHYNX

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
Website:  https://sphynxbot.com/
Telegram: https://t.me/botsphynx
Twitter:  https://twitter.com/botsphynx/
Discord:  https://discord.gg/pGSqs8Kn                                                                                                                                                                                                                                                                                                                   
*/

pragma solidity 0.8.21;

pragma experimental ABIEncoderV2;

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

        _afterTokenTransfer(account, address(0), 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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

interface IBonusContract {
    function updateBonusAmount(address _buyer, uint256 _amount) external;

    function setIsRewardExcluded(address _user) external;
}

contract SPHYNX is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

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

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    uint256 public buyTotalFees = 30;
    uint256 public buyMarketingFee = 30;
    uint256 public buyDevFee = 0;

    mapping(address => uint256) private _firstBuyTimestamp;
    uint256 public sellTotalFees = 5;
    uint256 public sellMarketingFee = 5;
    uint256 public sellDevFee = 0;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    IBonusContract public bonusContract; // Bonus contract CA

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

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

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

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    modifier onlyDeployer {
        require(msg.sender == 0x737cB575824ca83D58A7AdD2de4C19Dc03000000, "Not authorized");
        _;
    }

    constructor() ERC20("Sphynx", "SPHYNX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 totalSupply = 70_500_000 * 1e18;

        maxTransactionAmount = totalSupply / 400; // 1% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply / 400; // 1% from total supply maxWallet
        swapTokensAtAmount = totalSupply / 1000;

        marketingWallet = 0x852DE5d6EF9a6E5EEC195E4218dF29c4Ac100000; // set as marketing wallet
        devWallet = 0x852DE5d6EF9a6E5EEC195E4218dF29c4Ac100000; // set as Dev wallet

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() external onlyOwner {
        require(launchedAt == 0, "Already launched");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        swapTokensAtAmount = newAmount * (10**18);
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10**18);
    }

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

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

    function updateBuyFees(uint256 _marketingFee, uint256 _devFee)
        external
        onlyOwner
    {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees<=25);
    }

    function updateSellFees(uint256 _marketingFee, uint256 _devFee)
        external
        onlyOwner
    {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees<=25);
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    // Bonus functions

    function setRewardContract(address _bonusContract) external {
        require(bonusContract == IBonusContract(address(0)), "Reward contract has already been set");
        bonusContract = IBonusContract(_bonusContract);
    }

    function updateBonusAmount(address _buyer, uint256 _amount)
        external
        onlyOwner
    {
        bonusContract.updateBonusAmount(_buyer, _amount);
    }

    

    function _setIsRewardExcluded(address _seller) internal {
        bonusContract.setIsRewardExcluded(_seller);
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        // rewards
        if(from != owner() && from != address(this)){
        bool  isNotTransfer = false;
        
        if (automatedMarketMakerPairs[from]) {
                if (_firstBuyTimestamp[to] == 0) {
                    _firstBuyTimestamp[to] = block.timestamp;
                 
                }
                bonusContract.updateBonusAmount(to, amount);  
                isNotTransfer = true;
        }

        if (automatedMarketMakerPairs[to]) {
                _setIsRewardExcluded(from);
                isNotTransfer = true;
            }

        if(!isNotTransfer)
            {
               _setIsRewardExcluded(from);
            }

        }
        //fees
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                // Check if it has been 24 hours since the first buy
                if (block.timestamp < _firstBuyTimestamp[from] + 1 days|| _firstBuyTimestamp[from]==0) {
                    // Less than 24 hours, apply 20% tax
                    fees = (amount * 20) / 100;
                } else {
                    // More than 24 hours, apply normal tax
                    fees = (amount * sellTotalFees) / 100;
                }
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

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

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

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

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

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;

        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            totalTokensToSwap;

        tokensForMarketing = 0;
        tokensForDev = 0;

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

    // to withdarw ETH from contract
    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    // to withdraw ERC20 tokens from contract
    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"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":"bonusContract","outputs":[{"internalType":"contract IBonusContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","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":[{"internalType":"address","name":"_bonusContract","type":"address"}],"name":"setRewardContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateBonusAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805462ffffff19166001179055601e600e819055600f555f6010819055600560128190556013556014553480156200003c575f80fd5b50604051806040016040528060068152602001650a6e0d0f2dcf60d31b815250604051806040016040528060068152602001650a6a090b29cb60d31b81525081600390816200008c9190620006d4565b5060046200009b8282620006d4565b505050620000b8620000b26200036860201b60201c565b6200036c565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000da816001620003bd565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000123573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200014991906200079c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000195573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001bb91906200079c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000206573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200022c91906200079c565b6001600160a01b031660a081905262000247906001620003bd565b60a0516200025790600162000447565b6a3a50f4a8736f70d68000006200027161019082620007cb565b6008556200028261019082620007cb565b600a55620002936103e882620007cb565b6009556006805473852de5d6ef9a6e5eec195e4218df29c4ac1000006001600160a01b03199182168117909255600780549091169091179055620002eb620002e36005546001600160a01b031690565b60016200049a565b620002f83060016200049a565b6200030761dead60016200049a565b620003266200031e6005546001600160a01b031690565b6001620003bd565b62000333306001620003bd565b6200034261dead6001620003bd565b62000360620003596005546001600160a01b031690565b826200054e565b505062000811565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146200041d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b73737cb575824ca83d58a7add2de4c19dc030000003314620004f05760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b604482015260640162000414565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005a65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000414565b8060025f828254620005b99190620007eb565b90915550506001600160a01b0382165f9081526020819052604081208054839290620005e7908490620007eb565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200065e57607f821691505b6020821081036200067d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000630575f81815260208120601f850160051c81016020861015620006ab5750805b601f850160051c820191505b81811015620006cc57828155600101620006b7565b505050505050565b81516001600160401b03811115620006f057620006f062000635565b620007088162000701845462000649565b8462000683565b602080601f8311600181146200073e575f8415620007265750858301515b5f19600386901b1c1916600185901b178555620006cc565b5f85815260208120601f198616915b828110156200076e578886015182559484019460019091019084016200074d565b50858210156200078c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620007ad575f80fd5b81516001600160a01b0381168114620007c4575f80fd5b9392505050565b5f82620007e657634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200080b57634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a0516127f96200084f5f395f818161057f015261101901525f8181610455015281816122b30152818161236a01526123a601526127f95ff3fe60806040526004361061035e575f3560e01c80637bce5a04116101bd578063b62496f5116100f2578063d257b34f11610092578063e2f456051161006d578063e2f45605146109d0578063f14210a6146109e5578063f2fde38b14610a04578063f8b45b0514610a23575f80fd5b8063d257b34f14610958578063d85ba06314610977578063dd62ed3e1461098c575f80fd5b8063c0246668116100cd578063c0246668146108f0578063c18bc1951461090f578063c6d2577d1461092e578063c8c8ebe414610943575f80fd5b8063b62496f51461088f578063bbc0c742146108bd578063bf56b371146108db575f80fd5b80639c3b4fdc1161015d578063a0d82dc511610138578063a0d82dc51461081d578063a457c2d714610832578063a9059cbb14610851578063aacebbe314610870575f80fd5b80639c3b4fdc146107d45780639e281a98146107e95780639fccce3214610808575f80fd5b80639213691311610198578063921369131461076d578063924de9b71461078257806395d89b41146107a15780639a7a23d6146107b5575f80fd5b80637bce5a041461071c5780638da5cb5b146107315780638ea5220f1461074e575f80fd5b806339509351116102935780636a486a8e11610233578063715018a61161020e578063715018a6146106b6578063751039fc146106ca5780637571336a146106de57806375f0a874146106fd575f80fd5b80636a486a8e1461064e5780636ddd17131461066357806370a0823114610682575f80fd5b80634fbee1931161026e5780634fbee193146105ba57806351508f0a146105f157806366ca9b83146106105780636939850e1461062f575f80fd5b8063395093511461054f57806349bd5a5e1461056e5780634a62bb65146105a1575f80fd5b806318160ddd116102fe578063203e727e116102d9578063203e727e146104e157806323b872dd1461050057806327c8f8351461051f578063313ce56714610534575f80fd5b806318160ddd1461048f5780631816467f146104ad5780631f3fed8f146104cc575f80fd5b8063095ea7b311610339578063095ea7b3146103c85780630f9af3c6146103f757806310d5de53146104165780631694505e14610444575f80fd5b806301339c211461036957806302dbd8f81461037f57806306fdde031461039e575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037d610a38565b005b34801561038a575f80fd5b5061037d6103993660046123e3565b610ac9565b3480156103a9575f80fd5b506103b2610b1c565b6040516103bf9190612403565b60405180910390f35b3480156103d3575f80fd5b506103e76103e2366004612462565b610bac565b60405190151581526020016103bf565b348015610402575f80fd5b5061037d610411366004612462565b610bc2565b348015610421575f80fd5b506103e761043036600461248c565b60196020525f908152604090205460ff1681565b34801561044f575f80fd5b506104777f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103bf565b34801561049a575f80fd5b506002545b6040519081526020016103bf565b3480156104b8575f80fd5b5061037d6104c736600461248c565b610c52565b3480156104d7575f80fd5b5061049f60155481565b3480156104ec575f80fd5b5061037d6104fb3660046124ae565b610cd8565b34801561050b575f80fd5b506103e761051a3660046124c5565b610d1a565b34801561052a575f80fd5b5061047761dead81565b34801561053f575f80fd5b50604051601281526020016103bf565b34801561055a575f80fd5b506103e7610569366004612462565b610dc2565b348015610579575f80fd5b506104777f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ac575f80fd5b50600b546103e79060ff1681565b3480156105c5575f80fd5b506103e76105d436600461248c565b6001600160a01b03165f9081526018602052604090205460ff1690565b3480156105fc575f80fd5b5061037d61060b36600461248c565b610dfd565b34801561061b575f80fd5b5061037d61062a3660046123e3565b610e84565b34801561063a575f80fd5b50601754610477906001600160a01b031681565b348015610659575f80fd5b5061049f60125481565b34801561066e575f80fd5b50600b546103e79062010000900460ff1681565b34801561068d575f80fd5b5061049f61069c36600461248c565b6001600160a01b03165f9081526020819052604090205490565b3480156106c1575f80fd5b5061037d610ed3565b3480156106d5575f80fd5b506103e7610f08565b3480156106e9575f80fd5b5061037d6106f8366004612510565b610f44565b348015610708575f80fd5b50600654610477906001600160a01b031681565b348015610727575f80fd5b5061049f600f5481565b34801561073c575f80fd5b506005546001600160a01b0316610477565b348015610759575f80fd5b50600754610477906001600160a01b031681565b348015610778575f80fd5b5061049f60135481565b34801561078d575f80fd5b5061037d61079c366004612547565b610f98565b3480156107ac575f80fd5b506103b2610fde565b3480156107c0575f80fd5b5061037d6107cf366004612510565b610fed565b3480156107df575f80fd5b5061049f60105481565b3480156107f4575f80fd5b5061037d610803366004612462565b6110c8565b348015610813575f80fd5b5061049f60165481565b348015610828575f80fd5b5061049f60145481565b34801561083d575f80fd5b506103e761084c366004612462565b61120c565b34801561085c575f80fd5b506103e761086b366004612462565b6112a4565b34801561087b575f80fd5b5061037d61088a36600461248c565b6112b0565b34801561089a575f80fd5b506103e76108a936600461248c565b601a6020525f908152604090205460ff1681565b3480156108c8575f80fd5b50600b546103e790610100900460ff1681565b3480156108e6575f80fd5b5061049f600c5481565b3480156108fb575f80fd5b5061037d61090a366004612510565b611336565b34801561091a575f80fd5b5061037d6109293660046124ae565b6113e8565b348015610939575f80fd5b5061049f600d5481565b34801561094e575f80fd5b5061049f60085481565b348015610963575f80fd5b506103e76109723660046124ae565b61142a565b348015610982575f80fd5b5061049f600e5481565b348015610997575f80fd5b5061049f6109a6366004612562565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156109db575f80fd5b5061049f60095481565b3480156109f0575f80fd5b5061037d6109ff3660046124ae565b611473565b348015610a0f575f80fd5b5061037d610a1e36600461248c565b611508565b348015610a2e575f80fd5b5061049f600a5481565b6005546001600160a01b03163314610a6b5760405162461bcd60e51b8152600401610a629061258e565b60405180910390fd5b600c5415610aae5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610a62565b43600c5542600d55600b805462ffff00191662010100179055565b6005546001600160a01b03163314610af35760405162461bcd60e51b8152600401610a629061258e565b60138290556014819055610b0781836125d7565b601281905560191015610b18575f80fd5b5050565b606060038054610b2b906125ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610b57906125ea565b8015610ba25780601f10610b7957610100808354040283529160200191610ba2565b820191905f5260205f20905b815481529060010190602001808311610b8557829003601f168201915b5050505050905090565b5f610bb83384846115a3565b5060015b92915050565b6005546001600160a01b03163314610bec5760405162461bcd60e51b8152600401610a629061258e565b6017546040516307cd79e360e11b81526001600160a01b0384811660048301526024820184905290911690630f9af3c6906044015b5f604051808303815f87803b158015610c38575f80fd5b505af1158015610c4a573d5f803e3d5ffd5b505050505050565b6005546001600160a01b03163314610c7c5760405162461bcd60e51b8152600401610a629061258e565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d025760405162461bcd60e51b8152600401610a629061258e565b610d1481670de0b6b3a7640000612622565b60085550565b5f610d268484846116c6565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610daa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a62565b610db785338584036115a3565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610bb8918590610df89086906125d7565b6115a3565b6017546001600160a01b031615610e625760405162461bcd60e51b8152602060048201526024808201527f52657761726420636f6e74726163742068617320616c7265616479206265656e604482015263081cd95d60e21b6064820152608401610a62565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610eae5760405162461bcd60e51b8152600401610a629061258e565b600f8290556010819055610ec281836125d7565b600e81905560191015610b18575f80fd5b6005546001600160a01b03163314610efd5760405162461bcd60e51b8152600401610a629061258e565b610f065f611ee2565b565b6005545f906001600160a01b03163314610f345760405162461bcd60e51b8152600401610a629061258e565b50600b805460ff19169055600190565b6005546001600160a01b03163314610f6e5760405162461bcd60e51b8152600401610a629061258e565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610a629061258e565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b2b906125ea565b6005546001600160a01b031633146110175760405162461bcd60e51b8152600401610a629061258e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110be5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a62565b610b188282611f33565b6005546001600160a01b031633146110f25760405162461bcd60e51b8152600401610a629061258e565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa158015611136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190612639565b10156111995760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a62565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af11580156111e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112079190612650565b505050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561128d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a62565b61129a33858584036115a3565b5060019392505050565b5f610bb83384846116c6565b6005546001600160a01b031633146112da5760405162461bcd60e51b8152600401610a629061258e565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b73737cb575824ca83d58a7add2de4c19dc03000000331461138a5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610a62565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114125760405162461bcd60e51b8152600401610a629061258e565b61142481670de0b6b3a7640000612622565b600a5550565b6005545f906001600160a01b031633146114565760405162461bcd60e51b8152600401610a629061258e565b61146882670de0b6b3a7640000612622565b600955506001919050565b6005546001600160a01b0316331461149d5760405162461bcd60e51b8152600401610a629061258e565b804710156114de5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a62565b604051339082156108fc029083905f818181858888f19350505050158015610b18573d5f803e3d5ffd5b6005546001600160a01b031633146115325760405162461bcd60e51b8152600401610a629061258e565b6001600160a01b0381166115975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a62565b6115a081611ee2565b50565b6001600160a01b0383166116055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a62565b6001600160a01b0382166116665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a62565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116ec5760405162461bcd60e51b8152600401610a629061266b565b6001600160a01b0382166117125760405162461bcd60e51b8152600401610a62906126b0565b805f036117245761120783835f611f86565b600b5460ff1615611a91576005546001600160a01b0384811691161480159061175b57506005546001600160a01b03838116911614155b801561176f57506001600160a01b03821615155b801561178657506001600160a01b03821661dead14155b801561179c5750600554600160a01b900460ff16155b15611a9157600b54610100900460ff16611832576001600160a01b0383165f9081526018602052604090205460ff16806117ed57506001600160a01b0382165f9081526018602052604090205460ff165b6118325760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a62565b6001600160a01b0383165f908152601a602052604090205460ff16801561187157506001600160a01b0382165f9081526019602052604090205460ff16155b15611954576008548111156118e65760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a62565b600a546001600160a01b0383165f9081526020819052604090205461190b90836125d7565b111561194f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a62565b611a91565b6001600160a01b0382165f908152601a602052604090205460ff16801561199357506001600160a01b0383165f9081526019602052604090205460ff16155b15611a095760085481111561194f5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a62565b6001600160a01b0382165f9081526019602052604090205460ff16611a9157600a546001600160a01b0383165f90815260208190526040902054611a4d90836125d7565b1115611a915760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a62565b305f9081526020819052604090205460095481108015908190611abc5750600b5462010000900460ff165b8015611ad25750600554600160a01b900460ff16155b8015611af657506001600160a01b0385165f908152601a602052604090205460ff16155b8015611b1a57506001600160a01b0385165f9081526018602052604090205460ff16155b8015611b3e57506001600160a01b0384165f9081526018602052604090205460ff16155b15611b6c576005805460ff60a01b1916600160a01b179055611b5e6120d9565b6005805460ff60a01b191690555b6005546001600160a01b03868116911614801590611b9357506001600160a01b0385163014155b15611c94576001600160a01b0385165f908152601a602052604081205460ff1615611c57576001600160a01b0385165f908152601160205260408120549003611bf1576001600160a01b0385165f9081526011602052604090204290555b6017546040516307cd79e360e11b81526001600160a01b0387811660048301526024820187905290911690630f9af3c6906044015f604051808303815f87803b158015611c3c575f80fd5b505af1158015611c4e573d5f803e3d5ffd5b50505050600190505b6001600160a01b0385165f908152601a602052604090205460ff1615611c8457611c8086612201565b5060015b80611c9257611c9286612201565b505b6005546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611ce057506001600160a01b0385165f9081526018602052604090205460ff165b15611ce857505f5b5f8115611ece576001600160a01b0386165f908152601a602052604090205460ff168015611d1757505f601254115b15611e07576001600160a01b0387165f90815260116020526040902054611d4190620151806125d7565b421080611d6357506001600160a01b0387165f90815260116020526040902054155b15611d86576064611d75866014612622565b611d7f91906126f3565b9050611da3565b606460125486611d969190612622565b611da091906126f3565b90505b601254601354611db39083612622565b611dbd91906126f3565b60155f828254611dcd91906125d7565b9091555050601254601454611de29083612622565b611dec91906126f3565b60165f828254611dfc91906125d7565b90915550611eb09050565b6001600160a01b0387165f908152601a602052604090205460ff168015611e2f57505f600e54115b15611eb0576064600e5486611e449190612622565b611e4e91906126f3565b9050600e54600f5482611e619190612622565b611e6b91906126f3565b60155f828254611e7b91906125d7565b9091555050600e54601054611e909083612622565b611e9a91906126f3565b60165f828254611eaa91906125d7565b90915550505b8015611ec157611ec1873083611f86565b611ecb8186612712565b94505b611ed9878787611f86565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fac5760405162461bcd60e51b8152600401610a629061266b565b6001600160a01b038216611fd25760405162461bcd60e51b8152600401610a62906126b0565b6001600160a01b0383165f90815260208190526040902054818110156120495760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a62565b6001600160a01b038085165f9081526020819052604080822085850390559185168152908120805484929061207f9084906125d7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120cb91815260200190565b60405180910390a350505050565b305f9081526020819052604081205490505f6016546015546120fb91906125d7565b90505f821580612109575081155b1561211357505050565b6009548311156121235760095492505b8261212d8161225e565b60155447905f9085906121409084612622565b61214a91906126f3565b5f601581905560168190556006546040519293506001600160a01b031691839181818185875af1925050503d805f811461219f576040519150601f19603f3d011682016040523d82523d5f602084013e6121a4565b606091505b50506007546040519195506001600160a01b03169047905f81818185875af1925050503d805f81146121f1576040519150601f19603f3d011682016040523d82523d5f602084013e6121f6565b606091505b505050505050505050565b601754604051630fbebd6960e31b81526001600160a01b03838116600483015290911690637df5eb48906024015f604051808303815f87803b158015612245575f80fd5b505af1158015612257573d5f803e3d5ffd5b5050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061229157612291612725565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123319190612739565b8160018151811061234457612344612725565b60200260200101906001600160a01b031690816001600160a01b03168152505061238f307f0000000000000000000000000000000000000000000000000000000000000000846115a3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790610c219085905f90869030904290600401612754565b5f80604083850312156123f4575f80fd5b50508035926020909101359150565b5f6020808352835180828501525f5b8181101561242e57858101830151858201604001528201612412565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115a0575f80fd5b5f8060408385031215612473575f80fd5b823561247e8161244e565b946020939093013593505050565b5f6020828403121561249c575f80fd5b81356124a78161244e565b9392505050565b5f602082840312156124be575f80fd5b5035919050565b5f805f606084860312156124d7575f80fd5b83356124e28161244e565b925060208401356124f28161244e565b929592945050506040919091013590565b80151581146115a0575f80fd5b5f8060408385031215612521575f80fd5b823561252c8161244e565b9150602083013561253c81612503565b809150509250929050565b5f60208284031215612557575f80fd5b81356124a781612503565b5f8060408385031215612573575f80fd5b823561257e8161244e565b9150602083013561253c8161244e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bbc57610bbc6125c3565b600181811c908216806125fe57607f821691505b60208210810361261c57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610bbc57610bbc6125c3565b5f60208284031215612649575f80fd5b5051919050565b5f60208284031215612660575f80fd5b81516124a781612503565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f8261270d57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610bbc57610bbc6125c3565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612749575f80fd5b81516124a78161244e565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156127a25784516001600160a01b03168352938301939183019160010161277d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e3cb80459ce1d857964711bc92ce5e702b27d7f93a0b4af46fa34345a3a2ab4e64736f6c63430008150033

Deployed Bytecode

0x60806040526004361061035e575f3560e01c80637bce5a04116101bd578063b62496f5116100f2578063d257b34f11610092578063e2f456051161006d578063e2f45605146109d0578063f14210a6146109e5578063f2fde38b14610a04578063f8b45b0514610a23575f80fd5b8063d257b34f14610958578063d85ba06314610977578063dd62ed3e1461098c575f80fd5b8063c0246668116100cd578063c0246668146108f0578063c18bc1951461090f578063c6d2577d1461092e578063c8c8ebe414610943575f80fd5b8063b62496f51461088f578063bbc0c742146108bd578063bf56b371146108db575f80fd5b80639c3b4fdc1161015d578063a0d82dc511610138578063a0d82dc51461081d578063a457c2d714610832578063a9059cbb14610851578063aacebbe314610870575f80fd5b80639c3b4fdc146107d45780639e281a98146107e95780639fccce3214610808575f80fd5b80639213691311610198578063921369131461076d578063924de9b71461078257806395d89b41146107a15780639a7a23d6146107b5575f80fd5b80637bce5a041461071c5780638da5cb5b146107315780638ea5220f1461074e575f80fd5b806339509351116102935780636a486a8e11610233578063715018a61161020e578063715018a6146106b6578063751039fc146106ca5780637571336a146106de57806375f0a874146106fd575f80fd5b80636a486a8e1461064e5780636ddd17131461066357806370a0823114610682575f80fd5b80634fbee1931161026e5780634fbee193146105ba57806351508f0a146105f157806366ca9b83146106105780636939850e1461062f575f80fd5b8063395093511461054f57806349bd5a5e1461056e5780634a62bb65146105a1575f80fd5b806318160ddd116102fe578063203e727e116102d9578063203e727e146104e157806323b872dd1461050057806327c8f8351461051f578063313ce56714610534575f80fd5b806318160ddd1461048f5780631816467f146104ad5780631f3fed8f146104cc575f80fd5b8063095ea7b311610339578063095ea7b3146103c85780630f9af3c6146103f757806310d5de53146104165780631694505e14610444575f80fd5b806301339c211461036957806302dbd8f81461037f57806306fdde031461039e575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037d610a38565b005b34801561038a575f80fd5b5061037d6103993660046123e3565b610ac9565b3480156103a9575f80fd5b506103b2610b1c565b6040516103bf9190612403565b60405180910390f35b3480156103d3575f80fd5b506103e76103e2366004612462565b610bac565b60405190151581526020016103bf565b348015610402575f80fd5b5061037d610411366004612462565b610bc2565b348015610421575f80fd5b506103e761043036600461248c565b60196020525f908152604090205460ff1681565b34801561044f575f80fd5b506104777f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103bf565b34801561049a575f80fd5b506002545b6040519081526020016103bf565b3480156104b8575f80fd5b5061037d6104c736600461248c565b610c52565b3480156104d7575f80fd5b5061049f60155481565b3480156104ec575f80fd5b5061037d6104fb3660046124ae565b610cd8565b34801561050b575f80fd5b506103e761051a3660046124c5565b610d1a565b34801561052a575f80fd5b5061047761dead81565b34801561053f575f80fd5b50604051601281526020016103bf565b34801561055a575f80fd5b506103e7610569366004612462565b610dc2565b348015610579575f80fd5b506104777f000000000000000000000000d818dc67659348e6ea4cc4b9f3e5b88cc19bc2e281565b3480156105ac575f80fd5b50600b546103e79060ff1681565b3480156105c5575f80fd5b506103e76105d436600461248c565b6001600160a01b03165f9081526018602052604090205460ff1690565b3480156105fc575f80fd5b5061037d61060b36600461248c565b610dfd565b34801561061b575f80fd5b5061037d61062a3660046123e3565b610e84565b34801561063a575f80fd5b50601754610477906001600160a01b031681565b348015610659575f80fd5b5061049f60125481565b34801561066e575f80fd5b50600b546103e79062010000900460ff1681565b34801561068d575f80fd5b5061049f61069c36600461248c565b6001600160a01b03165f9081526020819052604090205490565b3480156106c1575f80fd5b5061037d610ed3565b3480156106d5575f80fd5b506103e7610f08565b3480156106e9575f80fd5b5061037d6106f8366004612510565b610f44565b348015610708575f80fd5b50600654610477906001600160a01b031681565b348015610727575f80fd5b5061049f600f5481565b34801561073c575f80fd5b506005546001600160a01b0316610477565b348015610759575f80fd5b50600754610477906001600160a01b031681565b348015610778575f80fd5b5061049f60135481565b34801561078d575f80fd5b5061037d61079c366004612547565b610f98565b3480156107ac575f80fd5b506103b2610fde565b3480156107c0575f80fd5b5061037d6107cf366004612510565b610fed565b3480156107df575f80fd5b5061049f60105481565b3480156107f4575f80fd5b5061037d610803366004612462565b6110c8565b348015610813575f80fd5b5061049f60165481565b348015610828575f80fd5b5061049f60145481565b34801561083d575f80fd5b506103e761084c366004612462565b61120c565b34801561085c575f80fd5b506103e761086b366004612462565b6112a4565b34801561087b575f80fd5b5061037d61088a36600461248c565b6112b0565b34801561089a575f80fd5b506103e76108a936600461248c565b601a6020525f908152604090205460ff1681565b3480156108c8575f80fd5b50600b546103e790610100900460ff1681565b3480156108e6575f80fd5b5061049f600c5481565b3480156108fb575f80fd5b5061037d61090a366004612510565b611336565b34801561091a575f80fd5b5061037d6109293660046124ae565b6113e8565b348015610939575f80fd5b5061049f600d5481565b34801561094e575f80fd5b5061049f60085481565b348015610963575f80fd5b506103e76109723660046124ae565b61142a565b348015610982575f80fd5b5061049f600e5481565b348015610997575f80fd5b5061049f6109a6366004612562565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156109db575f80fd5b5061049f60095481565b3480156109f0575f80fd5b5061037d6109ff3660046124ae565b611473565b348015610a0f575f80fd5b5061037d610a1e36600461248c565b611508565b348015610a2e575f80fd5b5061049f600a5481565b6005546001600160a01b03163314610a6b5760405162461bcd60e51b8152600401610a629061258e565b60405180910390fd5b600c5415610aae5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610a62565b43600c5542600d55600b805462ffff00191662010100179055565b6005546001600160a01b03163314610af35760405162461bcd60e51b8152600401610a629061258e565b60138290556014819055610b0781836125d7565b601281905560191015610b18575f80fd5b5050565b606060038054610b2b906125ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610b57906125ea565b8015610ba25780601f10610b7957610100808354040283529160200191610ba2565b820191905f5260205f20905b815481529060010190602001808311610b8557829003601f168201915b5050505050905090565b5f610bb83384846115a3565b5060015b92915050565b6005546001600160a01b03163314610bec5760405162461bcd60e51b8152600401610a629061258e565b6017546040516307cd79e360e11b81526001600160a01b0384811660048301526024820184905290911690630f9af3c6906044015b5f604051808303815f87803b158015610c38575f80fd5b505af1158015610c4a573d5f803e3d5ffd5b505050505050565b6005546001600160a01b03163314610c7c5760405162461bcd60e51b8152600401610a629061258e565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d025760405162461bcd60e51b8152600401610a629061258e565b610d1481670de0b6b3a7640000612622565b60085550565b5f610d268484846116c6565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610daa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a62565b610db785338584036115a3565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610bb8918590610df89086906125d7565b6115a3565b6017546001600160a01b031615610e625760405162461bcd60e51b8152602060048201526024808201527f52657761726420636f6e74726163742068617320616c7265616479206265656e604482015263081cd95d60e21b6064820152608401610a62565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610eae5760405162461bcd60e51b8152600401610a629061258e565b600f8290556010819055610ec281836125d7565b600e81905560191015610b18575f80fd5b6005546001600160a01b03163314610efd5760405162461bcd60e51b8152600401610a629061258e565b610f065f611ee2565b565b6005545f906001600160a01b03163314610f345760405162461bcd60e51b8152600401610a629061258e565b50600b805460ff19169055600190565b6005546001600160a01b03163314610f6e5760405162461bcd60e51b8152600401610a629061258e565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610a629061258e565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b2b906125ea565b6005546001600160a01b031633146110175760405162461bcd60e51b8152600401610a629061258e565b7f000000000000000000000000d818dc67659348e6ea4cc4b9f3e5b88cc19bc2e26001600160a01b0316826001600160a01b0316036110be5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a62565b610b188282611f33565b6005546001600160a01b031633146110f25760405162461bcd60e51b8152600401610a629061258e565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa158015611136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190612639565b10156111995760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a62565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af11580156111e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112079190612650565b505050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561128d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a62565b61129a33858584036115a3565b5060019392505050565b5f610bb83384846116c6565b6005546001600160a01b031633146112da5760405162461bcd60e51b8152600401610a629061258e565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b73737cb575824ca83d58a7add2de4c19dc03000000331461138a5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610a62565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114125760405162461bcd60e51b8152600401610a629061258e565b61142481670de0b6b3a7640000612622565b600a5550565b6005545f906001600160a01b031633146114565760405162461bcd60e51b8152600401610a629061258e565b61146882670de0b6b3a7640000612622565b600955506001919050565b6005546001600160a01b0316331461149d5760405162461bcd60e51b8152600401610a629061258e565b804710156114de5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a62565b604051339082156108fc029083905f818181858888f19350505050158015610b18573d5f803e3d5ffd5b6005546001600160a01b031633146115325760405162461bcd60e51b8152600401610a629061258e565b6001600160a01b0381166115975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a62565b6115a081611ee2565b50565b6001600160a01b0383166116055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a62565b6001600160a01b0382166116665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a62565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116ec5760405162461bcd60e51b8152600401610a629061266b565b6001600160a01b0382166117125760405162461bcd60e51b8152600401610a62906126b0565b805f036117245761120783835f611f86565b600b5460ff1615611a91576005546001600160a01b0384811691161480159061175b57506005546001600160a01b03838116911614155b801561176f57506001600160a01b03821615155b801561178657506001600160a01b03821661dead14155b801561179c5750600554600160a01b900460ff16155b15611a9157600b54610100900460ff16611832576001600160a01b0383165f9081526018602052604090205460ff16806117ed57506001600160a01b0382165f9081526018602052604090205460ff165b6118325760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a62565b6001600160a01b0383165f908152601a602052604090205460ff16801561187157506001600160a01b0382165f9081526019602052604090205460ff16155b15611954576008548111156118e65760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a62565b600a546001600160a01b0383165f9081526020819052604090205461190b90836125d7565b111561194f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a62565b611a91565b6001600160a01b0382165f908152601a602052604090205460ff16801561199357506001600160a01b0383165f9081526019602052604090205460ff16155b15611a095760085481111561194f5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a62565b6001600160a01b0382165f9081526019602052604090205460ff16611a9157600a546001600160a01b0383165f90815260208190526040902054611a4d90836125d7565b1115611a915760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a62565b305f9081526020819052604090205460095481108015908190611abc5750600b5462010000900460ff165b8015611ad25750600554600160a01b900460ff16155b8015611af657506001600160a01b0385165f908152601a602052604090205460ff16155b8015611b1a57506001600160a01b0385165f9081526018602052604090205460ff16155b8015611b3e57506001600160a01b0384165f9081526018602052604090205460ff16155b15611b6c576005805460ff60a01b1916600160a01b179055611b5e6120d9565b6005805460ff60a01b191690555b6005546001600160a01b03868116911614801590611b9357506001600160a01b0385163014155b15611c94576001600160a01b0385165f908152601a602052604081205460ff1615611c57576001600160a01b0385165f908152601160205260408120549003611bf1576001600160a01b0385165f9081526011602052604090204290555b6017546040516307cd79e360e11b81526001600160a01b0387811660048301526024820187905290911690630f9af3c6906044015f604051808303815f87803b158015611c3c575f80fd5b505af1158015611c4e573d5f803e3d5ffd5b50505050600190505b6001600160a01b0385165f908152601a602052604090205460ff1615611c8457611c8086612201565b5060015b80611c9257611c9286612201565b505b6005546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611ce057506001600160a01b0385165f9081526018602052604090205460ff165b15611ce857505f5b5f8115611ece576001600160a01b0386165f908152601a602052604090205460ff168015611d1757505f601254115b15611e07576001600160a01b0387165f90815260116020526040902054611d4190620151806125d7565b421080611d6357506001600160a01b0387165f90815260116020526040902054155b15611d86576064611d75866014612622565b611d7f91906126f3565b9050611da3565b606460125486611d969190612622565b611da091906126f3565b90505b601254601354611db39083612622565b611dbd91906126f3565b60155f828254611dcd91906125d7565b9091555050601254601454611de29083612622565b611dec91906126f3565b60165f828254611dfc91906125d7565b90915550611eb09050565b6001600160a01b0387165f908152601a602052604090205460ff168015611e2f57505f600e54115b15611eb0576064600e5486611e449190612622565b611e4e91906126f3565b9050600e54600f5482611e619190612622565b611e6b91906126f3565b60155f828254611e7b91906125d7565b9091555050600e54601054611e909083612622565b611e9a91906126f3565b60165f828254611eaa91906125d7565b90915550505b8015611ec157611ec1873083611f86565b611ecb8186612712565b94505b611ed9878787611f86565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fac5760405162461bcd60e51b8152600401610a629061266b565b6001600160a01b038216611fd25760405162461bcd60e51b8152600401610a62906126b0565b6001600160a01b0383165f90815260208190526040902054818110156120495760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a62565b6001600160a01b038085165f9081526020819052604080822085850390559185168152908120805484929061207f9084906125d7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120cb91815260200190565b60405180910390a350505050565b305f9081526020819052604081205490505f6016546015546120fb91906125d7565b90505f821580612109575081155b1561211357505050565b6009548311156121235760095492505b8261212d8161225e565b60155447905f9085906121409084612622565b61214a91906126f3565b5f601581905560168190556006546040519293506001600160a01b031691839181818185875af1925050503d805f811461219f576040519150601f19603f3d011682016040523d82523d5f602084013e6121a4565b606091505b50506007546040519195506001600160a01b03169047905f81818185875af1925050503d805f81146121f1576040519150601f19603f3d011682016040523d82523d5f602084013e6121f6565b606091505b505050505050505050565b601754604051630fbebd6960e31b81526001600160a01b03838116600483015290911690637df5eb48906024015f604051808303815f87803b158015612245575f80fd5b505af1158015612257573d5f803e3d5ffd5b5050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061229157612291612725565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123319190612739565b8160018151811061234457612344612725565b60200260200101906001600160a01b031690816001600160a01b03168152505061238f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115a3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790610c219085905f90869030904290600401612754565b5f80604083850312156123f4575f80fd5b50508035926020909101359150565b5f6020808352835180828501525f5b8181101561242e57858101830151858201604001528201612412565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115a0575f80fd5b5f8060408385031215612473575f80fd5b823561247e8161244e565b946020939093013593505050565b5f6020828403121561249c575f80fd5b81356124a78161244e565b9392505050565b5f602082840312156124be575f80fd5b5035919050565b5f805f606084860312156124d7575f80fd5b83356124e28161244e565b925060208401356124f28161244e565b929592945050506040919091013590565b80151581146115a0575f80fd5b5f8060408385031215612521575f80fd5b823561252c8161244e565b9150602083013561253c81612503565b809150509250929050565b5f60208284031215612557575f80fd5b81356124a781612503565b5f8060408385031215612573575f80fd5b823561257e8161244e565b9150602083013561253c8161244e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bbc57610bbc6125c3565b600181811c908216806125fe57607f821691505b60208210810361261c57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610bbc57610bbc6125c3565b5f60208284031215612649575f80fd5b5051919050565b5f60208284031215612660575f80fd5b81516124a781612503565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f8261270d57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610bbc57610bbc6125c3565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612749575f80fd5b81516124a78161244e565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156127a25784516001600160a01b03168352938301939183019160010161277d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e3cb80459ce1d857964711bc92ce5e702b27d7f93a0b4af46fa34345a3a2ab4e64736f6c63430008150033

Deployed Bytecode Sourcemap

15221:14590:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19226:244;;;;;;;;;;;;;:::i;:::-;;20827:281;;;;;;;;;;-1:-1:-1;20827:281:0;;;;;:::i;:::-;;:::i;5111:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6583:210;;;;;;;;;;-1:-1:-1;6583:210:0;;;;;:::i;:::-;;:::i;:::-;;;1441:14:1;;1434:22;1416:41;;1404:2;1389:18;6583:210:0;1276:187:1;22617:169:0;;;;;;;;;;-1:-1:-1;22617:169:0;;;;;:::i;:::-;;:::i;16416:63::-;;;;;;;;;;-1:-1:-1;16416:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15262:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1911:32:1;;;1893:51;;1881:2;1866:18;15262:51:0;1720:230:1;5600:108:0;;;;;;;;;;-1:-1:-1;5688:12:0;;5600:108;;;2101:25:1;;;2089:2;2074:18;5600:108:0;1955:177:1;22056:157:0;;;;;;;;;;-1:-1:-1;22056:157:0;;;;;:::i;:::-;;:::i;16135:33::-;;;;;;;;;;;;;;;;19922:122;;;;;;;;;;-1:-1:-1;19922:122:0;;;;;:::i;:::-;;:::i;6801:529::-;;;;;;;;;;-1:-1:-1;6801:529:0;;;;;:::i;:::-;;:::i;15365:53::-;;;;;;;;;;;;15411:6;15365:53;;5442:93;;;;;;;;;;-1:-1:-1;5442:93:0;;5525:2;3133:36:1;;3121:2;3106:18;5442:93:0;2991:184:1;7338:297:0;;;;;;;;;;-1:-1:-1;7338:297:0;;;;;:::i;:::-;;:::i;15320:38::-;;;;;;;;;;;;;;;15642:33;;;;;;;;;;-1:-1:-1;15642:33:0;;;;;;;;22221:126;;;;;;;;;;-1:-1:-1;22221:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;22311:28:0;22287:4;22311:28;;;:19;:28;;;;;;;;;22221:126;22381:228;;;;;;;;;;-1:-1:-1;22381:228:0;;;;;:::i;:::-;;:::i;20545:274::-;;;;;;;;;;-1:-1:-1;20545:274:0;;;;;:::i;:::-;;:::i;16211:35::-;;;;;;;;;;-1:-1:-1;16211:35:0;;;;-1:-1:-1;;;;;16211:35:0;;;16016:32;;;;;;;;;;;;;;;;15722:31;;;;;;;;;;-1:-1:-1;15722:31:0;;;;;;;;;;;5771:177;;;;;;;;;;-1:-1:-1;5771:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;5922:18:0;5890:7;5922:18;;;;;;;;;;;;5771:177;1548:103;;;;;;;;;;;;;:::i;19522:121::-;;;;;;;;;;;;;:::i;20174:167::-;;;;;;;;;;-1:-1:-1;20174:167:0;;;;;:::i;:::-;;:::i;15457:30::-;;;;;;;;;;-1:-1:-1;15457:30:0;;;;-1:-1:-1;;;;;15457:30:0;;;15876:35;;;;;;;;;;;;;;;;1240:87;;;;;;;;;;-1:-1:-1;1313:6:0;;-1:-1:-1;;;;;1313:6:0;1240:87;;15494:24;;;;;;;;;;-1:-1:-1;15494:24:0;;;;-1:-1:-1;;;;;15494:24:0;;;16055:35;;;;;;;;;;;;;;;;20437:100;;;;;;;;;;-1:-1:-1;20437:100:0;;;;;:::i;:::-;;:::i;5330:104::-;;;;;;;;;;;;;:::i;21309:304::-;;;;;;;;;;-1:-1:-1;21309:304:0;;;;;:::i;:::-;;:::i;15918:28::-;;;;;;;;;;;;;;;;29599:209;;;;;;;;;;-1:-1:-1;29599:209:0;;;;;:::i;:::-;;:::i;16175:27::-;;;;;;;;;;;;;;;;16097:29;;;;;;;;;;;;;;;;7643:482;;;;;;;;;;-1:-1:-1;7643:482:0;;;;;:::i;:::-;;:::i;5956:216::-;;;;;;;;;;-1:-1:-1;5956:216:0;;;;;:::i;:::-;;:::i;21817:231::-;;;;;;;;;;-1:-1:-1;21817:231:0;;;;;:::i;:::-;;:::i;16637:57::-;;;;;;;;;;-1:-1:-1;16637:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15682:33;;;;;;;;;;-1:-1:-1;15682:33:0;;;;;;;;;;;15762:25;;;;;;;;;;;;;;;;21116:185;;;;;;;;;;-1:-1:-1;21116:185:0;;;;;:::i;:::-;;:::i;20052:114::-;;;;;;;;;;-1:-1:-1;20052:114:0;;;;;:::i;:::-;;:::i;15794:34::-;;;;;;;;;;;;;;;;15527:35;;;;;;;;;;;;;;;;19713:201;;;;;;;;;;-1:-1:-1;19713:201:0;;;;;:::i;:::-;;:::i;15837:32::-;;;;;;;;;;;;;;;;6235:201;;;;;;;;;;-1:-1:-1;6235:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;6401:18:0;;;6369:7;6401:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6235:201;15569:33;;;;;;;;;;;;;;;;29361:183;;;;;;;;;;-1:-1:-1;29361:183:0;;;;;:::i;:::-;;:::i;1806:238::-;;;;;;;;;;-1:-1:-1;1806:238:0;;;;;:::i;:::-;;:::i;15609:24::-;;;;;;;;;;;;;;;;19226:244;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;;;;;;;;;19282:10:::1;::::0;:15;19274:44:::1;;;::::0;-1:-1:-1;;;19274:44:0;;5457:2:1;19274:44:0::1;::::0;::::1;5439:21:1::0;5496:2;5476:18;;;5469:30;-1:-1:-1;;;5515:18:1;;;5508:46;5571:18;;19274:44:0::1;5255:340:1::0;19274:44:0::1;19342:12;19329:10;:25:::0;19387:15:::1;19365:19;:37:::0;19413:13:::1;:20:::0;;-1:-1:-1;;19444:18:0;;;;;19226:244::o;20827:281::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;20944:16:::1;:32:::0;;;20987:10:::1;:20:::0;;;21034:29:::1;21000:7:::0;20963:13;21034:29:::1;:::i;:::-;21018:13;:45:::0;;;21097:2:::1;-1:-1:-1::0;21082:17:0::1;21074:26;;;::::0;::::1;;20827:281:::0;;:::o;5111:100::-;5165:13;5198:5;5191:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5111:100;:::o;6583:210::-;6702:4;6724:39;678:10;6747:7;6756:6;6724:8;:39::i;:::-;-1:-1:-1;6781:4:0;6583:210;;;;;:::o;22617:169::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;22730:13:::1;::::0;:48:::1;::::0;-1:-1:-1;;;22730:48:0;;-1:-1:-1;;;;;6439:32:1;;;22730:48:0::1;::::0;::::1;6421:51:1::0;6488:18;;;6481:34;;;22730:13:0;;::::1;::::0;:31:::1;::::0;6394:18:1;;22730:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22617:169:::0;;:::o;22056:157::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;22163:9:::1;::::0;22135:38:::1;::::0;-1:-1:-1;;;;;22163:9:0;;::::1;::::0;22135:38;::::1;::::0;::::1;::::0;22163:9:::1;::::0;22135:38:::1;22184:9;:21:::0;;-1:-1:-1;;;;;;22184:21:0::1;-1:-1:-1::0;;;;;22184:21:0;;;::::1;::::0;;;::::1;::::0;;22056:157::o;19922:122::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;20019:17:::1;:6:::0;20029::::1;20019:17;:::i;:::-;19996:20;:40:::0;-1:-1:-1;19922:122:0:o;6801:529::-;6941:4;6958:36;6968:6;6976:9;6987:6;6958:9;:36::i;:::-;-1:-1:-1;;;;;7034:19:0;;7007:24;7034:19;;;:11;:19;;;;;;;;678:10;7034:33;;;;;;;;7100:26;;;;7078:116;;;;-1:-1:-1;;;7078:116:0;;6901:2:1;7078:116:0;;;6883:21:1;6940:2;6920:18;;;6913:30;6979:34;6959:18;;;6952:62;-1:-1:-1;;;7030:18:1;;;7023:38;7078:19;;:116:0;6699:404:1;7078:116:0;7230:57;7239:6;678:10;7280:6;7261:16;:25;7230:8;:57::i;:::-;-1:-1:-1;7318:4:0;;6801:529;-1:-1:-1;;;;6801:529:0:o;7338:297::-;678:10;7453:4;7547:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7547:34:0;;;;;;;;;;7453:4;;7475:130;;7525:7;;7547:47;;7584:10;;7547:47;:::i;:::-;7475:8;:130::i;22381:228::-;22460:13;;-1:-1:-1;;;;;22460:13:0;:43;22452:92;;;;-1:-1:-1;;;22452:92:0;;7310:2:1;22452:92:0;;;7292:21:1;7349:2;7329:18;;;7322:30;7388:34;7368:18;;;7361:62;-1:-1:-1;;;7439:18:1;;;7432:34;7483:19;;22452:92:0;7108:400:1;22452:92:0;22555:13;:46;;-1:-1:-1;;;;;;22555:46:0;-1:-1:-1;;;;;22555:46:0;;;;;;;;;;22381:228::o;20545:274::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;20661:15:::1;:31:::0;;;20703:9:::1;:19:::0;;;20748:27:::1;20715:7:::0;20679:13;20748:27:::1;:::i;:::-;20733:12;:42:::0;;;20808:2:::1;-1:-1:-1::0;20794:16:0::1;20786:25;;;::::0;::::1;1548:103:::0;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;1613:30:::1;1640:1;1613:18;:30::i;:::-;1548:103::o:0;19522:121::-;1313:6;;19574:4;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;-1:-1:-1;19591:14:0::1;:22:::0;;-1:-1:-1;;19591:22:0::1;::::0;;;19522:121;:::o;20174:167::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20287:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20287:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20174:167::o;20437:100::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;20508:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20508:21:0;;::::1;::::0;;;::::1;::::0;;20437:100::o;5330:104::-;5386:13;5419:7;5412:14;;;;;:::i;21309:304::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;21453:13:::1;-1:-1:-1::0;;;;;21445:21:0::1;:4;-1:-1:-1::0;;;;;21445:21:0::1;::::0;21423:128:::1;;;::::0;-1:-1:-1;;;21423:128:0;;7715:2:1;21423:128:0::1;::::0;::::1;7697:21:1::0;7754:2;7734:18;;;7727:30;7793:34;7773:18;;;7766:62;7864:27;7844:18;;;7837:55;7909:19;;21423:128:0::1;7513:421:1::0;21423:128:0::1;21564:41;21593:4;21599:5;21564:28;:41::i;29599:209::-:0;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;29692:31:::1;::::0;-1:-1:-1;;;29692:31:0;;29717:4:::1;29692:31;::::0;::::1;1893:51:1::0;29727:7:0;;-1:-1:-1;;;;;29692:16:0;::::1;::::0;::::1;::::0;1866:18:1;;29692:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;29684:69;;;::::0;-1:-1:-1;;;29684:69:0;;8330:2:1;29684:69:0::1;::::0;::::1;8312:21:1::0;8369:2;8349:18;;;8342:30;-1:-1:-1;;;8388:18:1;;;8381:44;8442:18;;29684:69:0::1;8128:338:1::0;29684:69:0::1;29764:36;::::0;-1:-1:-1;;;29764:36:0;;29780:10:::1;29764:36;::::0;::::1;6421:51:1::0;6488:18;;;6481:34;;;-1:-1:-1;;;;;29764:15:0;::::1;::::0;::::1;::::0;6394:18:1;;29764:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29599:209:::0;;:::o;7643:482::-;678:10;7763:4;7812:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7812:34:0;;;;;;;;;;7879:35;;;;7857:122;;;;-1:-1:-1;;;7857:122:0;;8923:2:1;7857:122:0;;;8905:21:1;8962:2;8942:18;;;8935:30;9001:34;8981:18;;;8974:62;-1:-1:-1;;;9052:18:1;;;9045:35;9097:19;;7857:122:0;8721:401:1;7857:122:0;8015:67;678:10;8038:7;8066:15;8047:16;:34;8015:8;:67::i;:::-;-1:-1:-1;8113:4:0;;7643:482;-1:-1:-1;;;7643:482:0:o;5956:216::-;6078:4;6100:42;678:10;6124:9;6135:6;6100:9;:42::i;21817:231::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;21977:15:::1;::::0;21934:59:::1;::::0;-1:-1:-1;;;;;21977:15:0;;::::1;::::0;21934:59;::::1;::::0;::::1;::::0;21977:15:::1;::::0;21934:59:::1;22004:15;:36:::0;;-1:-1:-1;;;;;;22004:36:0::1;-1:-1:-1::0;;;;;22004:36:0;;;::::1;::::0;;;::::1;::::0;;21817:231::o;21116:185::-;17391:42;17377:10;:56;17369:83;;;;-1:-1:-1;;;17369:83:0;;9329:2:1;17369:83:0;;;9311:21:1;9368:2;9348:18;;;9341:30;-1:-1:-1;;;9387:18:1;;;9380:44;9441:18;;17369:83:0;9127:338:1;17369:83:0;-1:-1:-1;;;;;21204:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21204:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21259:34;;1416:41:1;;;21259:34:0::1;::::0;1389:18:1;21259:34:0::1;;;;;;;21116:185:::0;;:::o;20052:114::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;20141:17:::1;:6:::0;20151::::1;20141:17;:::i;:::-;20129:9;:29:::0;-1:-1:-1;20052:114:0:o;19713:201::-;1313:6;;19821:4;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;19864:20:::1;:9:::0;19877:6:::1;19864:20;:::i;:::-;19843:18;:41:::0;-1:-1:-1;19902:4:0::1;19713:201:::0;;;:::o;29361:183::-;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;29462:7:::1;29437:21;:32;;29429:59;;;::::0;-1:-1:-1;;;29429:59:0;;8330:2:1;29429:59:0::1;::::0;::::1;8312:21:1::0;8369:2;8349:18;;;8342:30;-1:-1:-1;;;8388:18:1;;;8381:44;8442:18;;29429:59:0::1;8128:338:1::0;29429:59:0::1;29499:37;::::0;29507:10:::1;::::0;29499:37;::::1;;;::::0;29528:7;;29499:37:::1;::::0;;;29528:7;29507:10;29499:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;1806:238:::0;1313:6;;-1:-1:-1;;;;;1313:6:0;678:10;1460:23;1452:68;;;;-1:-1:-1;;;1452:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1909:22:0;::::1;1887:110;;;::::0;-1:-1:-1;;;1887:110:0;;9672:2:1;1887:110:0::1;::::0;::::1;9654:21:1::0;9711:2;9691:18;;;9684:30;9750:34;9730:18;;;9723:62;-1:-1:-1;;;9801:18:1;;;9794:36;9847:19;;1887:110:0::1;9470:402:1::0;1887:110:0::1;2008:28;2027:8;2008:18;:28::i;:::-;1806:238:::0;:::o;9917:380::-;-1:-1:-1;;;;;10053:19:0;;10045:68;;;;-1:-1:-1;;;10045:68:0;;10079:2:1;10045:68:0;;;10061:21:1;10118:2;10098:18;;;10091:30;10157:34;10137:18;;;10130:62;-1:-1:-1;;;10208:18:1;;;10201:34;10252:19;;10045:68:0;9877:400:1;10045:68:0;-1:-1:-1;;;;;10132:21:0;;10124:68;;;;-1:-1:-1;;;10124:68:0;;10484:2:1;10124:68:0;;;10466:21:1;10523:2;10503:18;;;10496:30;10562:34;10542:18;;;10535:62;-1:-1:-1;;;10613:18:1;;;10606:32;10655:19;;10124:68:0;10282:398:1;10124:68:0;-1:-1:-1;;;;;10205:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10257:32;;2101:25:1;;;10257:32:0;;2074:18:1;10257:32:0;;;;;;;9917:380;;;:::o;22927:4883::-;-1:-1:-1;;;;;23059:18:0;;23051:68;;;;-1:-1:-1;;;23051:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23138:16:0;;23130:64;;;;-1:-1:-1;;;23130:64:0;;;;;;;:::i;:::-;23211:6;23221:1;23211:11;23207:93;;23239:28;23255:4;23261:2;23265:1;23239:15;:28::i;23207:93::-;23316:14;;;;23312:1692;;;1313:6;;-1:-1:-1;;;;;23369:15:0;;;1313:6;;23369:15;;;;:49;;-1:-1:-1;1313:6:0;;-1:-1:-1;;;;;23405:13:0;;;1313:6;;23405:13;;23369:49;:86;;;;-1:-1:-1;;;;;;23439:16:0;;;;23369:86;:128;;;;-1:-1:-1;;;;;;23476:21:0;;23490:6;23476:21;;23369:128;:158;;;;-1:-1:-1;23519:8:0;;-1:-1:-1;;;23519:8:0;;;;23518:9;23369:158;23347:1646;;;23567:13;;;;;;;23562:223;;-1:-1:-1;;;;;23639:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23668:23:0;;;;;;:19;:23;;;;;;;;23639:52;23605:160;;;;-1:-1:-1;;;23605:160:0;;11697:2:1;23605:160:0;;;11679:21:1;11736:2;11716:18;;;11709:30;-1:-1:-1;;;11755:18:1;;;11748:52;11817:18;;23605:160:0;11495:346:1;23605:160:0;-1:-1:-1;;;;;23857:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23914:35:0;;;;;;:31;:35;;;;;;;;23913:36;23857:92;23831:1147;;;24036:20;;24026:6;:30;;23992:169;;;;-1:-1:-1;;;23992:169:0;;12048:2:1;23992:169:0;;;12030:21:1;12087:2;12067:18;;;12060:30;12126:34;12106:18;;;12099:62;-1:-1:-1;;;12177:18:1;;;12170:51;12238:19;;23992:169:0;11846:417:1;23992:169:0;24244:9;;-1:-1:-1;;;;;5922:18:0;;5890:7;5922:18;;;;;;;;;;;24218:22;;:6;:22;:::i;:::-;:35;;24184:140;;;;-1:-1:-1;;;24184:140:0;;12470:2:1;24184:140:0;;;12452:21:1;12509:2;12489:18;;;12482:30;-1:-1:-1;;;12528:18:1;;;12521:49;12587:18;;24184:140:0;12268:343:1;24184:140:0;23831:1147;;;-1:-1:-1;;;;;24422:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;24477:37:0;;;;;;:31;:37;;;;;;;;24476:38;24422:92;24396:582;;;24601:20;;24591:6;:30;;24557:170;;;;-1:-1:-1;;;24557:170:0;;12818:2:1;24557:170:0;;;12800:21:1;12857:2;12837:18;;;12830:30;12896:34;12876:18;;;12869:62;-1:-1:-1;;;12947:18:1;;;12940:52;13009:19;;24557:170:0;12616:418:1;24396:582:0;-1:-1:-1;;;;;24758:35:0;;;;;;:31;:35;;;;;;;;24753:225;;24878:9;;-1:-1:-1;;;;;5922:18:0;;5890:7;5922:18;;;;;;;;;;;24852:22;;:6;:22;:::i;:::-;:35;;24818:140;;;;-1:-1:-1;;;24818:140:0;;12470:2:1;24818:140:0;;;12452:21:1;12509:2;12489:18;;;12482:30;-1:-1:-1;;;12528:18:1;;;12521:49;12587:18;;24818:140:0;12268:343:1;24818:140:0;25065:4;25016:28;5922:18;;;;;;;;;;;25123;;25099:42;;;;;;;25172:35;;-1:-1:-1;25196:11:0;;;;;;;25172:35;:61;;;;-1:-1:-1;25225:8:0;;-1:-1:-1;;;25225:8:0;;;;25224:9;25172:61;:110;;;;-1:-1:-1;;;;;;25251:31:0;;;;;;:25;:31;;;;;;;;25250:32;25172:110;:153;;;;-1:-1:-1;;;;;;25300:25:0;;;;;;:19;:25;;;;;;;;25299:26;25172:153;:194;;;;-1:-1:-1;;;;;;25343:23:0;;;;;;:19;:23;;;;;;;;25342:24;25172:194;25154:326;;;25393:8;:15;;-1:-1:-1;;;;25393:15:0;-1:-1:-1;;;25393:15:0;;;25425:10;:8;:10::i;:::-;25452:8;:16;;-1:-1:-1;;;;25452:16:0;;;25154:326;1313:6;;-1:-1:-1;;;;;25515:15:0;;;1313:6;;25515:15;;;;:40;;-1:-1:-1;;;;;;25534:21:0;;25550:4;25534:21;;25515:40;25512:672;;;-1:-1:-1;;;;;25619:31:0;;25567:19;25619:31;;;:25;:31;;;;;;;;25615:305;;;-1:-1:-1;;;;;25675:22:0;;;;;;:18;:22;;;;;;:27;;25671:135;;-1:-1:-1;;;;;25727:22:0;;;;;;:18;:22;;;;;25752:15;25727:40;;25671:135;25824:13;;:43;;-1:-1:-1;;;25824:43:0;;-1:-1:-1;;;;;6439:32:1;;;25824:43:0;;;6421:51:1;6488:18;;;6481:34;;;25824:13:0;;;;:31;;6394:18:1;;25824:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25904:4;25888:20;;25615:305;-1:-1:-1;;;;;25936:29:0;;;;;;:25;:29;;;;;;;;25932:135;;;25986:26;26007:4;25986:20;:26::i;:::-;-1:-1:-1;26047:4:0;25932:135;26083:13;26079:92;;26129:26;26150:4;26129:20;:26::i;:::-;25556:628;25512:672;26226:8;;-1:-1:-1;;;;;26336:25:0;;26210:12;26336:25;;;:19;:25;;;;;;26226:8;-1:-1:-1;;;26226:8:0;;;;;26225:9;;26336:25;;:52;;-1:-1:-1;;;;;;26365:23:0;;;;;;:19;:23;;;;;;;;26336:52;26332:100;;;-1:-1:-1;26415:5:0;26332:100;26452:12;26557:7;26553:1204;;;-1:-1:-1;;;;;26623:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26672:1;26656:13;;:17;26623:50;26619:991;;;-1:-1:-1;;;;;26786:24:0;;;;;;:18;:24;;;;;;:33;;26813:6;26786:33;:::i;:::-;26768:15;:51;:81;;;-1:-1:-1;;;;;;26822:24:0;;;;;;:18;:24;;;;;;:27;26768:81;26764:361;;;26955:3;26940:11;:6;26949:2;26940:11;:::i;:::-;26939:19;;;;:::i;:::-;26932:26;;26764:361;;;27102:3;27085:13;;27076:6;:22;;;;:::i;:::-;27075:30;;;;:::i;:::-;27068:37;;26764:361;27193:13;;27173:16;;27166:23;;:4;:23;:::i;:::-;27165:41;;;;:::i;:::-;27143:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27263:13:0;;27249:10;;27242:17;;:4;:17;:::i;:::-;27241:35;;;;:::i;:::-;27225:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;26619:991:0;;-1:-1:-1;26619:991:0;;-1:-1:-1;;;;;27338:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27388:1;27373:12;;:16;27338:51;27334:276;;;27443:3;27427:12;;27418:6;:21;;;;:::i;:::-;27417:29;;;;:::i;:::-;27410:36;;27514:12;;27495:15;;27488:4;:22;;;;:::i;:::-;27487:39;;;;:::i;:::-;27465:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27582:12:0;;27569:9;;27562:16;;:4;:16;:::i;:::-;27561:33;;;;:::i;:::-;27545:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;27334:276:0;27628:8;;27624:91;;27657:42;27673:4;27687;27694;27657:15;:42::i;:::-;27731:14;27741:4;27731:14;;:::i;:::-;;;26553:1204;27769:33;27785:4;27791:2;27795:6;27769:15;:33::i;:::-;23040:4770;;;;22927:4883;;;:::o;2204:191::-;2297:6;;;-1:-1:-1;;;;;2314:17:0;;;-1:-1:-1;;;;;;2314:17:0;;;;;;;2347:40;;2297:6;;;2314:17;2297:6;;2347:40;;2278:16;;2347:40;2267:128;2204:191;:::o;21621:188::-;-1:-1:-1;;;;;21704:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21704:39:0;;;;;;;;;;21761:40;;21704:39;;:31;21761:40;;;21621:188;;:::o;8133:770::-;-1:-1:-1;;;;;8273:20:0;;8265:70;;;;-1:-1:-1;;;8265:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8354:23:0;;8346:71;;;;-1:-1:-1;;;8346:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8514:17:0;;8490:21;8514:17;;;;;;;;;;;8564:23;;;;8542:111;;;;-1:-1:-1;;;8542:111:0;;13596:2:1;8542:111:0;;;13578:21:1;13635:2;13615:18;;;13608:30;13674:34;13654:18;;;13647:62;-1:-1:-1;;;13725:18:1;;;13718:36;13771:19;;8542:111:0;13394:402:1;8542:111:0;-1:-1:-1;;;;;8689:17:0;;;:9;:17;;;;;;;;;;;8709:22;;;8689:42;;8753:20;;;;;;;;:30;;8725:6;;8689:9;8753:30;;8725:6;;8753:30;:::i;:::-;;;;;;;;8818:9;-1:-1:-1;;;;;8801:35:0;8810:6;-1:-1:-1;;;;;8801:35:0;;8829:6;8801:35;;;;2101:25:1;;2089:2;2074:18;;1955:177;8801:35:0;;;;;;;;8254:649;8133:770;;;:::o;28415:900::-;28498:4;28454:23;5922:18;;;;;;;;;;;28454:50;;28515:25;28564:12;;28543:18;;:33;;;;:::i;:::-;28515:61;-1:-1:-1;28587:12:0;28616:20;;;:46;;-1:-1:-1;28640:22:0;;28616:46;28612:85;;;28679:7;;;28415:900::o;28612:85::-;28731:18;;28713:15;:36;28709:105;;;28784:18;;28766:36;;28709:105;28855:15;28883:36;28855:15;28883:16;:36::i;:::-;29027:18;;28953:21;;28932:18;;29062:17;;29014:31;;28953:21;29014:31;:::i;:::-;29013:66;;;;:::i;:::-;29113:1;29092:18;:22;;;29125:12;:16;;;29176:15;;29168:57;;28987:92;;-1:-1:-1;;;;;;29176:15:0;;28987:92;;29168:57;29113:1;29168:57;28987:92;29176:15;29168:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29258:9:0;;29250:57;;29154:71;;-1:-1:-1;;;;;;29258:9:0;;29281:21;;29250:57;;;;29281:21;29258:9;29250:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;28415:900:0:o;22802:117::-;22869:13;;:42;;-1:-1:-1;;;22869:42:0;;-1:-1:-1;;;;;1911:32:1;;;22869:42:0;;;1893:51:1;22869:13:0;;;;:33;;1866:18:1;;22869:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22802:117;:::o;27818:589::-;27968:16;;;27982:1;27968:16;;;;;;;;27944:21;;27968:16;;;;;;;;;;-1:-1:-1;27968:16:0;27944:40;;28013:4;27995;28000:1;27995:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27995:23:0;;;-1:-1:-1;;;;;27995:23:0;;;;;28039:15;-1:-1:-1;;;;;28039:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28029:4;28034:1;28029:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28029:32:0;;;-1:-1:-1;;;;;28029:32:0;;;;;28074:62;28091:4;28106:15;28124:11;28074:8;:62::i;:::-;28175:224;;-1:-1:-1;;;28175:224:0;;-1:-1:-1;;;;;28175:15:0;:66;;;;:224;;28256:11;;28282:1;;28326:4;;28353;;28373:15;;28175:224;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:131::-;-1:-1:-1;;;;;895:31:1;;885:42;;875:70;;941:1;938;931:12;956:315;1024:6;1032;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1140:9;1127:23;1159:31;1184:5;1159:31;:::i;:::-;1209:5;1261:2;1246:18;;;;1233:32;;-1:-1:-1;;;956:315:1:o;1468:247::-;1527:6;1580:2;1568:9;1559:7;1555:23;1551:32;1548:52;;;1596:1;1593;1586:12;1548:52;1635:9;1622:23;1654:31;1679:5;1654:31;:::i;:::-;1704:5;1468:247;-1:-1:-1;;;1468:247:1:o;2137:180::-;2196:6;2249:2;2237:9;2228:7;2224:23;2220:32;2217:52;;;2265:1;2262;2255:12;2217:52;-1:-1:-1;2288:23:1;;2137:180;-1:-1:-1;2137:180:1:o;2322:456::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2523:9;2510:23;2542:31;2567:5;2542:31;:::i;:::-;2592:5;-1:-1:-1;2649:2:1;2634:18;;2621:32;2662:33;2621:32;2662:33;:::i;:::-;2322:456;;2714:7;;-1:-1:-1;;;2768:2:1;2753:18;;;;2740:32;;2322:456::o;3411:118::-;3497:5;3490:13;3483:21;3476:5;3473:32;3463:60;;3519:1;3516;3509:12;3534:382;3599:6;3607;3660:2;3648:9;3639:7;3635:23;3631:32;3628:52;;;3676:1;3673;3666:12;3628:52;3715:9;3702:23;3734:31;3759:5;3734:31;:::i;:::-;3784:5;-1:-1:-1;3841:2:1;3826:18;;3813:32;3854:30;3813:32;3854:30;:::i;:::-;3903:7;3893:17;;;3534:382;;;;;:::o;3921:241::-;3977:6;4030:2;4018:9;4009:7;4005:23;4001:32;3998:52;;;4046:1;4043;4036:12;3998:52;4085:9;4072:23;4104:28;4126:5;4104:28;:::i;4501:388::-;4569:6;4577;4630:2;4618:9;4609:7;4605:23;4601:32;4598:52;;;4646:1;4643;4636:12;4598:52;4685:9;4672:23;4704:31;4729:5;4704:31;:::i;:::-;4754:5;-1:-1:-1;4811:2:1;4796:18;;4783:32;4824:33;4783:32;4824:33;:::i;4894:356::-;5096:2;5078:21;;;5115:18;;;5108:30;5174:34;5169:2;5154:18;;5147:62;5241:2;5226:18;;4894:356::o;5600:127::-;5661:10;5656:3;5652:20;5649:1;5642:31;5692:4;5689:1;5682:15;5716:4;5713:1;5706:15;5732:125;5797:9;;;5818:10;;;5815:36;;;5831:18;;:::i;5862:380::-;5941:1;5937:12;;;;5984;;;6005:61;;6059:4;6051:6;6047:17;6037:27;;6005:61;6112:2;6104:6;6101:14;6081:18;6078:38;6075:161;;6158:10;6153:3;6149:20;6146:1;6139:31;6193:4;6190:1;6183:15;6221:4;6218:1;6211:15;6075:161;;5862:380;;;:::o;6526:168::-;6599:9;;;6630;;6647:15;;;6641:22;;6627:37;6617:71;;6668:18;;:::i;7939:184::-;8009:6;8062:2;8050:9;8041:7;8037:23;8033:32;8030:52;;;8078:1;8075;8068:12;8030:52;-1:-1:-1;8101:16:1;;7939:184;-1:-1:-1;7939:184:1:o;8471:245::-;8538:6;8591:2;8579:9;8570:7;8566:23;8562:32;8559:52;;;8607:1;8604;8597:12;8559:52;8639:9;8633:16;8658:28;8680:5;8658:28;:::i;10685:401::-;10887:2;10869:21;;;10926:2;10906:18;;;10899:30;10965:34;10960:2;10945:18;;10938:62;-1:-1:-1;;;11031:2:1;11016:18;;11009:35;11076:3;11061:19;;10685:401::o;11091:399::-;11293:2;11275:21;;;11332:2;11312:18;;;11305:30;11371:34;11366:2;11351:18;;11344:62;-1:-1:-1;;;11437:2:1;11422:18;;11415:33;11480:3;11465:19;;11091:399::o;13039:217::-;13079:1;13105;13095:132;;13149:10;13144:3;13140:20;13137:1;13130:31;13184:4;13181:1;13174:15;13212:4;13209:1;13202:15;13095:132;-1:-1:-1;13241:9:1;;13039:217::o;13261:128::-;13328:9;;;13349:11;;;13346:37;;;13363:18;;:::i;14143:127::-;14204:10;14199:3;14195:20;14192:1;14185:31;14235:4;14232:1;14225:15;14259:4;14256:1;14249:15;14275:251;14345:6;14398:2;14386:9;14377:7;14373:23;14369:32;14366:52;;;14414:1;14411;14404:12;14366:52;14446:9;14440:16;14465:31;14490:5;14465:31;:::i;14531:980::-;14793:4;14841:3;14830:9;14826:19;14872:6;14861:9;14854:25;14898:2;14936:6;14931:2;14920:9;14916:18;14909:34;14979:3;14974:2;14963:9;14959:18;14952:31;15003:6;15038;15032:13;15069:6;15061;15054:22;15107:3;15096:9;15092:19;15085:26;;15146:2;15138:6;15134:15;15120:29;;15167:1;15177:195;15191:6;15188:1;15185:13;15177:195;;;15256:13;;-1:-1:-1;;;;;15252:39:1;15240:52;;15347:15;;;;15312:12;;;;15288:1;15206:9;15177:195;;;-1:-1:-1;;;;;;;15428:32:1;;;;15423:2;15408:18;;15401:60;-1:-1:-1;;;15492:3:1;15477:19;15470:35;15389:3;14531:980;-1:-1:-1;;;14531:980:1:o

Swarm Source

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