ETH Price: $2,524.95 (+2.36%)

Token

Shibmania (SHIBMA)
 

Overview

Max Total Supply

1,000,000,000 SHIBMA

Holders

129

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,071,360.000000000007809242 SHIBMA

Value
$0.00
0x2548f392e54007c538e92b45cea1c695b3ce04c7
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:
SHIBMA

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/*
 *
 *   https://shib-mania.com/
 *
 */

pragma solidity 0.8.18;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address private operationsAddress;
    address private aiBuyBackAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

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

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

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

    uint256 private originalSellOperationsFee;
    uint256 private originalSellLiquidityFee;
    uint256 private originalSellAiBuyBackFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForAiBuyBack;

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

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

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

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedAiBuyBackAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    event DisabledLaunchTaxModeForever();

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

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 5) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: GOERLI
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

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

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 1) / 100; // 1%
        maxSellAmount = (totalSupply * 2) / 100; // 2%
        maxWallet = (totalSupply * 2) / 100; // 2%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        buyOperationsFee = 30;
        buyLiquidityFee = 0;
        buyAiBuyBackFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyAiBuyBackFee;

        originalSellOperationsFee = 4;
        originalSellLiquidityFee = 1;
        originalSellAiBuyBackFee = 2;

        sellOperationsFee = 40;
        sellLiquidityFee = 0;
        sellAiBuyBackFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellAiBuyBackFee;

        operationsAddress = address(0x839ce32AEDDD469f8cCEb7f6CE98807aC4DCFE0B);
        aiBuyBackAddress = address(0x895F842EE61c55fF34061D2fe2e89E1738ef29D6);

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

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

        _createInitialSupply(address(this), (totalSupply * 18) / 100); // Tokens for liquidity
        _createInitialSupply(address(0xdead), (totalSupply * 32) / 100); // Burn
        _createInitialSupply(newOwner, (totalSupply * 495) / 1000); // Spare
        _createInitialSupply(
            address(0xb72ce64D6b66b7246767A033511a686dD91F1390),
            (totalSupply * 5) / 1000
        ); // Dev

        transferOwnership(newOwner);
    }

    receive() external payable {}

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(
            blocksForPenalty <= 10,
            "Cannot make penalty blocks more than 10"
        );
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }

    function getEarlyBuyers() external view returns (address[] memory) {
        return earlyBuyers;
    }

    function addBoughtEarly(address wallet) external onlyOwner {
        require(!boughtEarly[wallet], "Wallet is already flagged.");
        boughtEarly[wallet] = true;
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }

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

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

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

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

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

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

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

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

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

    function updateBuyFees(
        uint256 _operationsFee,
        uint256 _liquidityFee,
        uint256 _aiBuyBackFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyAiBuyBackFee = _aiBuyBackFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyAiBuyBackFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

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

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

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

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

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

        if (!earlyBuyPenaltyInEffect() && tradingActive) {
            require(
                !boughtEarly[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // bot/sniper penalty.
            if (
                (earlyBuyPenaltyInEffect() ||
                    (amount >= maxBuyAmount - .9 ether &&
                        blockForPenaltyEnd + 8 >= block.number)) &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                if (!earlyBuyPenaltyInEffect()) {
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForAiBuyBack += (fees * buyAiBuyBackFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
                tokensForAiBuyBack += (fees * sellAiBuyBackFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForAiBuyBack += (fees * buyAiBuyBackFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

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

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

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

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

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

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

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

        ethForLiquidity -= ethForOperations + ethForStaking;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForAiBuyBack = 0;

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

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

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

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

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

    function setAiBuyBackAddress(address _aiBuyBackAddress) external onlyOwner {
        require(
            _aiBuyBackAddress != address(0),
            "_aiBuyBackAddress address cannot be 0"
        );
        aiBuyBackAddress = payable(_aiBuyBackAddress);
        emit UpdatedAiBuyBackAddress(_aiBuyBackAddress);
    }

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

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

    function restoreLimits() external onlyOwner {
        limitsInEffect = true;
    }

    function airdropToWallets(
        address[] memory wallets,
        uint256[] memory amountsInTokens
    ) external onlyOwner {
        require(
            wallets.length == amountsInTokens.length,
            "arrays must be the same length"
        );
        require(
            wallets.length < 200,
            "Can only airdrop 200 wallets per txn due to gas limits"
        ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    function setLaunchTaxModeDisabledForever() external onlyOwner {
        require(launchTaxModeEnabled, "Launch tax mode already disabled!!");

        launchTaxModeEnabled = false;
        emit DisabledLaunchTaxModeForever();
    }

    function updateLaunchTaxes(uint256 buy, uint256 sell) external onlyOwner {
        require(launchTaxModeEnabled, "Launch tax mode disabled for ever!");

        buyOperationsFee = buy;
        buyLiquidityFee = 0;
        buyAiBuyBackFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyAiBuyBackFee;

        sellOperationsFee = sell;
        sellLiquidityFee = 0;
        sellAiBuyBackFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellAiBuyBackFee;
    }

    function addLP(bool confirmAddLp) external onlyOwner {
        require(confirmAddLp, "Please confirm adding of the LP");
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // add the liquidity
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );

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

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(
            blocksForPenalty < 10,
            "Cannot make penalty blocks more than 10"
        );

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // add the liquidity
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );

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

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledLaunchTaxModeForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedAiBuyBackAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAiBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchTaxModeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAiBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_aiBuyBackAddress","type":"address"}],"name":"setAiBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLaunchTaxModeDisabledForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForAiBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_aiBuyBackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"updateLaunchTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_aiBuyBackFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600e556013805463ffffffff191663010000011790556015805460ff191660011790556009608090815268536869626d616e696160b81b60a052610100604052600660c090815265534849424d4160d01b60e0526003620000638382620009d8565b506004620000728282620009d8565b505050600062000087620005d460201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004ef3833981519152908290a35033600046600103620000ec5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200015e565b46600503620001115750737a250d5630b4cf539739df2c5dacb4c659f2488d6200015e565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001de919062000aa4565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000aa4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000aa4565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000307906001620005d8565b600a5462000320906001600160a01b031660016200063b565b6b033b2e3c9fd0803ce800000060646200033c82600162000aec565b62000348919062000b0c565b60065560646200035a82600262000aec565b62000366919062000b0c565b60075560646200037882600262000aec565b62000384919062000b0c565b6008556127106200039782600562000aec565b620003a3919062000b0c565b600b55601e601781905560006018819055601981905590620003c790829062000b2f565b620003d3919062000b2f565b6016556004601a556001601b556002601c556028601e8190556000601f8190556020819055906200040690829062000b2f565b62000412919062000b2f565b601d55600c80546001600160a01b031990811673839ce32aeddd469f8cceb7f6ce98807ac4dcfe0b17909155600d805490911673895f842ee61c55ff34061d2fe2e89e1738ef29d61790556200046a836001620005d8565b62000477306001620005d8565b6200048661dead6001620005d8565b600c546200049f906001600160a01b03166001620005d8565b600d54620004b8906001600160a01b03166001620005d8565b600954620004d1906001600160a01b03166001620005d8565b620004de836001620006a7565b620004eb306001620006a7565b620004fa61dead6001620006a7565b600c5462000513906001600160a01b03166001620006a7565b600d546200052c906001600160a01b03166001620006a7565b60095462000545906001600160a01b03166001620006a7565b6200056b3060646200055984601262000aec565b62000565919062000b0c565b62000751565b6200058161dead60646200055984602062000aec565b62000597836103e862000559846101ef62000aec565b620005c073b72ce64d6b66b7246767a033511a686dd91f13906103e86200055984600562000aec565b620005cb8362000836565b50505062000b45565b3390565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556200066b8282620005d8565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006f25760405162461bcd60e51b8152602060048201819052602482015260008051602062004ed3833981519152604482015260640162000155565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007a95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000155565b8060026000828254620007bd919062000b2f565b90915550506001600160a01b03821660009081526020819052604081208054839290620007ec90849062000b2f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008815760405162461bcd60e51b8152602060048201819052602482015260008051602062004ed3833981519152604482015260640162000155565b6001600160a01b038116620008e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000155565b6005546040516001600160a01b0380841692169060008051602062004ef383398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200095e57607f821691505b6020821081036200097f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009d357600081815260208120601f850160051c81016020861015620009ae5750805b601f850160051c820191505b81811015620009cf57828155600101620009ba565b5050505b505050565b81516001600160401b03811115620009f457620009f462000933565b62000a0c8162000a05845462000949565b8462000985565b602080601f83116001811462000a44576000841562000a2b5750858301515b600019600386901b1c1916600185901b178555620009cf565b600085815260208120601f198616915b8281101562000a755788860151825594840194600190910190840162000a54565b508582101562000a945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ab757600080fd5b81516001600160a01b038116811462000acf57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000b065762000b0662000ad6565b92915050565b60008262000b2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000b065762000b0662000ad6565b61437e8062000b556000396000f3fe60806040526004361061041f5760003560e01c80638366e79a1161021e578063c18bc19511610123578063eb084f70116100ab578063f2fde38b1161007a578063f2fde38b14610c12578063f5648a4f14610c32578063f637434214610c47578063f8b45b0514610c5d578063fb002c9714610c7357600080fd5b8063eb084f7014610bb1578063eb472fc414610bc6578063ee40166e14610be6578063f11a24d314610bfc57600080fd5b8063dc3f0d0f116100f2578063dc3f0d0f14610b0a578063dd62ed3e14610b2a578063e2f4560514610b70578063e35b35ac14610b86578063e884f26014610b9c57600080fd5b8063c18bc19514610a9a578063c876d0b914610aba578063d257b34f14610ad4578063d85ba06314610af457600080fd5b8063a457c2d7116101a6578063b62496f511610175578063b62496f5146109eb578063b987553914610a1b578063bbc0c74214610a3b578063c024666814610a5a578063c17b5b8c14610a7a57600080fd5b8063a457c2d714610975578063a62068ce14610995578063a9059cbb146109ab578063aff48bfb146109cb57600080fd5b80638da5cb5b116101ed5780638da5cb5b146108eb57806395d89b41146109095780639a5bd2dd1461091e5780639a7a23d614610940578063a28e86d31461096057600080fd5b80638366e79a1461086557806385b12c7c1461088557806385ecfd28146108a557806388e765ff146108d557600080fd5b80634f77f6c0116103245780636a486a8e116102ac578063715018a61161027b578063715018a6146107db578063751039fc146107f05780637571336a146108055780638095d5641461082557806382aa7c681461084557600080fd5b80636a486a8e1461076f5780636b0a894c146107855780636ddd17131461079b57806370a08231146107bb57600080fd5b80635a139dd4116102f35780635a139dd4146106ed5780635bb988c9146107035780635e18d4d5146107235780635eed98e21461074457806366d602ae1461075957600080fd5b80634f77f6c01461068b57806351d1f8ac146106a157806351f205e4146106c157806358a6d531146106d657600080fd5b806323b872dd116103a7578063395093511161037657806339509351146105f157806340755c7914610611578063452ed4f114610631578063499b8394146106515780634a62bb651461067157600080fd5b806323b872dd1461057f5780632be32b611461059f5780632fbd203a146105bf578063313ce567146105d557600080fd5b8063115bd5fe116103ee578063115bd5fe146104ee5780631805805b1461051257806318160ddd146105345780631a8145bb146105495780632307b4411461055f57600080fd5b806306fdde031461042b5780630758d92414610456578063095ea7b31461048e57806310d5de53146104be57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b50610440610c89565b60405161044d9190613c01565b60405180910390f35b34801561046257600080fd5b50600954610476906001600160a01b031681565b6040516001600160a01b03909116815260200161044d565b34801561049a57600080fd5b506104ae6104a9366004613c67565b610d1b565b604051901515815260200161044d565b3480156104ca57600080fd5b506104ae6104d9366004613c93565b60256020526000908152604090205460ff1681565b3480156104fa57600080fd5b5061050460235481565b60405190815260200161044d565b34801561051e57600080fd5b5061053261052d366004613c93565b610d32565b005b34801561054057600080fd5b50600254610504565b34801561055557600080fd5b5061050460225481565b34801561056b57600080fd5b5061053261057a366004613d8d565b610df1565b34801561058b57600080fd5b506104ae61059a366004613e4f565b610f49565b3480156105ab57600080fd5b506105326105ba366004613e90565b610ff3565b3480156105cb57600080fd5b5061050460195481565b3480156105e157600080fd5b506040516012815260200161044d565b3480156105fd57600080fd5b506104ae61060c366004613c67565b611194565b34801561061d57600080fd5b5061053261062c366004613c93565b6111d0565b34801561063d57600080fd5b50600a54610476906001600160a01b031681565b34801561065d57600080fd5b5061053261066c366004613c93565b611287565b34801561067d57600080fd5b506013546104ae9060ff1681565b34801561069757600080fd5b50610504601e5481565b3480156106ad57600080fd5b506105326106bc366004613ea9565b611360565b3480156106cd57600080fd5b50610532611442565b3480156106e257600080fd5b50600f5443106104ae565b3480156106f957600080fd5b5061050460175481565b34801561070f57600080fd5b5061053261071e366004613c93565b61154b565b34801561072f57600080fd5b506013546104ae906301000000900460ff1681565b34801561075057600080fd5b506105326115fe565b34801561076557600080fd5b5061050460075481565b34801561077b57600080fd5b50610504601d5481565b34801561079157600080fd5b5061050460125481565b3480156107a757600080fd5b506013546104ae9062010000900460ff1681565b3480156107c757600080fd5b506105046107d6366004613c93565b61168a565b3480156107e757600080fd5b506105326116a5565b3480156107fc57600080fd5b50610532611719565b34801561081157600080fd5b50610532610820366004613ed9565b61174f565b34801561083157600080fd5b50610532610840366004613f12565b611817565b34801561085157600080fd5b50610532610860366004613e90565b6118ba565b34801561087157600080fd5b506104ae610880366004613f3e565b6119ae565b34801561089157600080fd5b506105326108a0366004613e90565b611be8565b3480156108b157600080fd5b506104ae6108c0366004613c93565b60106020526000908152604090205460ff1681565b3480156108e157600080fd5b5061050460065481565b3480156108f757600080fd5b506005546001600160a01b0316610476565b34801561091557600080fd5b50610440611dd5565b34801561092a57600080fd5b50610933611de4565b60405161044d9190613fb0565b34801561094c57600080fd5b5061053261095b366004613ed9565b611e45565b34801561096c57600080fd5b50610532611f39565b34801561098157600080fd5b506104ae610990366004613c67565b611f72565b3480156109a157600080fd5b50610504600f5481565b3480156109b757600080fd5b506104ae6109c6366004613c67565b61200b565b3480156109d757600080fd5b506105326109e6366004613c93565b612018565b3480156109f757600080fd5b506104ae610a06366004613c93565b60266020526000908152604090205460ff1681565b348015610a2757600080fd5b50610532610a36366004613fc3565b6120f0565b348015610a4757600080fd5b506013546104ae90610100900460ff1681565b348015610a6657600080fd5b50610532610a75366004613ed9565b6121af565b348015610a8657600080fd5b50610532610a95366004613f12565b612238565b348015610aa657600080fd5b50610532610ab5366004613e90565b6122db565b348015610ac657600080fd5b506015546104ae9060ff1681565b348015610ae057600080fd5b50610532610aef366004613e90565b61247a565b348015610b0057600080fd5b5061050460165481565b348015610b1657600080fd5b50610532610b25366004613e90565b6125c5565b348015610b3657600080fd5b50610504610b45366004613f3e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b7c57600080fd5b50610504600b5481565b348015610b9257600080fd5b5061050460205481565b348015610ba857600080fd5b50610532612760565b348015610bbd57600080fd5b50610532612796565b348015610bd257600080fd5b50610476610be1366004613e90565b61285c565b348015610bf257600080fd5b50610504600e5481565b348015610c0857600080fd5b5061050460185481565b348015610c1e57600080fd5b50610532610c2d366004613c93565b612886565b348015610c3e57600080fd5b50610532612971565b348015610c5357600080fd5b50610504601f5481565b348015610c6957600080fd5b5061050460085481565b348015610c7f57600080fd5b5061050460215481565b606060038054610c9890613fe0565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc490613fe0565b8015610d115780601f10610ce657610100808354040283529160200191610d11565b820191906000526020600020905b815481529060010190602001808311610cf457829003601f168201915b5050505050905090565b6000610d283384846129dd565b5060015b92915050565b6005546001600160a01b03163314610d655760405162461bcd60e51b8152600401610d5c9061401a565b60405180910390fd5b601354610100900460ff1615610dcf5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610d5c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610d5c9061401a565b8051825114610e6c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d5c565b60c8825110610edc5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d5c565b60005b8251811015610f44576000838281518110610efc57610efc61404f565b602002602001015190506000838381518110610f1a57610f1a61404f565b60200260200101519050610f2f338383612b01565b50508080610f3c9061407b565b915050610edf565b505050565b6000610f56848484612c56565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fdb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d5c565b610fe885338584036129dd565b506001949350505050565b6005546001600160a01b0316331461101d5760405162461bcd60e51b8152600401610d5c9061401a565b670de0b6b3a76400006103e861103260025490565b61103d906005614094565b61104791906140ab565b61105191906140ab565b8110156110b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610d5c565b670de0b6b3a764000060646110c660025490565b6110d1906002614094565b6110db91906140ab565b6110e591906140ab565b8111156111465760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d5c565b61115881670de0b6b3a7640000614094565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d289185906111cb9086906140cd565b6129dd565b6005546001600160a01b031633146111fa5760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b03811660009081526010602052604090205460ff16156112635760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610d5c565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6005546001600160a01b031633146112b15760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b0381166113165760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d5c565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461138a5760405162461bcd60e51b8152600401610d5c9061401a565b6013546301000000900460ff166113ee5760405162461bcd60e51b815260206004820152602260248201527f4c61756e636820746178206d6f64652064697361626c656420666f7220657665604482015261722160f01b6064820152608401610d5c565b601782905560006018819055601981905561140981846140cd565b61141391906140cd565b601655601e8190556000601f819055602081905561143181836140cd565b61143b91906140cd565b601d555050565b6005546001600160a01b0316331461146c5760405162461bcd60e51b8152600401610d5c9061401a565b600b546114783061168a565b10156114ee576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d5c565b600a805460ff60a01b1916600160a01b17905561150961376d565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115755760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b03811660009081526010602052604090205460ff166115dd5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d5c565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146116285760405162461bcd60e51b8152600401610d5c9061401a565b601a546017819055601b546018819055601c5460198190559161164b91906140cd565b61165591906140cd565b601655601a54601e819055601b54601f819055601c5460208190559161167b91906140cd565b61168591906140cd565b601d55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116cf5760405162461bcd60e51b8152600401610d5c9061401a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146117435760405162461bcd60e51b8152600401610d5c9061401a565b6013805460ff19169055565b6005546001600160a01b031633146117795760405162461bcd60e51b8152600401610d5c9061401a565b806117ec57600a546001600160a01b03908116908316036117ec5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d5c565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118415760405162461bcd60e51b8152600401610d5c9061401a565b6017839055601882905560198190558061185b83856140cd565b61186591906140cd565b6016819055600f1015610f445760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610d5c565b6005546001600160a01b031633146118e45760405162461bcd60e51b8152600401610d5c9061401a565b601354610100900460ff161561193c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d5c565b600a81111561195d5760405162461bcd60e51b8152600401610d5c906140e0565b6013805462ffff0019166201010017905543600e81905561197f9082906140cd565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119db5760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b038316611a315760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d5c565b6001600160a01b03831630141580611a515750601354610100900460ff16155b611aba5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d5c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190614127565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190614140565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611c125760405162461bcd60e51b8152600401610d5c9061401a565b601354610100900460ff1615611c3a5760405162461bcd60e51b8152600401610d5c9061415d565b600a8110611c5a5760405162461bcd60e51b8152600401610d5c906140e0565b6013805462ffff0019166201010017905543600e819055611c7c9082906140cd565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611cc85760405162461bcd60e51b8152600401610d5c906141a8565b6000611cd33061168a565b11611d2f5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d5c565b600954611d4a9030906001600160a01b03166111cb8261168a565b6009546001600160a01b031663f305d7194730611d668161168a565b60008033426040518863ffffffff1660e01b8152600401611d8c969594939291906141eb565b60606040518083038185885af1158015611daa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dcf9190614226565b50505050565b606060048054610c9890613fe0565b60606011805480602002602001604051908101604052809291908181526020018280548015610d1157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e1e575050505050905090565b6005546001600160a01b03163314611e6f5760405162461bcd60e51b8152600401610d5c9061401a565b600a546001600160a01b0390811690831603611ef35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d5c565b611efd8282613975565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611f635760405162461bcd60e51b8152600401610d5c9061401a565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611ff45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d5c565b61200133858584036129dd565b5060019392505050565b6000610d28338484612c56565b6005546001600160a01b031633146120425760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b0381166120a65760405162461bcd60e51b815260206004820152602560248201527f5f61694275794261636b4164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d5c565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fc39bde604078bfe7027054059c2b38f20c11265a625912a22566b0cc47b9af8890600090a250565b6005546001600160a01b0316331461211a5760405162461bcd60e51b8152600401610d5c9061401a565b806121675760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610d5c565b601354610100900460ff161561218f5760405162461bcd60e51b8152600401610d5c9061415d565b60004711611cc85760405162461bcd60e51b8152600401610d5c906141a8565b6005546001600160a01b031633146121d95760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146122625760405162461bcd60e51b8152600401610d5c9061401a565b601e839055601f82905560208190558061227c83856140cd565b61228691906140cd565b601d81905560141015610f445760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610d5c565b6005546001600160a01b031633146123055760405162461bcd60e51b8152600401610d5c9061401a565b670de0b6b3a76400006103e861231a60025490565b612325906005614094565b61232f91906140ab565b61233991906140ab565b81101561239d5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610d5c565b670de0b6b3a764000060646123b160025490565b6123bc906002614094565b6123c691906140ab565b6123d091906140ab565b8111156124335760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610d5c565b61244581670de0b6b3a7640000614094565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611189565b6005546001600160a01b031633146124a45760405162461bcd60e51b8152600401610d5c9061401a565b620186a06124b160025490565b6124bc906001614094565b6124c691906140ab565b8110156125335760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d5c565b6103e861253f60025490565b61254a906001614094565b61255491906140ab565b8111156125c05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d5c565b600b55565b6005546001600160a01b031633146125ef5760405162461bcd60e51b8152600401610d5c9061401a565b670de0b6b3a76400006103e861260460025490565b61260f906005614094565b61261991906140ab565b61262391906140ab565b8110156126855760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610d5c565b670de0b6b3a7640000606461269960025490565b6126a4906002614094565b6126ae91906140ab565b6126b891906140ab565b8111156127195760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d5c565b61272b81670de0b6b3a7640000614094565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611189565b6005546001600160a01b0316331461278a5760405162461bcd60e51b8152600401610d5c9061401a565b6015805460ff19169055565b6005546001600160a01b031633146127c05760405162461bcd60e51b8152600401610d5c9061401a565b6013546301000000900460ff166128245760405162461bcd60e51b815260206004820152602260248201527f4c61756e636820746178206d6f646520616c72656164792064697361626c6564604482015261212160f01b6064820152608401610d5c565b6013805463ff000000191690556040517f8516c2f16a94070035659052f0edfeefefeba6f319cf48e580b37196c17c5ac090600090a1565b6011818154811061286c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146128b05760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b0381166129155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d5c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461299b5760405162461bcd60e51b8152600401610d5c9061401a565b604051600090339047908381818185875af1925050503d8060008114611dcf576040519150601f19603f3d011682016040523d82523d6000602084013e611dcf565b6001600160a01b038316612a3f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d5c565b6001600160a01b038216612aa05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d5c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b275760405162461bcd60e51b8152600401610d5c90614254565b6001600160a01b038216612b4d5760405162461bcd60e51b8152600401610d5c90614299565b6001600160a01b03831660009081526020819052604090205481811015612bc55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d5c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612bfc9084906140cd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c4891815260200190565b60405180910390a350505050565b6001600160a01b038316612c7c5760405162461bcd60e51b8152600401610d5c90614254565b6001600160a01b038216612ca25760405162461bcd60e51b8152600401610d5c90614299565b60008111612cf25760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d5c565b601354610100900460ff16612d85576001600160a01b03831660009081526024602052604090205460ff1680612d4057506001600160a01b03821660009081526024602052604090205460ff165b612d855760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d5c565b600f544310158015612d9e5750601354610100900460ff165b15612e6e576001600160a01b03831660009081526010602052604090205460ff161580612dd857506005546001600160a01b038381169116145b80612ded57506001600160a01b03821661dead145b612e6e5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d5c565b60135460ff161561324c576005546001600160a01b03848116911614801590612ea557506005546001600160a01b03838116911614155b8015612ebc57506001600160a01b03821661dead14155b8015612ee157506001600160a01b03831660009081526024602052604090205460ff16155b8015612f0657506001600160a01b03821660009081526024602052604090205460ff16155b1561324c5760155460ff161561301f576009546001600160a01b03838116911614801590612f425750600a546001600160a01b03838116911614155b1561301f57612f526002436142dc565b32600090815260146020526040902054108015612f905750612f756002436142dc565b6001600160a01b038316600090815260146020526040902054105b612ffa5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d5c565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff16801561306057506001600160a01b03821660009081526025602052604090205460ff16155b15613127576006548111156130c85760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d5c565b6008546130d48361168a565b6130de90836140cd565b11156131225760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5c565b61324c565b6001600160a01b03821660009081526026602052604090205460ff16801561316857506001600160a01b03831660009081526025602052604090205460ff16155b156131d2576007548111156131225760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d5c565b6001600160a01b03821660009081526025602052604090205460ff1661324c576008546131fe8361168a565b61320890836140cd565b111561324c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5c565b60006132573061168a565b600b5490915081108015908190613276575060135462010000900460ff165b801561328c5750600a54600160a01b900460ff16155b80156132b057506001600160a01b03841660009081526026602052604090205460ff165b156132de57600a805460ff60a01b1916600160a01b1790556132d061376d565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff168061332057506001600160a01b03851660009081526024602052604090205460ff165b15613329575060005b6000811561375957600f5443108061336f5750670c7d713b49da000060065461335291906142dc565b851015801561336f575043600f54600861336c91906140cd565b10155b801561339357506001600160a01b03871660009081526026602052604090205460ff165b80156133b857506001600160a01b03861660009081526026602052604090205460ff16155b80156133dd57506001600160a01b03861660009081526024602052604090205460ff16155b80156133eb57506000601654115b156135a257600f5443106134125760016006600082825461340c91906142dc565b90915550505b6001600160a01b03861660009081526010602052604090205460ff166134f2576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601280549192909161346b9084906140cd565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646134ff866063614094565b61350991906140ab565b90506016546018548261351c9190614094565b61352691906140ab565b6022600082825461353791906140cd565b909155505060165460175461354c9083614094565b61355691906140ab565b6021600082825461356791906140cd565b909155505060165460195461357c9083614094565b61358691906140ab565b6023600082825461359791906140cd565b9091555061373b9050565b6001600160a01b03861660009081526026602052604090205460ff1680156135cc57506000601d54115b1561365e576064601d54866135e19190614094565b6135eb91906140ab565b9050601d54601f54826135fe9190614094565b61360891906140ab565b6022600082825461361991906140cd565b9091555050601d54601e5461362e9083614094565b61363891906140ab565b6021600082825461364991906140cd565b9091555050601d5460205461357c9083614094565b6001600160a01b03871660009081526026602052604090205460ff16801561368857506000601654115b1561373b5760646016548661369d9190614094565b6136a791906140ab565b9050601654601854826136ba9190614094565b6136c491906140ab565b602260008282546136d591906140cd565b90915550506016546017546136ea9083614094565b6136f491906140ab565b6021600082825461370591906140cd565b909155505060165460195461371a9083614094565b61372491906140ab565b6023600082825461373591906140cd565b90915550505b801561374c5761374c873083612b01565b61375681866142dc565b94505b613764878787612b01565b50505050505050565b60006137783061168a565b9050600060235460215460225461378f91906140cd565b61379991906140cd565b90508115806137a6575080155b156137af575050565b600b546137bd90600a614094565b8211156137d557600b546137d290600a614094565b91505b600080600283602254866137e99190614094565b6137f391906140ab565b6137fd91906140ab565b905061381161380c82866142dc565b6139a3565b60225447908190600090613827906002906140ab565b61383190876142dc565b60215461383e9085614094565b61384891906140ab565b90506000600260225461385b91906140ab565b61386590886142dc565b6023546138729086614094565b61387c91906140ab565b905061388881836140cd565b61389290846142dc565b600060228190556021819055602355925084158015906138b25750600083115b156138c1576138c18584613afd565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461390e576040519150601f19603f3d011682016040523d82523d6000602084013e613913565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613963576040519150601f19603f3d011682016040523d82523d6000602084013e613968565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff1916821515179055611efd8282613b9e565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106139d8576139d861404f565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5591906142ef565b81600181518110613a6857613a6861404f565b6001600160a01b039283166020918202929092010152600954613a8e91309116846129dd565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ac790859060009086903090429060040161430c565b600060405180830381600087803b158015613ae157600080fd5b505af1158015613af5573d6000803e3d6000fd5b505050505050565b600954613b159030906001600160a01b0316846129dd565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613b549030908790600090819061dead9042906004016141eb565b60606040518083038185885af1158015613b72573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b979190614226565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613c2e57858101830151858201604001528201613c12565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613c6457600080fd5b50565b60008060408385031215613c7a57600080fd5b8235613c8581613c4f565b946020939093013593505050565b600060208284031215613ca557600080fd5b8135613cb081613c4f565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cf657613cf6613cb7565b604052919050565b600067ffffffffffffffff821115613d1857613d18613cb7565b5060051b60200190565b600082601f830112613d3357600080fd5b81356020613d48613d4383613cfe565b613ccd565b82815260059290921b84018101918181019086841115613d6757600080fd5b8286015b84811015613d825780358352918301918301613d6b565b509695505050505050565b60008060408385031215613da057600080fd5b823567ffffffffffffffff80821115613db857600080fd5b818501915085601f830112613dcc57600080fd5b81356020613ddc613d4383613cfe565b82815260059290921b84018101918181019089841115613dfb57600080fd5b948201945b83861015613e22578535613e1381613c4f565b82529482019490820190613e00565b96505086013592505080821115613e3857600080fd5b50613e4585828601613d22565b9150509250929050565b600080600060608486031215613e6457600080fd5b8335613e6f81613c4f565b92506020840135613e7f81613c4f565b929592945050506040919091013590565b600060208284031215613ea257600080fd5b5035919050565b60008060408385031215613ebc57600080fd5b50508035926020909101359150565b8015158114613c6457600080fd5b60008060408385031215613eec57600080fd5b8235613ef781613c4f565b91506020830135613f0781613ecb565b809150509250929050565b600080600060608486031215613f2757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613f5157600080fd5b8235613f5c81613c4f565b91506020830135613f0781613c4f565b600081518084526020808501945080840160005b83811015613fa55781516001600160a01b031687529582019590820190600101613f80565b509495945050505050565b602081526000613cb06020830184613f6c565b600060208284031215613fd557600080fd5b8135613cb081613ecb565b600181811c90821680613ff457607f821691505b60208210810361401457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161408d5761408d614065565b5060010190565b8082028115828204841417610d2c57610d2c614065565b6000826140c857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d2c57610d2c614065565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561413957600080fd5b5051919050565b60006020828403121561415257600080fd5b8151613cb081613ecb565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561423b57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d2c57610d2c614065565b60006020828403121561430157600080fd5b8151613cb081613c4f565b85815284602082015260a06040820152600061432b60a0830186613f6c565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212205c7800871f39af1a0a37503e0e78c106da591c4213a021729cda626d6f59411b64736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061041f5760003560e01c80638366e79a1161021e578063c18bc19511610123578063eb084f70116100ab578063f2fde38b1161007a578063f2fde38b14610c12578063f5648a4f14610c32578063f637434214610c47578063f8b45b0514610c5d578063fb002c9714610c7357600080fd5b8063eb084f7014610bb1578063eb472fc414610bc6578063ee40166e14610be6578063f11a24d314610bfc57600080fd5b8063dc3f0d0f116100f2578063dc3f0d0f14610b0a578063dd62ed3e14610b2a578063e2f4560514610b70578063e35b35ac14610b86578063e884f26014610b9c57600080fd5b8063c18bc19514610a9a578063c876d0b914610aba578063d257b34f14610ad4578063d85ba06314610af457600080fd5b8063a457c2d7116101a6578063b62496f511610175578063b62496f5146109eb578063b987553914610a1b578063bbc0c74214610a3b578063c024666814610a5a578063c17b5b8c14610a7a57600080fd5b8063a457c2d714610975578063a62068ce14610995578063a9059cbb146109ab578063aff48bfb146109cb57600080fd5b80638da5cb5b116101ed5780638da5cb5b146108eb57806395d89b41146109095780639a5bd2dd1461091e5780639a7a23d614610940578063a28e86d31461096057600080fd5b80638366e79a1461086557806385b12c7c1461088557806385ecfd28146108a557806388e765ff146108d557600080fd5b80634f77f6c0116103245780636a486a8e116102ac578063715018a61161027b578063715018a6146107db578063751039fc146107f05780637571336a146108055780638095d5641461082557806382aa7c681461084557600080fd5b80636a486a8e1461076f5780636b0a894c146107855780636ddd17131461079b57806370a08231146107bb57600080fd5b80635a139dd4116102f35780635a139dd4146106ed5780635bb988c9146107035780635e18d4d5146107235780635eed98e21461074457806366d602ae1461075957600080fd5b80634f77f6c01461068b57806351d1f8ac146106a157806351f205e4146106c157806358a6d531146106d657600080fd5b806323b872dd116103a7578063395093511161037657806339509351146105f157806340755c7914610611578063452ed4f114610631578063499b8394146106515780634a62bb651461067157600080fd5b806323b872dd1461057f5780632be32b611461059f5780632fbd203a146105bf578063313ce567146105d557600080fd5b8063115bd5fe116103ee578063115bd5fe146104ee5780631805805b1461051257806318160ddd146105345780631a8145bb146105495780632307b4411461055f57600080fd5b806306fdde031461042b5780630758d92414610456578063095ea7b31461048e57806310d5de53146104be57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b50610440610c89565b60405161044d9190613c01565b60405180910390f35b34801561046257600080fd5b50600954610476906001600160a01b031681565b6040516001600160a01b03909116815260200161044d565b34801561049a57600080fd5b506104ae6104a9366004613c67565b610d1b565b604051901515815260200161044d565b3480156104ca57600080fd5b506104ae6104d9366004613c93565b60256020526000908152604090205460ff1681565b3480156104fa57600080fd5b5061050460235481565b60405190815260200161044d565b34801561051e57600080fd5b5061053261052d366004613c93565b610d32565b005b34801561054057600080fd5b50600254610504565b34801561055557600080fd5b5061050460225481565b34801561056b57600080fd5b5061053261057a366004613d8d565b610df1565b34801561058b57600080fd5b506104ae61059a366004613e4f565b610f49565b3480156105ab57600080fd5b506105326105ba366004613e90565b610ff3565b3480156105cb57600080fd5b5061050460195481565b3480156105e157600080fd5b506040516012815260200161044d565b3480156105fd57600080fd5b506104ae61060c366004613c67565b611194565b34801561061d57600080fd5b5061053261062c366004613c93565b6111d0565b34801561063d57600080fd5b50600a54610476906001600160a01b031681565b34801561065d57600080fd5b5061053261066c366004613c93565b611287565b34801561067d57600080fd5b506013546104ae9060ff1681565b34801561069757600080fd5b50610504601e5481565b3480156106ad57600080fd5b506105326106bc366004613ea9565b611360565b3480156106cd57600080fd5b50610532611442565b3480156106e257600080fd5b50600f5443106104ae565b3480156106f957600080fd5b5061050460175481565b34801561070f57600080fd5b5061053261071e366004613c93565b61154b565b34801561072f57600080fd5b506013546104ae906301000000900460ff1681565b34801561075057600080fd5b506105326115fe565b34801561076557600080fd5b5061050460075481565b34801561077b57600080fd5b50610504601d5481565b34801561079157600080fd5b5061050460125481565b3480156107a757600080fd5b506013546104ae9062010000900460ff1681565b3480156107c757600080fd5b506105046107d6366004613c93565b61168a565b3480156107e757600080fd5b506105326116a5565b3480156107fc57600080fd5b50610532611719565b34801561081157600080fd5b50610532610820366004613ed9565b61174f565b34801561083157600080fd5b50610532610840366004613f12565b611817565b34801561085157600080fd5b50610532610860366004613e90565b6118ba565b34801561087157600080fd5b506104ae610880366004613f3e565b6119ae565b34801561089157600080fd5b506105326108a0366004613e90565b611be8565b3480156108b157600080fd5b506104ae6108c0366004613c93565b60106020526000908152604090205460ff1681565b3480156108e157600080fd5b5061050460065481565b3480156108f757600080fd5b506005546001600160a01b0316610476565b34801561091557600080fd5b50610440611dd5565b34801561092a57600080fd5b50610933611de4565b60405161044d9190613fb0565b34801561094c57600080fd5b5061053261095b366004613ed9565b611e45565b34801561096c57600080fd5b50610532611f39565b34801561098157600080fd5b506104ae610990366004613c67565b611f72565b3480156109a157600080fd5b50610504600f5481565b3480156109b757600080fd5b506104ae6109c6366004613c67565b61200b565b3480156109d757600080fd5b506105326109e6366004613c93565b612018565b3480156109f757600080fd5b506104ae610a06366004613c93565b60266020526000908152604090205460ff1681565b348015610a2757600080fd5b50610532610a36366004613fc3565b6120f0565b348015610a4757600080fd5b506013546104ae90610100900460ff1681565b348015610a6657600080fd5b50610532610a75366004613ed9565b6121af565b348015610a8657600080fd5b50610532610a95366004613f12565b612238565b348015610aa657600080fd5b50610532610ab5366004613e90565b6122db565b348015610ac657600080fd5b506015546104ae9060ff1681565b348015610ae057600080fd5b50610532610aef366004613e90565b61247a565b348015610b0057600080fd5b5061050460165481565b348015610b1657600080fd5b50610532610b25366004613e90565b6125c5565b348015610b3657600080fd5b50610504610b45366004613f3e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b7c57600080fd5b50610504600b5481565b348015610b9257600080fd5b5061050460205481565b348015610ba857600080fd5b50610532612760565b348015610bbd57600080fd5b50610532612796565b348015610bd257600080fd5b50610476610be1366004613e90565b61285c565b348015610bf257600080fd5b50610504600e5481565b348015610c0857600080fd5b5061050460185481565b348015610c1e57600080fd5b50610532610c2d366004613c93565b612886565b348015610c3e57600080fd5b50610532612971565b348015610c5357600080fd5b50610504601f5481565b348015610c6957600080fd5b5061050460085481565b348015610c7f57600080fd5b5061050460215481565b606060038054610c9890613fe0565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc490613fe0565b8015610d115780601f10610ce657610100808354040283529160200191610d11565b820191906000526020600020905b815481529060010190602001808311610cf457829003601f168201915b5050505050905090565b6000610d283384846129dd565b5060015b92915050565b6005546001600160a01b03163314610d655760405162461bcd60e51b8152600401610d5c9061401a565b60405180910390fd5b601354610100900460ff1615610dcf5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610d5c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610d5c9061401a565b8051825114610e6c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d5c565b60c8825110610edc5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d5c565b60005b8251811015610f44576000838281518110610efc57610efc61404f565b602002602001015190506000838381518110610f1a57610f1a61404f565b60200260200101519050610f2f338383612b01565b50508080610f3c9061407b565b915050610edf565b505050565b6000610f56848484612c56565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fdb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d5c565b610fe885338584036129dd565b506001949350505050565b6005546001600160a01b0316331461101d5760405162461bcd60e51b8152600401610d5c9061401a565b670de0b6b3a76400006103e861103260025490565b61103d906005614094565b61104791906140ab565b61105191906140ab565b8110156110b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610d5c565b670de0b6b3a764000060646110c660025490565b6110d1906002614094565b6110db91906140ab565b6110e591906140ab565b8111156111465760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d5c565b61115881670de0b6b3a7640000614094565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d289185906111cb9086906140cd565b6129dd565b6005546001600160a01b031633146111fa5760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b03811660009081526010602052604090205460ff16156112635760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610d5c565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6005546001600160a01b031633146112b15760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b0381166113165760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d5c565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461138a5760405162461bcd60e51b8152600401610d5c9061401a565b6013546301000000900460ff166113ee5760405162461bcd60e51b815260206004820152602260248201527f4c61756e636820746178206d6f64652064697361626c656420666f7220657665604482015261722160f01b6064820152608401610d5c565b601782905560006018819055601981905561140981846140cd565b61141391906140cd565b601655601e8190556000601f819055602081905561143181836140cd565b61143b91906140cd565b601d555050565b6005546001600160a01b0316331461146c5760405162461bcd60e51b8152600401610d5c9061401a565b600b546114783061168a565b10156114ee576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d5c565b600a805460ff60a01b1916600160a01b17905561150961376d565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115755760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b03811660009081526010602052604090205460ff166115dd5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d5c565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146116285760405162461bcd60e51b8152600401610d5c9061401a565b601a546017819055601b546018819055601c5460198190559161164b91906140cd565b61165591906140cd565b601655601a54601e819055601b54601f819055601c5460208190559161167b91906140cd565b61168591906140cd565b601d55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116cf5760405162461bcd60e51b8152600401610d5c9061401a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146117435760405162461bcd60e51b8152600401610d5c9061401a565b6013805460ff19169055565b6005546001600160a01b031633146117795760405162461bcd60e51b8152600401610d5c9061401a565b806117ec57600a546001600160a01b03908116908316036117ec5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d5c565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118415760405162461bcd60e51b8152600401610d5c9061401a565b6017839055601882905560198190558061185b83856140cd565b61186591906140cd565b6016819055600f1015610f445760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610d5c565b6005546001600160a01b031633146118e45760405162461bcd60e51b8152600401610d5c9061401a565b601354610100900460ff161561193c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d5c565b600a81111561195d5760405162461bcd60e51b8152600401610d5c906140e0565b6013805462ffff0019166201010017905543600e81905561197f9082906140cd565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119db5760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b038316611a315760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d5c565b6001600160a01b03831630141580611a515750601354610100900460ff16155b611aba5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d5c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190614127565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190614140565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611c125760405162461bcd60e51b8152600401610d5c9061401a565b601354610100900460ff1615611c3a5760405162461bcd60e51b8152600401610d5c9061415d565b600a8110611c5a5760405162461bcd60e51b8152600401610d5c906140e0565b6013805462ffff0019166201010017905543600e819055611c7c9082906140cd565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611cc85760405162461bcd60e51b8152600401610d5c906141a8565b6000611cd33061168a565b11611d2f5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d5c565b600954611d4a9030906001600160a01b03166111cb8261168a565b6009546001600160a01b031663f305d7194730611d668161168a565b60008033426040518863ffffffff1660e01b8152600401611d8c969594939291906141eb565b60606040518083038185885af1158015611daa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dcf9190614226565b50505050565b606060048054610c9890613fe0565b60606011805480602002602001604051908101604052809291908181526020018280548015610d1157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e1e575050505050905090565b6005546001600160a01b03163314611e6f5760405162461bcd60e51b8152600401610d5c9061401a565b600a546001600160a01b0390811690831603611ef35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d5c565b611efd8282613975565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611f635760405162461bcd60e51b8152600401610d5c9061401a565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611ff45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d5c565b61200133858584036129dd565b5060019392505050565b6000610d28338484612c56565b6005546001600160a01b031633146120425760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b0381166120a65760405162461bcd60e51b815260206004820152602560248201527f5f61694275794261636b4164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d5c565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fc39bde604078bfe7027054059c2b38f20c11265a625912a22566b0cc47b9af8890600090a250565b6005546001600160a01b0316331461211a5760405162461bcd60e51b8152600401610d5c9061401a565b806121675760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610d5c565b601354610100900460ff161561218f5760405162461bcd60e51b8152600401610d5c9061415d565b60004711611cc85760405162461bcd60e51b8152600401610d5c906141a8565b6005546001600160a01b031633146121d95760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146122625760405162461bcd60e51b8152600401610d5c9061401a565b601e839055601f82905560208190558061227c83856140cd565b61228691906140cd565b601d81905560141015610f445760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610d5c565b6005546001600160a01b031633146123055760405162461bcd60e51b8152600401610d5c9061401a565b670de0b6b3a76400006103e861231a60025490565b612325906005614094565b61232f91906140ab565b61233991906140ab565b81101561239d5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610d5c565b670de0b6b3a764000060646123b160025490565b6123bc906002614094565b6123c691906140ab565b6123d091906140ab565b8111156124335760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610d5c565b61244581670de0b6b3a7640000614094565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611189565b6005546001600160a01b031633146124a45760405162461bcd60e51b8152600401610d5c9061401a565b620186a06124b160025490565b6124bc906001614094565b6124c691906140ab565b8110156125335760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d5c565b6103e861253f60025490565b61254a906001614094565b61255491906140ab565b8111156125c05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d5c565b600b55565b6005546001600160a01b031633146125ef5760405162461bcd60e51b8152600401610d5c9061401a565b670de0b6b3a76400006103e861260460025490565b61260f906005614094565b61261991906140ab565b61262391906140ab565b8110156126855760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610d5c565b670de0b6b3a7640000606461269960025490565b6126a4906002614094565b6126ae91906140ab565b6126b891906140ab565b8111156127195760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d5c565b61272b81670de0b6b3a7640000614094565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611189565b6005546001600160a01b0316331461278a5760405162461bcd60e51b8152600401610d5c9061401a565b6015805460ff19169055565b6005546001600160a01b031633146127c05760405162461bcd60e51b8152600401610d5c9061401a565b6013546301000000900460ff166128245760405162461bcd60e51b815260206004820152602260248201527f4c61756e636820746178206d6f646520616c72656164792064697361626c6564604482015261212160f01b6064820152608401610d5c565b6013805463ff000000191690556040517f8516c2f16a94070035659052f0edfeefefeba6f319cf48e580b37196c17c5ac090600090a1565b6011818154811061286c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146128b05760405162461bcd60e51b8152600401610d5c9061401a565b6001600160a01b0381166129155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d5c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461299b5760405162461bcd60e51b8152600401610d5c9061401a565b604051600090339047908381818185875af1925050503d8060008114611dcf576040519150601f19603f3d011682016040523d82523d6000602084013e611dcf565b6001600160a01b038316612a3f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d5c565b6001600160a01b038216612aa05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d5c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b275760405162461bcd60e51b8152600401610d5c90614254565b6001600160a01b038216612b4d5760405162461bcd60e51b8152600401610d5c90614299565b6001600160a01b03831660009081526020819052604090205481811015612bc55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d5c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612bfc9084906140cd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c4891815260200190565b60405180910390a350505050565b6001600160a01b038316612c7c5760405162461bcd60e51b8152600401610d5c90614254565b6001600160a01b038216612ca25760405162461bcd60e51b8152600401610d5c90614299565b60008111612cf25760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d5c565b601354610100900460ff16612d85576001600160a01b03831660009081526024602052604090205460ff1680612d4057506001600160a01b03821660009081526024602052604090205460ff165b612d855760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d5c565b600f544310158015612d9e5750601354610100900460ff165b15612e6e576001600160a01b03831660009081526010602052604090205460ff161580612dd857506005546001600160a01b038381169116145b80612ded57506001600160a01b03821661dead145b612e6e5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d5c565b60135460ff161561324c576005546001600160a01b03848116911614801590612ea557506005546001600160a01b03838116911614155b8015612ebc57506001600160a01b03821661dead14155b8015612ee157506001600160a01b03831660009081526024602052604090205460ff16155b8015612f0657506001600160a01b03821660009081526024602052604090205460ff16155b1561324c5760155460ff161561301f576009546001600160a01b03838116911614801590612f425750600a546001600160a01b03838116911614155b1561301f57612f526002436142dc565b32600090815260146020526040902054108015612f905750612f756002436142dc565b6001600160a01b038316600090815260146020526040902054105b612ffa5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d5c565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff16801561306057506001600160a01b03821660009081526025602052604090205460ff16155b15613127576006548111156130c85760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d5c565b6008546130d48361168a565b6130de90836140cd565b11156131225760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5c565b61324c565b6001600160a01b03821660009081526026602052604090205460ff16801561316857506001600160a01b03831660009081526025602052604090205460ff16155b156131d2576007548111156131225760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d5c565b6001600160a01b03821660009081526025602052604090205460ff1661324c576008546131fe8361168a565b61320890836140cd565b111561324c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5c565b60006132573061168a565b600b5490915081108015908190613276575060135462010000900460ff165b801561328c5750600a54600160a01b900460ff16155b80156132b057506001600160a01b03841660009081526026602052604090205460ff165b156132de57600a805460ff60a01b1916600160a01b1790556132d061376d565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff168061332057506001600160a01b03851660009081526024602052604090205460ff165b15613329575060005b6000811561375957600f5443108061336f5750670c7d713b49da000060065461335291906142dc565b851015801561336f575043600f54600861336c91906140cd565b10155b801561339357506001600160a01b03871660009081526026602052604090205460ff165b80156133b857506001600160a01b03861660009081526026602052604090205460ff16155b80156133dd57506001600160a01b03861660009081526024602052604090205460ff16155b80156133eb57506000601654115b156135a257600f5443106134125760016006600082825461340c91906142dc565b90915550505b6001600160a01b03861660009081526010602052604090205460ff166134f2576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601280549192909161346b9084906140cd565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646134ff866063614094565b61350991906140ab565b90506016546018548261351c9190614094565b61352691906140ab565b6022600082825461353791906140cd565b909155505060165460175461354c9083614094565b61355691906140ab565b6021600082825461356791906140cd565b909155505060165460195461357c9083614094565b61358691906140ab565b6023600082825461359791906140cd565b9091555061373b9050565b6001600160a01b03861660009081526026602052604090205460ff1680156135cc57506000601d54115b1561365e576064601d54866135e19190614094565b6135eb91906140ab565b9050601d54601f54826135fe9190614094565b61360891906140ab565b6022600082825461361991906140cd565b9091555050601d54601e5461362e9083614094565b61363891906140ab565b6021600082825461364991906140cd565b9091555050601d5460205461357c9083614094565b6001600160a01b03871660009081526026602052604090205460ff16801561368857506000601654115b1561373b5760646016548661369d9190614094565b6136a791906140ab565b9050601654601854826136ba9190614094565b6136c491906140ab565b602260008282546136d591906140cd565b90915550506016546017546136ea9083614094565b6136f491906140ab565b6021600082825461370591906140cd565b909155505060165460195461371a9083614094565b61372491906140ab565b6023600082825461373591906140cd565b90915550505b801561374c5761374c873083612b01565b61375681866142dc565b94505b613764878787612b01565b50505050505050565b60006137783061168a565b9050600060235460215460225461378f91906140cd565b61379991906140cd565b90508115806137a6575080155b156137af575050565b600b546137bd90600a614094565b8211156137d557600b546137d290600a614094565b91505b600080600283602254866137e99190614094565b6137f391906140ab565b6137fd91906140ab565b905061381161380c82866142dc565b6139a3565b60225447908190600090613827906002906140ab565b61383190876142dc565b60215461383e9085614094565b61384891906140ab565b90506000600260225461385b91906140ab565b61386590886142dc565b6023546138729086614094565b61387c91906140ab565b905061388881836140cd565b61389290846142dc565b600060228190556021819055602355925084158015906138b25750600083115b156138c1576138c18584613afd565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461390e576040519150601f19603f3d011682016040523d82523d6000602084013e613913565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613963576040519150601f19603f3d011682016040523d82523d6000602084013e613968565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff1916821515179055611efd8282613b9e565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106139d8576139d861404f565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5591906142ef565b81600181518110613a6857613a6861404f565b6001600160a01b039283166020918202929092010152600954613a8e91309116846129dd565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ac790859060009086903090429060040161430c565b600060405180830381600087803b158015613ae157600080fd5b505af1158015613af5573d6000803e3d6000fd5b505050505050565b600954613b159030906001600160a01b0316846129dd565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613b549030908790600090819061dead9042906004016141eb565b60606040518083038185885af1158015613b72573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b979190614226565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613c2e57858101830151858201604001528201613c12565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613c6457600080fd5b50565b60008060408385031215613c7a57600080fd5b8235613c8581613c4f565b946020939093013593505050565b600060208284031215613ca557600080fd5b8135613cb081613c4f565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cf657613cf6613cb7565b604052919050565b600067ffffffffffffffff821115613d1857613d18613cb7565b5060051b60200190565b600082601f830112613d3357600080fd5b81356020613d48613d4383613cfe565b613ccd565b82815260059290921b84018101918181019086841115613d6757600080fd5b8286015b84811015613d825780358352918301918301613d6b565b509695505050505050565b60008060408385031215613da057600080fd5b823567ffffffffffffffff80821115613db857600080fd5b818501915085601f830112613dcc57600080fd5b81356020613ddc613d4383613cfe565b82815260059290921b84018101918181019089841115613dfb57600080fd5b948201945b83861015613e22578535613e1381613c4f565b82529482019490820190613e00565b96505086013592505080821115613e3857600080fd5b50613e4585828601613d22565b9150509250929050565b600080600060608486031215613e6457600080fd5b8335613e6f81613c4f565b92506020840135613e7f81613c4f565b929592945050506040919091013590565b600060208284031215613ea257600080fd5b5035919050565b60008060408385031215613ebc57600080fd5b50508035926020909101359150565b8015158114613c6457600080fd5b60008060408385031215613eec57600080fd5b8235613ef781613c4f565b91506020830135613f0781613ecb565b809150509250929050565b600080600060608486031215613f2757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613f5157600080fd5b8235613f5c81613c4f565b91506020830135613f0781613c4f565b600081518084526020808501945080840160005b83811015613fa55781516001600160a01b031687529582019590820190600101613f80565b509495945050505050565b602081526000613cb06020830184613f6c565b600060208284031215613fd557600080fd5b8135613cb081613ecb565b600181811c90821680613ff457607f821691505b60208210810361401457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161408d5761408d614065565b5060010190565b8082028115828204841417610d2c57610d2c614065565b6000826140c857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d2c57610d2c614065565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561413957600080fd5b5051919050565b60006020828403121561415257600080fd5b8151613cb081613ecb565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561423b57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d2c57610d2c614065565b60006020828403121561430157600080fd5b8151613cb081613c4f565b85815284602082015260a06040820152600061432b60a0830186613f6c565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212205c7800871f39af1a0a37503e0e78c106da591c4213a021729cda626d6f59411b64736f6c63430008120033

Deployed Bytecode Sourcemap

10605:26408:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4072:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10748:27;;;;;;;;;;-1:-1:-1;10748:27:0;;;;-1:-1:-1;;;;;10748:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10748:27:0;567:221:1;5127:210:0;;;;;;;;;;-1:-1:-1;5127:210:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5127:210:0;1249:187:1;12298:63:0;;;;;;;;;;-1:-1:-1;12298:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12116:33;;;;;;;;;;;;;;;;;;;1839:25:1;;;1827:2;1812:18;12116:33:0;1693:177:1;17397:194:0;;;;;;;;;;-1:-1:-1;17397:194:0;;;;;:::i;:::-;;:::i;:::-;;4393:108;;;;;;;;;;-1:-1:-1;4481:12:0;;4393:108;;12076:33;;;;;;;;;;;;;;;;33491:719;;;;;;;;;;-1:-1:-1;33491:719:0;;;;;:::i;:::-;;:::i;5345:529::-;;;;;;;;;;-1:-1:-1;5345:529:0;;;;;:::i;:::-;;:::i;17758:456::-;;;;;;;;;;-1:-1:-1;17758:456:0;;;;;:::i;:::-;;:::i;11700:30::-;;;;;;;;;;;;;;;;4292:93;;;;;;;;;;-1:-1:-1;4292:93:0;;4375:2;5150:36:1;;5138:2;5123:18;4292:93:0;5008:184:1;5882:297:0;;;;;;;;;;-1:-1:-1;5882:297:0;;;;;:::i;:::-;;:::i;17026:174::-;;;;;;;;;;-1:-1:-1;17026:174:0;;;;;:::i;:::-;;:::i;10782:21::-;;;;;;;;;;-1:-1:-1;10782:21:0;;;;-1:-1:-1;;;;;10782:21:0;;;32163:357;;;;;;;;;;-1:-1:-1;32163:357:0;;;;;:::i;:::-;;:::i;11199:33::-;;;;;;;;;;-1:-1:-1;11199:33:0;;;;;;;;11918:32;;;;;;;;;;;;;;;;34461:513;;;;;;;;;;-1:-1:-1;34461:513:0;;;;;:::i;:::-;;:::i;32906:349::-;;;;;;;;;;;;;:::i;28524:121::-;;;;;;;;;;-1:-1:-1;28619:18:0;;28604:12;:33;28524:121;;11625:31;;;;;;;;;;;;;;;;17208:181;;;;;;;;;;-1:-1:-1;17208:181:0;;;;;:::i;:::-;;:::i;11317:39::-;;;;;;;;;;-1:-1:-1;11317:39:0;;;;;;;;;;;21721:538;;;;;;;;;;;;;:::i;10680:28::-;;;;;;;;;;;;;;;;11883;;;;;;;;;;;;;;;;11165:25;;;;;;;;;;;;;;;;11279:31;;;;;;;;;;-1:-1:-1;11279:31:0;;;;;;;;;;;4509:177;;;;;;;;;;-1:-1:-1;4509:177:0;;;;;:::i;:::-;;:::i;8603:150::-;;;;;;;;;;;;;:::i;33307:84::-;;;;;;;;;;;;;:::i;19887:334::-;;;;;;;;;;-1:-1:-1;19887:334:0;;;;;:::i;:::-;;:::i;20834:431::-;;;;;;;;;;-1:-1:-1;20834:431:0;;;;;:::i;:::-;;:::i;16442:464::-;;;;;;;;;;-1:-1:-1;16442:464:0;;;;;:::i;:::-;;:::i;31333:567::-;;;;;;;;;;-1:-1:-1;31333:567:0;;;;;:::i;:::-;;:::i;35848:1162::-;;;;;;;;;;-1:-1:-1;35848:1162:0;;;;;:::i;:::-;;:::i;11080:43::-;;;;;;;;;;-1:-1:-1;11080:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10646:27;;;;;;;;;;;;;;;;8389:79;;;;;;;;;;-1:-1:-1;8454:6:0;;-1:-1:-1;;;;;8454:6:0;8389:79;;4180:104;;;;;;;;;;;;;:::i;16914:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20229:353::-;;;;;;;;;;-1:-1:-1;20229:353:0;;;;;:::i;:::-;;:::i;33399:84::-;;;;;;;;;;;;;:::i;6187:482::-;;;;;;;;;;-1:-1:-1;6187:482:0;;;;;:::i;:::-;;:::i;11040:33::-;;;;;;;;;;;;;;;;4694:216;;;;;;;;;;-1:-1:-1;4694:216:0;;;;;:::i;:::-;;:::i;32528:326::-;;;;;;;;;;-1:-1:-1;32528:326:0;;;;;:::i;:::-;;:::i;12519:57::-;;;;;;;;;;-1:-1:-1;12519:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34982:858;;;;;;;;;;-1:-1:-1;34982:858:0;;;;;:::i;:::-;;:::i;11239:33::-;;;;;;;;;;-1:-1:-1;11239:33:0;;;;;;;;;;;22267:182;;;;;;;;;;-1:-1:-1;22267:182:0;;;;;:::i;:::-;;:::i;21273:440::-;;;;;;;;;;-1:-1:-1;21273:440:0;;;;;:::i;:::-;;:::i;18691:461::-;;;;;;;;;;-1:-1:-1;18691:461:0;;;;;:::i;:::-;;:::i;11543:39::-;;;;;;;;;;-1:-1:-1;11543:39:0;;;;;;;;19222:428;;;;;;;;;;-1:-1:-1;19222:428:0;;;;;:::i;:::-;;:::i;11591:27::-;;;;;;;;;;;;;;;;18222:461;;;;;;;;;;-1:-1:-1;18222:461:0;;;;;:::i;:::-;;:::i;4918:201::-;;;;;;;;;;-1:-1:-1;4918:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5084:18:0;;;5052:7;5084:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4918:201;10840:33;;;;;;;;;;;;;;;;11995:31;;;;;;;;;;;;;;;;17652:98;;;;;;;;;;;;;:::i;34218:235::-;;;;;;;;;;;;;:::i;11130:28::-;;;;;;;;;;-1:-1:-1;11130:28:0;;;;;:::i;:::-;;:::i;10963:37::-;;;;;;;;;;;;;;;;11663:30;;;;;;;;;;;;;;;;8761:281;;;;;;;;;;-1:-1:-1;8761:281:0;;;;;:::i;:::-;;:::i;31970:185::-;;;;;;;;;;;;;:::i;11957:31::-;;;;;;;;;;;;;;;;10715:24;;;;;;;;;;;;;;;;12035:34;;;;;;;;;;;;;;;;4072:100;4126:13;4159:5;4152:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4072:100;:::o;5127:210::-;5246:4;5268:39;222:10;5291:7;5300:6;5268:8;:39::i;:::-;-1:-1:-1;5325:4:0;5127:210;;;;;:::o;17397:194::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;;;;;;;;;17483:13:::1;::::0;::::1;::::0;::::1;;;17482:14;17474:68;;;::::0;-1:-1:-1;;;17474:68:0;;8808:2:1;17474:68:0::1;::::0;::::1;8790:21:1::0;8847:2;8827:18;;;8820:30;8886:34;8866:18;;;8859:62;-1:-1:-1;;;8937:18:1;;;8930:39;8986:19;;17474:68:0::1;8606:405:1::0;17474:68:0::1;17553:9;:30:::0;;-1:-1:-1;;;;;;17553:30:0::1;-1:-1:-1::0;;;;;17553:30:0;;;::::1;::::0;;;::::1;::::0;;17397:194::o;33491:719::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;33672:15:::1;:22;33654:7;:14;:40;33632:120;;;::::0;-1:-1:-1;;;33632:120:0;;9218:2:1;33632:120:0::1;::::0;::::1;9200:21:1::0;9257:2;9237:18;;;9230:30;9296:32;9276:18;;;9269:60;9346:18;;33632:120:0::1;9016:354:1::0;33632:120:0::1;33802:3;33785:7;:14;:20;33763:124;;;::::0;-1:-1:-1;;;33763:124:0;;9577:2:1;33763:124:0::1;::::0;::::1;9559:21:1::0;9616:2;9596:18;;;9589:30;9655:34;9635:18;;;9628:62;-1:-1:-1;;;9706:18:1;;;9699:52;9768:19;;33763:124:0::1;9375:418:1::0;33763:124:0::1;34001:9;33996:207;34020:7;:14;34016:1;:18;33996:207;;;34056:14;34073:7;34081:1;34073:10;;;;;;;;:::i;:::-;;;;;;;34056:27;;34098:14;34115:15;34131:1;34115:18;;;;;;;;:::i;:::-;;;;;;;34098:35;;34148:43;34164:10;34176:6;34184;34148:15;:43::i;:::-;34041:162;;34036:3;;;;;:::i;:::-;;;;33996:207;;;;33491:719:::0;;:::o;5345:529::-;5485:4;5502:36;5512:6;5520:9;5531:6;5502:9;:36::i;:::-;-1:-1:-1;;;;;5578:19:0;;5551:24;5578:19;;;:11;:19;;;;;;;;222:10;5578:33;;;;;;;;5644:26;;;;5622:116;;;;-1:-1:-1;;;5622:116:0;;10404:2:1;5622:116:0;;;10386:21:1;10443:2;10423:18;;;10416:30;10482:34;10462:18;;;10455:62;-1:-1:-1;;;10533:18:1;;;10526:38;10581:19;;5622:116:0;10202:404:1;5622:116:0;5774:57;5783:6;222:10;5824:6;5805:16;:25;5774:8;:57::i;:::-;-1:-1:-1;5862:4:0;;5345:529;-1:-1:-1;;;;5345:529:0:o;17758:456::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;17895:4:::1;17887;17866:13;4481:12:::0;;;4393:108;17866:13:::1;:17;::::0;17882:1:::1;17866:17;:::i;:::-;17865:26;;;;:::i;:::-;17864:35;;;;:::i;:::-;17854:6;:45;;17832:136;;;::::0;-1:-1:-1;;;17832:136:0;;11208:2:1;17832:136:0::1;::::0;::::1;11190:21:1::0;11247:2;11227:18;;;11220:30;11286:34;11266:18;;;11259:62;-1:-1:-1;;;11337:18:1;;;11330:39;11386:19;;17832:136:0::1;11006:405:1::0;17832:136:0::1;18041:4;18034:3;18013:13;4481:12:::0;;;4393:108;18013:13:::1;:17;::::0;18029:1:::1;18013:17;:::i;:::-;18012:25;;;;:::i;:::-;18011:34;;;;:::i;:::-;18001:6;:44;;17979:135;;;::::0;-1:-1:-1;;;17979:135:0;;11618:2:1;17979:135:0::1;::::0;::::1;11600:21:1::0;11657:2;11637:18;;;11630:30;11696:34;11676:18;;;11669:62;-1:-1:-1;;;11747:18:1;;;11740:39;11796:19;;17979:135:0::1;11416:405:1::0;17979:135:0::1;18140:17;:6:::0;18150::::1;18140:17;:::i;:::-;18125:12;:32:::0;;;18173:33:::1;::::0;1839:25:1;;;18173:33:0::1;::::0;1827:2:1;1812:18;18173:33:0::1;;;;;;;;17758:456:::0;:::o;5882:297::-;222:10;5997:4;6091:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6091:34:0;;;;;;;;;;5997:4;;6019:130;;6069:7;;6091:47;;6128:10;;6091:47;:::i;:::-;6019:8;:130::i;17026:174::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17105:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17104:20;17096:59;;;::::0;-1:-1:-1;;;17096:59:0;;12158:2:1;17096:59:0::1;::::0;::::1;12140:21:1::0;12197:2;12177:18;;;12170:30;12236:28;12216:18;;;12209:56;12282:18;;17096:59:0::1;11956:350:1::0;17096:59:0::1;-1:-1:-1::0;;;;;17166:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;17166:26:0::1;17188:4;17166:26;::::0;;17026:174::o;32163:357::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32296:32:0;::::1;32274:120;;;::::0;-1:-1:-1;;;32274:120:0;;12513:2:1;32274:120:0::1;::::0;::::1;12495:21:1::0;12552:2;12532:18;;;12525:30;12591:34;12571:18;;;12564:62;-1:-1:-1;;;12642:18:1;;;12635:36;12688:19;;32274:120:0::1;12311:402:1::0;32274:120:0::1;32405:17;:47:::0;;-1:-1:-1;;;;;;32405:47:0::1;-1:-1:-1::0;;;;;32405:47:0;::::1;::::0;;::::1;::::0;;;32468:44:::1;::::0;::::1;::::0;-1:-1:-1;;32468:44:0::1;32163:357:::0;:::o;34461:513::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;34553:20:::1;::::0;;;::::1;;;34545:67;;;::::0;-1:-1:-1;;;34545:67:0;;12920:2:1;34545:67:0::1;::::0;::::1;12902:21:1::0;12959:2;12939:18;;;12932:30;12998:34;12978:18;;;12971:62;-1:-1:-1;;;13049:18:1;;;13042:32;13091:19;;34545:67:0::1;12718:398:1::0;34545:67:0::1;34625:16;:22:::0;;;34676:1:::1;34658:15;:19:::0;;;34688:15:::1;:19:::0;;;34733:34:::1;34676:1:::0;34644:3;34733:34:::1;:::i;:::-;:52;;;;:::i;:::-;34718:12;:67:::0;34798:17:::1;:24:::0;;;-1:-1:-1;34833:16:0::1;:20:::0;;;34864:16:::1;:20:::0;;;34911:36:::1;-1:-1:-1::0;34818:4:0;34911:36:::1;:::i;:::-;:55;;;;:::i;:::-;34895:13;:71:::0;-1:-1:-1;;34461:513:0:o;32906:349::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;33011:18:::1;;32983:24;33001:4;32983:9;:24::i;:::-;:46;;32961:160;;;::::0;;-1:-1:-1;;;32961:160:0;;13323:2:1;32961:160:0::1;::::0;::::1;13305:21:1::0;13342:18;;;13335:30;;;;13401:34;13381:18;;;13374:62;13472:34;13452:18;;;13445:62;13524:19;;32961:160:0::1;13121:428:1::0;32961:160:0::1;33132:8;:15:::0;;-1:-1:-1;;;;33132:15:0::1;-1:-1:-1::0;;;33132:15:0::1;::::0;;33158:10:::1;:8;:10::i;:::-;33179:8;:16:::0;;-1:-1:-1;;;;33179:16:0::1;::::0;;33211:36:::1;::::0;33231:15:::1;1839:25:1::0;;33211:36:0::1;::::0;1827:2:1;1812:18;33211:36:0::1;;;;;;;32906:349::o:0;17208:181::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17289:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17281:62;;;::::0;-1:-1:-1;;;17281:62:0;;13756:2:1;17281:62:0::1;::::0;::::1;13738:21:1::0;13795:2;13775:18;;;13768:30;13834:32;13814:18;;;13807:60;13884:18;;17281:62:0::1;13554:354:1::0;17281:62:0::1;-1:-1:-1::0;;;;;17354:19:0::1;17376:5;17354:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17354:27:0::1;::::0;;17208:181::o;21721:538::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;21794:25:::1;::::0;21775:16:::1;:44:::0;;;21848:24:::1;::::0;21830:15:::1;:42:::0;;;21901:24:::1;::::0;21883:15:::1;:42:::0;;;21901:24;21951:34:::1;::::0;21848:24;21951:34:::1;:::i;:::-;:52;;;;:::i;:::-;21936:12;:67:::0;22036:25:::1;::::0;22016:17:::1;:45:::0;;;22091:24:::1;::::0;22072:16:::1;:43:::0;;;22145:24:::1;::::0;22126:16:::1;:43:::0;;;22145:24;22196:36:::1;::::0;22091:24;22196:36:::1;:::i;:::-;:55;;;;:::i;:::-;22180:13;:71:::0;21721:538::o;4509:177::-;-1:-1:-1;;;;;4660:18:0;4628:7;4660:18;;;;;;;;;;;;4509:177::o;8603:150::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;8696:6:::1;::::0;8675:40:::1;::::0;8712:1:::1;::::0;-1:-1:-1;;;;;8696:6:0::1;::::0;8675:40:::1;::::0;8712:1;;8675:40:::1;8726:6;:19:::0;;-1:-1:-1;;;;;;8726:19:0::1;::::0;;8603:150::o;33307:84::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;33361:14:::1;:22:::0;;-1:-1:-1;;33361:22:0::1;::::0;;33307:84::o;19887:334::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;20007:4:::1;20002:155;;20064:6;::::0;-1:-1:-1;;;;;20064:6:0;;::::1;20054:16:::0;;::::1;::::0;20028:117:::1;;;::::0;-1:-1:-1;;;20028:117:0;;14115:2:1;20028:117:0::1;::::0;::::1;14097:21:1::0;14154:2;14134:18;;;14127:30;14193:34;14173:18;;;14166:62;-1:-1:-1;;;14244:18:1;;;14237:37;14291:19;;20028:117:0::1;13913:403:1::0;20028:117:0::1;-1:-1:-1::0;;;;;20167:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20167:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19887:334::o;20834:431::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;20991:16:::1;:33:::0;;;21035:15:::1;:31:::0;;;21077:15:::1;:31:::0;;;21095:13;21134:34:::1;21053:13:::0;21010:14;21134:34:::1;:::i;:::-;:52;;;;:::i;:::-;21119:12;:67:::0;;;21221:2:::1;-1:-1:-1::0;21205:18:0::1;21197:60;;;::::0;-1:-1:-1;;;21197:60:0;;14523:2:1;21197:60:0::1;::::0;::::1;14505:21:1::0;14562:2;14542:18;;;14535:30;14601:31;14581:18;;;14574:59;14650:18;;21197:60:0::1;14321:353:1::0;16442:464:0;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;16530:13:::1;::::0;::::1;::::0;::::1;;;16529:14;16521:50;;;::::0;-1:-1:-1;;;16521:50:0;;14881:2:1;16521:50:0::1;::::0;::::1;14863:21:1::0;14920:2;14900:18;;;14893:30;14959:25;14939:18;;;14932:53;15002:18;;16521:50:0::1;14679:347:1::0;16521:50:0::1;16624:2;16604:16;:22;;16582:111;;;;-1:-1:-1::0;;;16582:111:0::1;;;;;;;:::i;:::-;16704:13;:20:::0;;-1:-1:-1;;16735:18:0;;;;;16785:12:::1;16764:18;:33:::0;;;16829:37:::1;::::0;16850:16;;16829:37:::1;:::i;:::-;16808:18;:58:::0;16882:16:::1;::::0;::::1;::::0;;;::::1;16442:464:::0;:::o;31333:567::-;8516:6;;31447:10;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31483:20:0;::::1;31475:59;;;::::0;-1:-1:-1;;;31475:59:0;;15641:2:1;31475:59:0::1;::::0;::::1;15623:21:1::0;15680:2;15660:18;;;15653:30;15719:28;15699:18;;;15692:56;15765:18;;31475:59:0::1;15439:350:1::0;31475:59:0::1;-1:-1:-1::0;;;;;31567:23:0;::::1;31585:4;31567:23;;::::0;:41:::1;;-1:-1:-1::0;31595:13:0::1;::::0;::::1;::::0;::::1;;;31594:14;31567:41;31545:143;;;::::0;-1:-1:-1;;;31545:143:0;;15996:2:1;31545:143:0::1;::::0;::::1;15978:21:1::0;16035:2;16015:18;;;16008:30;16074:34;16054:18;;;16047:62;-1:-1:-1;;;16125:18:1;;;16118:50;16185:19;;31545:143:0::1;15794:416:1::0;31545:143:0::1;31726:39;::::0;-1:-1:-1;;;31726:39:0;;31759:4:::1;31726:39;::::0;::::1;731:51:1::0;31699:24:0::1;::::0;-1:-1:-1;;;;;31726:24:0;::::1;::::0;::::1;::::0;704:18:1;;31726:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31784:46;::::0;-1:-1:-1;;;31784:46:0;;-1:-1:-1;;;;;16596:32:1;;;31784:46:0::1;::::0;::::1;16578:51:1::0;16645:18;;;16638:34;;;31699:66:0;;-1:-1:-1;31784:23:0;;::::1;::::0;::::1;::::0;16551:18:1;;31784:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31846;::::0;;-1:-1:-1;;;;;16596:32:1;;16578:51;;16660:2;16645:18;;16638:34;;;31776:54:0;;-1:-1:-1;31846:46:0::1;::::0;16551:18:1;31846:46:0::1;;;;;;;31464:436;31333:567:::0;;;;:::o;35848:1162::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;35929:13:::1;::::0;::::1;::::0;::::1;;;35928:14;35920:70;;;;-1:-1:-1::0;;;35920:70:0::1;;;;;;;:::i;:::-;36042:2;36023:16;:21;36001:110;;;;-1:-1:-1::0;;;36001:110:0::1;;;;;;;:::i;:::-;36159:13;:20:::0;;-1:-1:-1;;36190:18:0;;;;;36240:12:::1;36219:18;:33:::0;;;36284:37:::1;::::0;36305:16;;36284:37:::1;:::i;:::-;36263:18;:58:::0;36337:16:::1;::::0;::::1;::::0;;;::::1;36442:1;36418:21;:25;36396:110;;;;-1:-1:-1::0;;;36396:110:0::1;;;;;;;:::i;:::-;36566:1;36539:24;36557:4;36539:9;:24::i;:::-;:28;36517:116;;;::::0;-1:-1:-1;;;36517:116:0;;17951:2:1;36517:116:0::1;::::0;::::1;17933:21:1::0;17990:2;17970:18;;;17963:30;18029:34;18009:18;;;18002:62;-1:-1:-1;;;18080:18:1;;;18073:36;18126:19;;36517:116:0::1;17749:402:1::0;36517:116:0::1;36678:9;::::0;36646:69:::1;::::0;36663:4:::1;::::0;-1:-1:-1;;;;;36678:9:0::1;36690:24;36663:4:::0;36690:9:::1;:24::i;36646:69::-;36728:9;::::0;-1:-1:-1;;;;;36728:9:0::1;:25;36761:21;36806:4;36826:24;36806:4:::0;36826:9:::1;:24::i;:::-;36865:1;36908::::0;36951:10:::1;36976:15;36728:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35848:1162:::0;:::o;4180:104::-;4236:13;4269:7;4262:14;;;;;:::i;16914:104::-;16963:16;16999:11;16992:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16992:18:0;;;;;;;;;;;;;;;;;;;;;;16914:104;:::o;20229:353::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;20375:6:::1;::::0;-1:-1:-1;;;;;20375:6:0;;::::1;20367:14:::0;;::::1;::::0;20345:121:::1;;;::::0;-1:-1:-1;;;20345:121:0;;19281:2:1;20345:121:0::1;::::0;::::1;19263:21:1::0;19320:2;19300:18;;;19293:30;19359:34;19339:18;;;19332:62;19430:27;19410:18;;;19403:55;19475:19;;20345:121:0::1;19079:421:1::0;20345:121:0::1;20477:41;20506:4;20512:5;20477:28;:41::i;:::-;20534:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20534:40:0;::::1;::::0;::::1;::::0;;;::::1;20229:353:::0;;:::o;33399:84::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;33454:14:::1;:21:::0;;-1:-1:-1;;33454:21:0::1;33471:4;33454:21;::::0;;33399:84::o;6187:482::-;222:10;6307:4;6356:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6356:34:0;;;;;;;;;;6423:35;;;;6401:122;;;;-1:-1:-1;;;6401:122:0;;19707:2:1;6401:122:0;;;19689:21:1;19746:2;19726:18;;;19719:30;19785:34;19765:18;;;19758:62;-1:-1:-1;;;19836:18:1;;;19829:35;19881:19;;6401:122:0;19505:401:1;6401:122:0;6559:67;222:10;6582:7;6610:15;6591:16;:34;6559:8;:67::i;:::-;-1:-1:-1;6657:4:0;;6187:482;-1:-1:-1;;;6187:482:0:o;4694:216::-;4816:4;4838:42;222:10;4862:9;4873:6;4838:9;:42::i;32528:326::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32636:31:0;::::1;32614:118;;;::::0;-1:-1:-1;;;32614:118:0;;20113:2:1;32614:118:0::1;::::0;::::1;20095:21:1::0;20152:2;20132:18;;;20125:30;20191:34;20171:18;;;20164:62;-1:-1:-1;;;20242:18:1;;;20235:35;20287:19;;32614:118:0::1;19911:401:1::0;32614:118:0::1;32743:16;:45:::0;;-1:-1:-1;;;;;;32743:45:0::1;-1:-1:-1::0;;;;;32743:45:0;::::1;::::0;;::::1;::::0;;;32804:42:::1;::::0;::::1;::::0;-1:-1:-1;;32804:42:0::1;32528:326:::0;:::o;34982:858::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;35054:12:::1;35046:56;;;::::0;-1:-1:-1;;;35046:56:0;;20519:2:1;35046:56:0::1;::::0;::::1;20501:21:1::0;20558:2;20538:18;;;20531:30;20597:33;20577:18;;;20570:61;20648:18;;35046:56:0::1;20317:355:1::0;35046:56:0::1;35122:13;::::0;::::1;::::0;::::1;;;35121:14;35113:70;;;;-1:-1:-1::0;;;35113:70:0::1;;;;;;;:::i;:::-;35272:1;35248:21;:25;35226:110;;;;-1:-1:-1::0;;;35226:110:0::1;;;;;;;:::i;22267:182::-:0;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22352:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22352:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22407:34;;1389:41:1;;;22407:34:0::1;::::0;1362:18:1;22407:34:0::1;;;;;;;22267:182:::0;;:::o;21273:440::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;21431:17:::1;:34:::0;;;21476:16:::1;:32:::0;;;21519:16:::1;:32:::0;;;21538:13;21578:36:::1;21495:13:::0;21451:14;21578:36:::1;:::i;:::-;:55;;;;:::i;:::-;21562:13;:71:::0;;;21669:2:::1;-1:-1:-1::0;21652:19:0::1;21644:61;;;::::0;-1:-1:-1;;;21644:61:0;;20879:2:1;21644:61:0::1;::::0;::::1;20861:21:1::0;20918:2;20898:18;;;20891:30;20957:31;20937:18;;;20930:59;21006:18;;21644:61:0::1;20677:353:1::0;18691:461:0;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;18831:4:::1;18823;18802:13;4481:12:::0;;;4393:108;18802:13:::1;:17;::::0;18818:1:::1;18802:17;:::i;:::-;18801:26;;;;:::i;:::-;18800:35;;;;:::i;:::-;18790:6;:45;;18768:139;;;::::0;-1:-1:-1;;;18768:139:0;;21237:2:1;18768:139:0::1;::::0;::::1;21219:21:1::0;21276:2;21256:18;;;21249:30;21315:34;21295:18;;;21288:62;-1:-1:-1;;;21366:18:1;;;21359:42;21418:19;;18768:139:0::1;21035:408:1::0;18768:139:0::1;18980:4;18973:3;18952:13;4481:12:::0;;;4393:108;18952:13:::1;:17;::::0;18968:1:::1;18952:17;:::i;:::-;18951:25;;;;:::i;:::-;18950:34;;;;:::i;:::-;18940:6;:44;;18918:137;;;::::0;-1:-1:-1;;;18918:137:0;;21650:2:1;18918:137:0::1;::::0;::::1;21632:21:1::0;21689:2;21669:18;;;21662:30;21728:34;21708:18;;;21701:62;-1:-1:-1;;;21779:18:1;;;21772:41;21830:19;;18918:137:0::1;21448:407:1::0;18918:137:0::1;19078:17;:6:::0;19088::::1;19078:17;:::i;:::-;19066:9;:29:::0;;;19111:33:::1;::::0;1839:25:1;;;19111:33:0::1;::::0;1827:2:1;1812:18;19111:33:0::1;1693:177:1::0;19222:428:0;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;19362:6:::1;19341:13;4481:12:::0;;;4393:108;19341:13:::1;:17;::::0;19357:1:::1;19341:17;:::i;:::-;19340:28;;;;:::i;:::-;19327:9;:41;;19305:144;;;::::0;-1:-1:-1;;;19305:144:0;;22062:2:1;19305:144:0::1;::::0;::::1;22044:21:1::0;22101:2;22081:18;;;22074:30;22140:34;22120:18;;;22113:62;-1:-1:-1;;;22191:18:1;;;22184:51;22252:19;;19305:144:0::1;21860:417:1::0;19305:144:0::1;19517:4;19496:13;4481:12:::0;;;4393:108;19496:13:::1;:17;::::0;19512:1:::1;19496:17;:::i;:::-;19495:26;;;;:::i;:::-;19482:9;:39;;19460:141;;;::::0;-1:-1:-1;;;19460:141:0;;22484:2:1;19460:141:0::1;::::0;::::1;22466:21:1::0;22523:2;22503:18;;;22496:30;22562:34;22542:18;;;22535:62;-1:-1:-1;;;22613:18:1;;;22606:50;22673:19;;19460:141:0::1;22282:416:1::0;19460:141:0::1;19612:18;:30:::0;19222:428::o;18222:461::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;18360:4:::1;18352;18331:13;4481:12:::0;;;4393:108;18331:13:::1;:17;::::0;18347:1:::1;18331:17;:::i;:::-;18330:26;;;;:::i;:::-;18329:35;;;;:::i;:::-;18319:6;:45;;18297:137;;;::::0;-1:-1:-1;;;18297:137:0;;22905:2:1;18297:137:0::1;::::0;::::1;22887:21:1::0;22944:2;22924:18;;;22917:30;22983:34;22963:18;;;22956:62;-1:-1:-1;;;23034:18:1;;;23027:40;23084:19;;18297:137:0::1;22703:406:1::0;18297:137:0::1;18507:4;18500:3;18479:13;4481:12:::0;;;4393:108;18479:13:::1;:17;::::0;18495:1:::1;18479:17;:::i;:::-;18478:25;;;;:::i;:::-;18477:34;;;;:::i;:::-;18467:6;:44;;18445:135;;;::::0;-1:-1:-1;;;18445:135:0;;23316:2:1;18445:135:0::1;::::0;::::1;23298:21:1::0;23355:2;23335:18;;;23328:30;23394:34;23374:18;;;23367:62;-1:-1:-1;;;23445:18:1;;;23438:39;23494:19;;18445:135:0::1;23114:405:1::0;18445:135:0::1;18607:17;:6:::0;18617::::1;18607:17;:::i;:::-;18591:13;:33:::0;;;18640:35:::1;::::0;1839:25:1;;;18640:35:0::1;::::0;1827:2:1;1812:18;18640:35:0::1;1693:177:1::0;17652:98:0;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;17714:20:::1;:28:::0;;-1:-1:-1;;17714:28:0::1;::::0;;17652:98::o;34218:235::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;34299:20:::1;::::0;;;::::1;;;34291:67;;;::::0;-1:-1:-1;;;34291:67:0;;23726:2:1;34291:67:0::1;::::0;::::1;23708:21:1::0;23765:2;23745:18;;;23738:30;23804:34;23784:18;;;23777:62;-1:-1:-1;;;23855:18:1;;;23848:32;23897:19;;34291:67:0::1;23524:398:1::0;34291:67:0::1;34371:20;:28:::0;;-1:-1:-1;;34371:28:0::1;::::0;;34415:30:::1;::::0;::::1;::::0;34394:5:::1;::::0;34415:30:::1;34218:235::o:0;11130:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11130:28:0;;-1:-1:-1;11130:28:0;:::o;8761:281::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8864:22:0;::::1;8842:110;;;::::0;-1:-1:-1;;;8842:110:0;;24129:2:1;8842:110:0::1;::::0;::::1;24111:21:1::0;24168:2;24148:18;;;24141:30;24207:34;24187:18;;;24180:62;-1:-1:-1;;;24258:18:1;;;24251:36;24304:19;;8842:110:0::1;23927:402:1::0;8842:110:0::1;8989:6;::::0;8968:38:::1;::::0;-1:-1:-1;;;;;8968:38:0;;::::1;::::0;8989:6:::1;::::0;8968:38:::1;::::0;8989:6:::1;::::0;8968:38:::1;9017:6;:17:::0;;-1:-1:-1;;;;;;9017:17:0::1;-1:-1:-1::0;;;;;9017:17:0;;;::::1;::::0;;;::::1;::::0;;8761:281::o;31970:185::-;8516:6;;-1:-1:-1;;;;;8516:6:0;222:10;8516:22;8508:67;;;;-1:-1:-1;;;8508:67:0;;;;;;;:::i;:::-;32065:82:::1;::::0;32028:12:::1;::::0;32073:10:::1;::::0;32097:21:::1;::::0;32028:12;32065:82;32028:12;32065:82;32097:21;32073:10;32065:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7658:380:::0;-1:-1:-1;;;;;7794:19:0;;7786:68;;;;-1:-1:-1;;;7786:68:0;;24746:2:1;7786:68:0;;;24728:21:1;24785:2;24765:18;;;24758:30;24824:34;24804:18;;;24797:62;-1:-1:-1;;;24875:18:1;;;24868:34;24919:19;;7786:68:0;24544:400:1;7786:68:0;-1:-1:-1;;;;;7873:21:0;;7865:68;;;;-1:-1:-1;;;7865:68:0;;25151:2:1;7865:68:0;;;25133:21:1;25190:2;25170:18;;;25163:30;25229:34;25209:18;;;25202:62;-1:-1:-1;;;25280:18:1;;;25273:32;25322:19;;7865:68:0;24949:398:1;7865:68:0;-1:-1:-1;;;;;7946:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7998:32;;1839:25:1;;;7998:32:0;;1812:18:1;7998:32:0;;;;;;;7658:380;;;:::o;6677:651::-;-1:-1:-1;;;;;6817:20:0;;6809:70;;;;-1:-1:-1;;;6809:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6898:23:0;;6890:71;;;;-1:-1:-1;;;6890:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6998:17:0;;6974:21;6998:17;;;;;;;;;;;7048:23;;;;7026:111;;;;-1:-1:-1;;;7026:111:0;;26364:2:1;7026:111:0;;;26346:21:1;26403:2;26383:18;;;26376:30;26442:34;26422:18;;;26415:62;-1:-1:-1;;;26493:18:1;;;26486:36;26539:19;;7026:111:0;26162:402:1;7026:111:0;-1:-1:-1;;;;;7173:17:0;;;:9;:17;;;;;;;;;;;7193:22;;;7173:42;;7237:20;;;;;;;;:30;;7209:6;;7173:9;7237:30;;7209:6;;7237:30;:::i;:::-;;;;;;;;7302:9;-1:-1:-1;;;;;7285:35:0;7294:6;-1:-1:-1;;;;;7285:35:0;;7313:6;7285:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7285:35:0;;;;;;;;6798:530;6677:651;;;:::o;22457:6059::-;-1:-1:-1;;;;;22589:18:0;;22581:68;;;;-1:-1:-1;;;22581:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22668:16:0;;22660:64;;;;-1:-1:-1;;;22660:64:0;;;;;;;:::i;:::-;22752:1;22743:6;:10;22735:52;;;;-1:-1:-1;;;22735:52:0;;26771:2:1;22735:52:0;;;26753:21:1;26810:2;26790:18;;;26783:30;26849:31;26829:18;;;26822:59;26898:18;;22735:52:0;26569:353:1;22735:52:0;22805:13;;;;;;;22800:183;;-1:-1:-1;;;;;22861:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22890:23:0;;;;;;:19;:23;;;;;;;;22861:52;22835:136;;;;-1:-1:-1;;;22835:136:0;;27129:2:1;22835:136:0;;;27111:21:1;27168:2;27148:18;;;27141:30;-1:-1:-1;;;27187:18:1;;;27180:52;27249:18;;22835:136:0;26927:346:1;22835:136:0;28619:18;;28604:12;:33;22999:26;:43;;;;-1:-1:-1;23029:13:0;;;;;;;22999:43;22995:268;;;-1:-1:-1;;;;;23086:17:0;;;;;;:11;:17;;;;;;;;23085:18;;:35;;-1:-1:-1;8454:6:0;;-1:-1:-1;;;;;23107:13:0;;;8454:6;;23107:13;23085:35;:60;;;-1:-1:-1;;;;;;23124:21:0;;23138:6;23124:21;23085:60;23059:192;;;;-1:-1:-1;;;23059:192:0;;27480:2:1;23059:192:0;;;27462:21:1;27519:2;27499:18;;;27492:30;27558:34;27538:18;;;27531:62;27629:34;27609:18;;;27602:62;-1:-1:-1;;;27680:19:1;;;27673:37;27727:19;;23059:192:0;27278:474:1;23059:192:0;23279:14;;;;23275:2148;;;8454:6;;-1:-1:-1;;;;;23332:15:0;;;8454:6;;23332:15;;;;:49;;-1:-1:-1;8454:6:0;;-1:-1:-1;;;;;23368:13:0;;;8454:6;;23368:13;;23332:49;:91;;;;-1:-1:-1;;;;;;23402:21:0;;23416:6;23402:21;;23332:91;:138;;;;-1:-1:-1;;;;;;23445:25:0;;;;;;:19;:25;;;;;;;;23444:26;23332:138;:183;;;;-1:-1:-1;;;;;;23492:23:0;;;;;;:19;:23;;;;;;;;23491:24;23332:183;23310:2102;;;23554:20;;;;23550:692;;;23617:9;;-1:-1:-1;;;;;23603:24:0;;;23617:9;;23603:24;;;;:49;;-1:-1:-1;23645:6:0;;-1:-1:-1;;;;;23631:21:0;;;23645:6;;23631:21;;23603:49;23599:624;;;23794:16;23809:1;23794:12;:16;:::i;:::-;23748:9;23719:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;23915:16:0;23930:1;23915:12;:16;:::i;:::-;-1:-1:-1;;;;;23847:32:0;;;;;;:28;:32;;;;;;:84;23719:212;23681:363;;;;-1:-1:-1;;;23681:363:0;;28092:2:1;23681:363:0;;;28074:21:1;28131:2;28111:18;;;28104:30;28170:34;28150:18;;;28143:62;-1:-1:-1;;;28221:18:1;;;28214:51;28282:19;;23681:363:0;27890:417:1;23681:363:0;24100:9;24071:39;;;;:28;:39;;;;;;24113:12;24071:54;;;;-1:-1:-1;;;;;24152:32:0;;;;;;:47;23599:624;-1:-1:-1;;;;;24316:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;24373:35:0;;;;;;:31;:35;;;;;;;;24372:36;24316:92;24290:1107;;;24495:12;;24485:6;:22;;24451:148;;;;-1:-1:-1;;;24451:148:0;;28514:2:1;24451:148:0;;;28496:21:1;28553:2;28533:18;;;28526:30;28592:34;28572:18;;;28565:62;-1:-1:-1;;;28643:18:1;;;28636:38;28691:19;;24451:148:0;28312:404:1;24451:148:0;24682:9;;24665:13;24675:2;24665:9;:13::i;:::-;24656:22;;:6;:22;:::i;:::-;:35;;24622:140;;;;-1:-1:-1;;;24622:140:0;;28923:2:1;24622:140:0;;;28905:21:1;28962:2;28942:18;;;28935:30;-1:-1:-1;;;28981:18:1;;;28974:49;29040:18;;24622:140:0;28721:343:1;24622:140:0;24290:1107;;;-1:-1:-1;;;;;24860:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;24915:37:0;;;;;;:31;:37;;;;;;;;24914:38;24860:92;24834:563;;;25039:13;;25029:6;:23;;24995:151;;;;-1:-1:-1;;;24995:151:0;;29271:2:1;24995:151:0;;;29253:21:1;29310:2;29290:18;;;29283:30;29349:34;29329:18;;;29322:62;-1:-1:-1;;;29400:18:1;;;29393:40;29450:19;;24995:151:0;29069:406:1;24834:563:0;-1:-1:-1;;;;;25177:35:0;;;;;;:31;:35;;;;;;;;25172:225;;25297:9;;25280:13;25290:2;25280:9;:13::i;:::-;25271:22;;:6;:22;:::i;:::-;:35;;25237:140;;;;-1:-1:-1;;;25237:140:0;;28923:2:1;25237:140:0;;;28905:21:1;28962:2;28942:18;;;28935:30;-1:-1:-1;;;28981:18:1;;;28974:49;29040:18;;25237:140:0;28721:343:1;25237:140:0;25435:28;25466:24;25484:4;25466:9;:24::i;:::-;25542:18;;25435:55;;-1:-1:-1;25518:42:0;;;;;;;25591:22;;-1:-1:-1;25602:11:0;;;;;;;25591:22;:35;;;;-1:-1:-1;25618:8:0;;-1:-1:-1;;;25618:8:0;;;;25617:9;25591:35;:68;;;;-1:-1:-1;;;;;;25630:29:0;;;;;;:25;:29;;;;;;;;25591:68;25573:196;;;25686:8;:15;;-1:-1:-1;;;;25686:15:0;-1:-1:-1;;;25686:15:0;;;25716:10;:8;:10::i;:::-;25741:8;:16;;-1:-1:-1;;;;25741:16:0;;;25573:196;-1:-1:-1;;;;;25900:25:0;;25781:12;25900:25;;;:19;:25;;;;;;25796:4;;25900:25;;;:52;;-1:-1:-1;;;;;;25929:23:0;;;;;;:19;:23;;;;;;;;25900:52;25896:100;;;-1:-1:-1;25979:5:0;25896:100;26008:12;26113:7;26109:2354;;;28619:18;;28604:12;:33;26196:152;;;;26272:8;26257:12;;:23;;;;:::i;:::-;26247:6;:33;;:100;;;;;26335:12;26309:18;;26330:1;26309:22;;;;:::i;:::-;:38;;26247:100;26195:206;;;;-1:-1:-1;;;;;;26370:31:0;;;;;;:25;:31;;;;;;;;26195:206;:257;;;;-1:-1:-1;;;;;;26423:29:0;;;;;;:25;:29;;;;;;;;26422:30;26195:257;:302;;;;-1:-1:-1;;;;;;26474:23:0;;;;;;:19;:23;;;;;;;;26473:24;26195:302;:339;;;;;26533:1;26518:12;;:16;26195:339;26173:2141;;;28619:18;;28604:12;:33;26569:332;;26880:1;26864:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26569:332:0;-1:-1:-1;;;;;26926:15:0;;;;;;:11;:15;;;;;;;;26921:216;;-1:-1:-1;;;;;26966:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;26966:22:0;26984:4;26966:22;;;;;;27011:10;:15;;26984:4;;27011:10;;:15;;26984:4;;27011:15;:::i;:::-;;;;-1:-1:-1;;27049:11:0;:20;;;;;;;-1:-1:-1;27049:20:0;;;;;;;;-1:-1:-1;;;;;;27049:20:0;-1:-1:-1;;;;;27049:20:0;;;;;;;;27097;;731:51:1;;;27097:20:0;;719:2:1;704:18;27097:20:0;;;;;;;26921:216;27180:3;27165:11;:6;27174:2;27165:11;:::i;:::-;27164:19;;;;:::i;:::-;27157:26;;27251:12;;27232:15;;27225:4;:22;;;;:::i;:::-;27224:39;;;;:::i;:::-;27202:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27333:12:0;;27313:16;;27306:23;;:4;:23;:::i;:::-;27305:40;;;;:::i;:::-;27282:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27413:12:0;;27394:15;;27387:22;;:4;:22;:::i;:::-;27386:39;;;;:::i;:::-;27364:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;26173:2141:0;;-1:-1:-1;26173:2141:0;;-1:-1:-1;;;;;27488:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27537:1;27521:13;;:17;27488:50;27484:830;;;27593:3;27576:13;;27567:6;:22;;;;:::i;:::-;27566:30;;;;:::i;:::-;27559:37;;27665:13;;27645:16;;27638:4;:23;;;;:::i;:::-;27637:41;;;;:::i;:::-;27615:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27791:13:0;;27749:17;;27742:24;;:4;:24;:::i;:::-;27741:63;;;;:::i;:::-;27697:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;27873:13:0;;27853:16;;27846:23;;:4;:23;:::i;27484:830::-;-1:-1:-1;;;;;27948:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27998:1;27983:12;;:16;27948:51;27944:370;;;28053:3;28037:12;;28028:6;:21;;;;:::i;:::-;28027:29;;;;:::i;:::-;28020:36;;28124:12;;28105:15;;28098:4;:22;;;;:::i;:::-;28097:39;;;;:::i;:::-;28075:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28206:12:0;;28186:16;;28179:23;;:4;:23;:::i;:::-;28178:40;;;;:::i;:::-;28155:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28286:12:0;;28267:15;;28260:22;;:4;:22;:::i;:::-;28259:39;;;;:::i;:::-;28237:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27944:370:0;28334:8;;28330:91;;28363:42;28379:4;28393;28400;28363:15;:42::i;:::-;28437:14;28447:4;28437:14;;:::i;:::-;;;26109:2354;28475:33;28491:4;28497:2;28501:6;28475:15;:33::i;:::-;22570:5946;;;;22457:6059;;;:::o;29749:1576::-;29788:23;29814:24;29832:4;29814:9;:24::i;:::-;29788:50;;29849:25;29946:18;;29911:19;;29877:18;;:53;;;;:::i;:::-;:87;;;;:::i;:::-;29849:115;-1:-1:-1;29981:20:0;;;:46;;-1:-1:-1;30005:22:0;;29981:46;29977:85;;;30044:7;;29749:1576::o;29977:85::-;30096:18;;:23;;30117:2;30096:23;:::i;:::-;30078:15;:41;30074:115;;;30154:18;;:23;;30175:2;30154:23;:::i;:::-;30136:41;;30074:115;30201:12;30275:23;30388:1;30355:17;30320:18;;30302:15;:36;;;;:::i;:::-;30301:71;;;;:::i;:::-;:88;;;;:::i;:::-;30275:114;-1:-1:-1;30402:51:0;30419:33;30275:114;30419:15;:33;:::i;:::-;30402:16;:51::i;:::-;30667:18;;30487:21;;;;30466:18;;30667:22;;30688:1;;30667:22;:::i;:::-;30646:44;;:17;:44;:::i;:::-;30609:19;;30596:32;;:10;:32;:::i;:::-;30595:96;;;;:::i;:::-;30568:123;;30702:21;30818:1;30797:18;;:22;;;;:::i;:::-;30776:44;;:17;:44;:::i;:::-;30740:18;;30727:31;;:10;:31;:::i;:::-;30726:95;;;;:::i;:::-;30702:119;-1:-1:-1;30853:32:0;30702:119;30853:16;:32;:::i;:::-;30834:51;;;;:::i;:::-;30919:1;30898:18;:22;;;30931:19;:23;;;30965:18;:22;30834:51;-1:-1:-1;31004:19:0;;;;;:42;;;31045:1;31027:15;:19;31004:42;31000:121;;;31063:46;31076:15;31093;31063:12;:46::i;:::-;31155:16;;31147:56;;-1:-1:-1;;;;;31155:16:0;;;;31185:13;;31147:56;;;;31185:13;31155:16;31147:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31236:17:0;;31228:89;;31133:70;;-1:-1:-1;;;;;;31236:17:0;;31281:21;;31228:89;;;;31281:21;31236:17;31228:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29749:1576:0:o;20590:236::-;-1:-1:-1;;;;;20673:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20673:39:0;;;;;;;20723;20673:31;:39;20723:26;:39::i;28653:571::-;28803:16;;;28817:1;28803:16;;;;;;;;28779:21;;28803:16;;;;;;;;;;-1:-1:-1;28803:16:0;28779:40;;28848:4;28830;28835:1;28830:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28830:23:0;;;:7;;;;;;;;;;:23;;;;28874:9;;:16;;;-1:-1:-1;;;28874:16:0;;;;:9;;;;;:14;;:16;;;;;28830:7;;28874:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28864:4;28869:1;28864:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28864:26:0;;;:7;;;;;;;;;:26;28935:9;;28903:56;;28920:4;;28935:9;28947:11;28903:8;:56::i;:::-;28998:9;;:218;;-1:-1:-1;;;28998:218:0;;-1:-1:-1;;;;;28998:9:0;;;;:60;;:218;;29073:11;;28998:9;;29143:4;;29170;;29190:15;;28998:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28708:516;28653:571;:::o;29232:509::-;29412:9;;29380:56;;29397:4;;-1:-1:-1;;;;;29412:9:0;29424:11;29380:8;:56::i;:::-;29479:9;;:254;;-1:-1:-1;;;29479:254:0;;-1:-1:-1;;;;;29479:9:0;;;;:25;;29512:9;;29479:254;;29545:4;;29565:11;;29479:9;;;;29685:6;;29707:15;;29479:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29232:509;;:::o;19658:221::-;-1:-1:-1;;;;;19760:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19760:52:0;;;;;;;;;;19828:43;;30491:51:1;;;30558:18;;;30551:50;19828:43:0;;30464:18:1;19828:43:0;;;;;;;19658:221;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1875:127::-;1936:10;1931:3;1927:20;1924:1;1917:31;1967:4;1964:1;1957:15;1991:4;1988:1;1981:15;2007:275;2078:2;2072:9;2143:2;2124:13;;-1:-1:-1;;2120:27:1;2108:40;;2178:18;2163:34;;2199:22;;;2160:62;2157:88;;;2225:18;;:::i;:::-;2261:2;2254:22;2007:275;;-1:-1:-1;2007:275:1:o;2287:183::-;2347:4;2380:18;2372:6;2369:30;2366:56;;;2402:18;;:::i;:::-;-1:-1:-1;2447:1:1;2443:14;2459:4;2439:25;;2287:183::o;2475:662::-;2529:5;2582:3;2575:4;2567:6;2563:17;2559:27;2549:55;;2600:1;2597;2590:12;2549:55;2636:6;2623:20;2662:4;2686:60;2702:43;2742:2;2702:43;:::i;:::-;2686:60;:::i;:::-;2780:15;;;2866:1;2862:10;;;;2850:23;;2846:32;;;2811:12;;;;2890:15;;;2887:35;;;2918:1;2915;2908:12;2887:35;2954:2;2946:6;2942:15;2966:142;2982:6;2977:3;2974:15;2966:142;;;3048:17;;3036:30;;3086:12;;;;2999;;2966:142;;;-1:-1:-1;3126:5:1;2475:662;-1:-1:-1;;;;;;2475:662:1:o;3142:1215::-;3260:6;3268;3321:2;3309:9;3300:7;3296:23;3292:32;3289:52;;;3337:1;3334;3327:12;3289:52;3377:9;3364:23;3406:18;3447:2;3439:6;3436:14;3433:34;;;3463:1;3460;3453:12;3433:34;3501:6;3490:9;3486:22;3476:32;;3546:7;3539:4;3535:2;3531:13;3527:27;3517:55;;3568:1;3565;3558:12;3517:55;3604:2;3591:16;3626:4;3650:60;3666:43;3706:2;3666:43;:::i;3650:60::-;3744:15;;;3826:1;3822:10;;;;3814:19;;3810:28;;;3775:12;;;;3850:19;;;3847:39;;;3882:1;3879;3872:12;3847:39;3906:11;;;;3926:217;3942:6;3937:3;3934:15;3926:217;;;4022:3;4009:17;4039:31;4064:5;4039:31;:::i;:::-;4083:18;;3959:12;;;;4121;;;;3926:217;;;4162:5;-1:-1:-1;;4205:18:1;;4192:32;;-1:-1:-1;;4236:16:1;;;4233:36;;;4265:1;4262;4255:12;4233:36;;4288:63;4343:7;4332:8;4321:9;4317:24;4288:63;:::i;:::-;4278:73;;;3142:1215;;;;;:::o;4362:456::-;4439:6;4447;4455;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4563:9;4550:23;4582:31;4607:5;4582:31;:::i;:::-;4632:5;-1:-1:-1;4689:2:1;4674:18;;4661:32;4702:33;4661:32;4702:33;:::i;:::-;4362:456;;4754:7;;-1:-1:-1;;;4808:2:1;4793:18;;;;4780:32;;4362:456::o;4823:180::-;4882:6;4935:2;4923:9;4914:7;4910:23;4906:32;4903:52;;;4951:1;4948;4941:12;4903:52;-1:-1:-1;4974:23:1;;4823:180;-1:-1:-1;4823:180:1:o;5405:248::-;5473:6;5481;5534:2;5522:9;5513:7;5509:23;5505:32;5502:52;;;5550:1;5547;5540:12;5502:52;-1:-1:-1;;5573:23:1;;;5643:2;5628:18;;;5615:32;;-1:-1:-1;5405:248:1:o;5658:118::-;5744:5;5737:13;5730:21;5723:5;5720:32;5710:60;;5766:1;5763;5756:12;5781:382;5846:6;5854;5907:2;5895:9;5886:7;5882:23;5878:32;5875:52;;;5923:1;5920;5913:12;5875:52;5962:9;5949:23;5981:31;6006:5;5981:31;:::i;:::-;6031:5;-1:-1:-1;6088:2:1;6073:18;;6060:32;6101:30;6060:32;6101:30;:::i;:::-;6150:7;6140:17;;;5781:382;;;;;:::o;6168:316::-;6245:6;6253;6261;6314:2;6302:9;6293:7;6289:23;6285:32;6282:52;;;6330:1;6327;6320:12;6282:52;-1:-1:-1;;6353:23:1;;;6423:2;6408:18;;6395:32;;-1:-1:-1;6474:2:1;6459:18;;;6446:32;;6168:316;-1:-1:-1;6168:316:1:o;6489:388::-;6557:6;6565;6618:2;6606:9;6597:7;6593:23;6589:32;6586:52;;;6634:1;6631;6624:12;6586:52;6673:9;6660:23;6692:31;6717:5;6692:31;:::i;:::-;6742:5;-1:-1:-1;6799:2:1;6784:18;;6771:32;6812:33;6771:32;6812:33;:::i;6882:461::-;6935:3;6973:5;6967:12;7000:6;6995:3;6988:19;7026:4;7055:2;7050:3;7046:12;7039:19;;7092:2;7085:5;7081:14;7113:1;7123:195;7137:6;7134:1;7131:13;7123:195;;;7202:13;;-1:-1:-1;;;;;7198:39:1;7186:52;;7258:12;;;;7293:15;;;;7234:1;7152:9;7123:195;;;-1:-1:-1;7334:3:1;;6882:461;-1:-1:-1;;;;;6882:461:1:o;7348:261::-;7527:2;7516:9;7509:21;7490:4;7547:56;7599:2;7588:9;7584:18;7576:6;7547:56;:::i;7614:241::-;7670:6;7723:2;7711:9;7702:7;7698:23;7694:32;7691:52;;;7739:1;7736;7729:12;7691:52;7778:9;7765:23;7797:28;7819:5;7797:28;:::i;7860:380::-;7939:1;7935:12;;;;7982;;;8003:61;;8057:4;8049:6;8045:17;8035:27;;8003:61;8110:2;8102:6;8099:14;8079:18;8076:38;8073:161;;8156:10;8151:3;8147:20;8144:1;8137:31;8191:4;8188:1;8181:15;8219:4;8216:1;8209:15;8073:161;;7860:380;;;:::o;8245:356::-;8447:2;8429:21;;;8466:18;;;8459:30;8525:34;8520:2;8505:18;;8498:62;8592:2;8577:18;;8245:356::o;9798:127::-;9859:10;9854:3;9850:20;9847:1;9840:31;9890:4;9887:1;9880:15;9914:4;9911:1;9904:15;9930:127;9991:10;9986:3;9982:20;9979:1;9972:31;10022:4;10019:1;10012:15;10046:4;10043:1;10036:15;10062:135;10101:3;10122:17;;;10119:43;;10142:18;;:::i;:::-;-1:-1:-1;10189:1:1;10178:13;;10062:135::o;10611:168::-;10684:9;;;10715;;10732:15;;;10726:22;;10712:37;10702:71;;10753:18;;:::i;10784:217::-;10824:1;10850;10840:132;;10894:10;10889:3;10885:20;10882:1;10875:31;10929:4;10926:1;10919:15;10957:4;10954:1;10947:15;10840:132;-1:-1:-1;10986:9:1;;10784:217::o;11826:125::-;11891:9;;;11912:10;;;11909:36;;;11925:18;;:::i;15031:403::-;15233:2;15215:21;;;15272:2;15252:18;;;15245:30;15311:34;15306:2;15291:18;;15284:62;-1:-1:-1;;;15377:2:1;15362:18;;15355:37;15424:3;15409:19;;15031:403::o;16215:184::-;16285:6;16338:2;16326:9;16317:7;16313:23;16309:32;16306:52;;;16354:1;16351;16344:12;16306:52;-1:-1:-1;16377:16:1;;16215:184;-1:-1:-1;16215:184:1:o;16683:245::-;16750:6;16803:2;16791:9;16782:7;16778:23;16774:32;16771:52;;;16819:1;16816;16809:12;16771:52;16851:9;16845:16;16870:28;16892:5;16870:28;:::i;16933:407::-;17135:2;17117:21;;;17174:2;17154:18;;;17147:30;17213:34;17208:2;17193:18;;17186:62;-1:-1:-1;;;17279:2:1;17264:18;;17257:41;17330:3;17315:19;;16933:407::o;17345:399::-;17547:2;17529:21;;;17586:2;17566:18;;;17559:30;17625:34;17620:2;17605:18;;17598:62;-1:-1:-1;;;17691:2:1;17676:18;;17669:33;17734:3;17719:19;;17345:399::o;18156:607::-;-1:-1:-1;;;;;18515:15:1;;;18497:34;;18562:2;18547:18;;18540:34;;;;18605:2;18590:18;;18583:34;;;;18648:2;18633:18;;18626:34;;;;18697:15;;;18691:3;18676:19;;18669:44;18477:3;18729:19;;18722:35;;;;18446:3;18431:19;;18156:607::o;18768:306::-;18856:6;18864;18872;18925:2;18913:9;18904:7;18900:23;18896:32;18893:52;;;18941:1;18938;18931:12;18893:52;18970:9;18964:16;18954:26;;19020:2;19009:9;19005:18;18999:25;18989:35;;19064:2;19053:9;19049:18;19043:25;19033:35;;18768:306;;;;;:::o;25352:401::-;25554:2;25536:21;;;25593:2;25573:18;;;25566:30;25632:34;25627:2;25612:18;;25605:62;-1:-1:-1;;;25698:2:1;25683:18;;25676:35;25743:3;25728:19;;25352:401::o;25758:399::-;25960:2;25942:21;;;25999:2;25979:18;;;25972:30;26038:34;26033:2;26018:18;;26011:62;-1:-1:-1;;;26104:2:1;26089:18;;26082:33;26147:3;26132:19;;25758:399::o;27757:128::-;27824:9;;;27845:11;;;27842:37;;;27859:18;;:::i;29480:251::-;29550:6;29603:2;29591:9;29582:7;29578:23;29574:32;29571:52;;;29619:1;29616;29609:12;29571:52;29651:9;29645:16;29670:31;29695:5;29670:31;:::i;29736:582::-;30035:6;30024:9;30017:25;30078:6;30073:2;30062:9;30058:18;30051:34;30121:3;30116:2;30105:9;30101:18;30094:31;29998:4;30142:57;30194:3;30183:9;30179:19;30171:6;30142:57;:::i;:::-;-1:-1:-1;;;;;30235:32:1;;;;30230:2;30215:18;;30208:60;-1:-1:-1;30299:3:1;30284:19;30277:35;30134:65;29736:582;-1:-1:-1;;;29736:582:1:o

Swarm Source

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