ETH Price: $2,628.67 (+6.51%)

Token

ThisWillFuckingSend (SENDING)
 

Overview

Max Total Supply

69,000,000,000 SENDING

Holders

306

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 SENDING

Value
$0.00
0xe8a1eefa7a01cbfa0e08f17dd3975cffa0dbe108
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:
SENDING

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-19
*/

// SPDX-License-Identifier: MIT
/*

    https://t.me/ThisWillFuckinSend
    https://twitter.com/ThisWillFknSend
    https://sendingcoin.vip/
    https://medium.com/@ThisWillFuckinSend

 */
pragma solidity 0.8.19;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public operationsAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public flaggedAsBot;
    address[] public botBuyers;
    uint256 public botsCaught;

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

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

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

    uint256 private defaultOperationsFee;
    uint256 private defaultLiquidityFee;
    uint256 private defaultOperationsSellFee;
    uint256 private defaultLiquiditySellFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() payable ERC20("ThisWillFuckingSend", "SENDING") {
        address newOwner = msg.sender;  

        uint256 totalSupply = 69 * 1e9 * 1e18; // 69b

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

        buyOperationsFee = 25;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        defaultOperationsFee = 1;
        defaultLiquidityFee = 0;
        defaultOperationsSellFee = 1;
        defaultLiquiditySellFee = 0;

        sellOperationsFee = 25;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        operationsAddress = address(0xEa71E696C5F47BB1859433353d3893a04eF1F51a);

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

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

        _createInitialSupply(address(this), (totalSupply * 9) / 100);
        _createInitialSupply(newOwner, (totalSupply * 91) / 100);

        transferOwnership(newOwner);
    }

    receive() external payable {}

    function getBotBuyers() external view returns (address[] memory) {
        return botBuyers;
    }

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

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

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

    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
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    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(
                !flaggedAsBot[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 (!flaggedAsBot[to]) {
                    flaggedAsBot[to] = true;
                    botsCaught += 1;
                    botBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

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

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

            amount -= fees;
        }

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

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

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

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

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

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

    // withdraw ETH if stuck or someone sends to the address
    function 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 removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

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

    function resetTaxes() external onlyOwner {
        buyOperationsFee = defaultOperationsFee;
        buyLiquidityFee = defaultLiquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = defaultOperationsSellFee;
        sellLiquidityFee = defaultLiquiditySellFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
    }

    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 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
            address(this),
            block.timestamp
        );
    }

    function removeLP(uint256 percent) external onlyOwner {
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));

        require(lpBalance > 0, "No LP tokens in contract");

        uint256 lpAmount = (lpBalance * percent) / 10000;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

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

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

        _excludeFromMaxTransaction(address(dexRouter), true);
        excludeFromFees(address(dexRouter), true);                      

        // 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
            address(this),
            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":"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":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"botBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","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":"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"flaggedAsBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBotBuyers","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":"launchToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"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":"address","name":"wallet","type":"address"}],"name":"unflagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805462ffffff191660019081179091556014805460ff19169091179055601360809081527f5468697357696c6c4675636b696e6753656e640000000000000000000000000060a052610100604052600760c09081526653454e44494e4760c81b60e052600362000077838262000641565b50600462000086828262000641565b50505060006200009b620002a560201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620042de833981519152908290a350336bdef376571332906a880000006103e8620000f682600f62000723565b62000102919062000743565b6006556103e86200011582600f62000723565b62000121919062000743565b60075560646200013382600262000723565b6200013f919062000743565b6008556127106200015282600562000723565b6200015e919062000743565b600b5560196016819055600060178190556200017a9162000766565b6015556001601881905560006019818155601a92909255601b819055601d829055601e819055620001ab9162000766565b601c55600c80546001600160a01b03191673ea71e696c5f47bb1859433353d3893a04ef1f51a179055620001e1826001620002a9565b620001ee306001620002a9565b620001fd61dead6001620002a9565b600c5462000216906001600160a01b03166001620002a9565b620002238260016200030c565b620002303060016200030c565b6200023f61dead60016200030c565b600c5462000258906001600160a01b031660016200030c565b6200027e3060646200026c84600962000723565b62000278919062000743565b620003ba565b620002928260646200026c84605b62000723565b6200029d826200049f565b50506200077c565b3390565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b031633146200035b5760405162461bcd60e51b81526020600482018190526024820152600080516020620042be83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004125760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000352565b806002600082825462000426919062000766565b90915550506001600160a01b038216600090815260208190526040812080548392906200045590849062000766565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620004ea5760405162461bcd60e51b81526020600482018190526024820152600080516020620042be833981519152604482015260640162000352565b6001600160a01b038116620005515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000352565b6005546040516001600160a01b03808416921690600080516020620042de83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005c757607f821691505b602082108103620005e857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200063c57600081815260208120601f850160051c81016020861015620006175750805b601f850160051c820191505b81811015620006385782815560010162000623565b5050505b505050565b81516001600160401b038111156200065d576200065d6200059c565b62000675816200066e8454620005b2565b84620005ee565b602080601f831160018114620006ad5760008415620006945750858301515b600019600386901b1c1916600185901b17855562000638565b600085815260208120601f198616915b82811015620006de57888601518255948401946001909101908401620006bd565b5085821015620006fd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200073d576200073d6200070d565b92915050565b6000826200076157634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200073d576200073d6200070d565b613b32806200078c6000396000f3fe6080604052600436106103a65760003560e01c806382aa7c68116101e7578063d5fb5b171161010d578063efda1165116100a0578063f63743421161006f578063f637434214610a84578063f8b45b0514610a9a578063fb002c9714610ab0578063fed20c7814610ac657600080fd5b8063efda116514610a19578063f11a24d314610a39578063f2fde38b14610a4f578063f5648a4f14610a6f57600080fd5b8063e7b71ce2116100dc578063e7b71ce2146109b9578063e884f260146109ce578063ea4cfe12146109e3578063ee40166e14610a0357600080fd5b8063d5fb5b1714610927578063d85ba06314610947578063dd62ed3e1461095d578063e2f45605146109a357600080fd5b8063a457c2d711610185578063b987553911610154578063b9875539146108ae578063bbc0c742146108ce578063c0246668146108ed578063c876d0b91461090d57600080fd5b8063a457c2d714610828578063a62068ce14610848578063a9059cbb1461085e578063b62496f51461087e57600080fd5b80638da5cb5b116101c15780638da5cb5b146107c057806395d89b41146107de5780639a7a23d6146107f3578063a28e86d31461081357600080fd5b806382aa7c681461076a5780638366e79a1461078a57806388e765ff146107aa57600080fd5b80634a62bb65116102cc5780636a19197b1161026a57806370a082311161023957806370a08231146106f5578063751039fc146107155780637571336a1461072a5780637e926b4b1461074a57600080fd5b80636a19197b146106895780636a486a8e146106a95780636b0a894c146106bf5780636ddd1713146106d557600080fd5b80635a139dd4116102a65780635a139dd41461061b57806366ca9b831461063157806366d602ae146106515780636a11afc61461066757600080fd5b80634a62bb65146105d45780634f77f6c0146105ee57806358a6d5311461060457600080fd5b80631a8145bb11610344578063313ce56711610313578063313ce567146105585780633950935114610574578063452ed4f114610594578063499b8394146105b457600080fd5b80631a8145bb146104e25780632307b441146104f857806323b872dd14610518578063243c20f71461053857600080fd5b80630758d924116103805780630758d9241461043b578063095ea7b31461047357806310d5de531461049357806318160ddd146104c357600080fd5b8063017e0192146103b257806302dbd8f8146103f757806306fdde031461041957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103e26103cd36600461338f565b600f6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561040357600080fd5b506104176104123660046133b3565b610ae6565b005b34801561042557600080fd5b5061042e610b86565b6040516103ee91906133d5565b34801561044757600080fd5b5060095461045b906001600160a01b031681565b6040516001600160a01b0390911681526020016103ee565b34801561047f57600080fd5b506103e261048e366004613423565b610c18565b34801561049f57600080fd5b506103e26104ae36600461338f565b60226020526000908152604090205460ff1681565b3480156104cf57600080fd5b506002545b6040519081526020016103ee565b3480156104ee57600080fd5b506104d460205481565b34801561050457600080fd5b50610417610513366004613525565b610c2f565b34801561052457600080fd5b506103e26105333660046135e7565b610d87565b34801561054457600080fd5b5061041761055336600461338f565b610e31565b34801561056457600080fd5b50604051601281526020016103ee565b34801561058057600080fd5b506103e261058f366004613423565b610ee8565b3480156105a057600080fd5b50600a5461045b906001600160a01b031681565b3480156105c057600080fd5b506104176105cf36600461338f565b610f24565b3480156105e057600080fd5b506012546103e29060ff1681565b3480156105fa57600080fd5b506104d4601d5481565b34801561061057600080fd5b50600e5443106103e2565b34801561062757600080fd5b506104d460165481565b34801561063d57600080fd5b5061041761064c3660046133b3565b610ffd565b34801561065d57600080fd5b506104d460075481565b34801561067357600080fd5b5061067c611090565b6040516103ee919061366c565b34801561069557600080fd5b506104176106a436600461367f565b6110f1565b3480156106b557600080fd5b506104d4601c5481565b3480156106cb57600080fd5b506104d460115481565b3480156106e157600080fd5b506012546103e29062010000900460ff1681565b34801561070157600080fd5b506104d461071036600461338f565b61150a565b34801561072157600080fd5b50610417611525565b34801561073657600080fd5b506104176107453660046136a6565b61155b565b34801561075657600080fd5b506104176107653660046136df565b611623565b34801561077657600080fd5b5061041761078536600461367f565b6116e5565b34801561079657600080fd5b506103e26107a53660046136fc565b6117d9565b3480156107b657600080fd5b506104d460065481565b3480156107cc57600080fd5b506005546001600160a01b031661045b565b3480156107ea57600080fd5b5061042e611a13565b3480156107ff57600080fd5b5061041761080e3660046136a6565b611a22565b34801561081f57600080fd5b50610417611b16565b34801561083457600080fd5b506103e2610843366004613423565b611b4f565b34801561085457600080fd5b506104d4600e5481565b34801561086a57600080fd5b506103e2610879366004613423565b611be8565b34801561088a57600080fd5b506103e261089936600461338f565b60236020526000908152604090205460ff1681565b3480156108ba57600080fd5b506104176108c93660046136df565b611bf5565b3480156108da57600080fd5b506012546103e290610100900460ff1681565b3480156108f957600080fd5b506104176109083660046136a6565b611d82565b34801561091957600080fd5b506014546103e29060ff1681565b34801561093357600080fd5b5061045b61094236600461367f565b611e0b565b34801561095357600080fd5b506104d460155481565b34801561096957600080fd5b506104d46109783660046136fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109af57600080fd5b506104d4600b5481565b3480156109c557600080fd5b50610417611e35565b3480156109da57600080fd5b50610417611e99565b3480156109ef57600080fd5b50600c5461045b906001600160a01b031681565b348015610a0f57600080fd5b506104d4600d5481565b348015610a2557600080fd5b50610417610a3436600461367f565b611ecf565b348015610a4557600080fd5b506104d460175481565b348015610a5b57600080fd5b50610417610a6a36600461338f565b6120c9565b348015610a7b57600080fd5b506104176121b4565b348015610a9057600080fd5b506104d4601e5481565b348015610aa657600080fd5b506104d460085481565b348015610abc57600080fd5b506104d4601f5481565b348015610ad257600080fd5b50610417610ae136600461338f565b612220565b6005546001600160a01b03163314610b195760405162461bcd60e51b8152600401610b109061372a565b60405180910390fd5b601d829055601e819055610b2d8183613775565b601c819055600f1015610b825760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b10565b5050565b606060038054610b9590613788565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190613788565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c253384846122d3565b5060015b92915050565b6005546001600160a01b03163314610c595760405162461bcd60e51b8152600401610b109061372a565b8051825114610caa5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b10565b60c8825110610d1a5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b10565b60005b8251811015610d82576000838281518110610d3a57610d3a6137c2565b602002602001015190506000838381518110610d5857610d586137c2565b60200260200101519050610d6d3383836123f7565b50508080610d7a906137d8565b915050610d1d565b505050565b6000610d9484848461254c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b10565b610e2685338584036122d3565b506001949350505050565b6005546001600160a01b03163314610e5b5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b0381166000908152600f602052604090205460ff1615610ec45760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b10565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c25918590610f1f908690613775565b6122d3565b6005546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b10565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146110275760405162461bcd60e51b8152600401610b109061372a565b6016829055601781905561103b8183613775565b6015819055600f1015610b825760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b10565b60606010805480602002602001604051908101604052809291908181526020018280548015610c0e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110ca575050505050905090565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610b109061372a565b601254610100900460ff16156111435760405162461bcd60e51b8152600401610b10906137f1565b600a81106111635760405162461bcd60e51b8152600401610b109061383c565b6012805462ffff0019166201010017905543600d819055611185908290613775565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000466001036111d65750737a250d5630b4cf539739df2c5dacb4c659f2488d611238565b466005036111f95750737a250d5630b4cf539739df2c5dacb4c659f2488d611238565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610b10565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b59190613883565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133b9190613883565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac9190613883565b600a80546001600160a01b0319166001600160a01b039290921691821790556113d6906001612fd3565b600a546113ed906001600160a01b03166001613036565b600954611404906001600160a01b03166001612fd3565b60095461141b906001600160a01b03166001611d82565b6000471161143b5760405162461bcd60e51b8152600401610b10906138a0565b60006114463061150a565b116114635760405162461bcd60e51b8152600401610b10906138e3565b60095461147e9030906001600160a01b0316610f1f8261150a565b6009546001600160a01b031663f305d719473061149a8161150a565b60008030426040518863ffffffff1660e01b81526004016114c096959493929190613929565b60606040518083038185885af11580156114de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115039190613964565b5050505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461154f5760405162461bcd60e51b8152600401610b109061372a565b6012805460ff19169055565b6005546001600160a01b031633146115855760405162461bcd60e51b8152600401610b109061372a565b806115f857600a546001600160a01b03908116908316036115f85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b10565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461164d5760405162461bcd60e51b8152600401610b109061372a565b8061169a5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b10565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610b109061372a565b601254610100900460ff16156117675760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b10565b600a8111156117885760405162461bcd60e51b8152600401610b109061383c565b6012805462ffff0019166201010017905543600d8190556117aa908290613775565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118065760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b03831661185c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b10565b6001600160a01b0383163014158061187c5750601254610100900460ff16155b6118e55760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b10565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613992565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c791906139ab565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b9590613788565b6005546001600160a01b03163314611a4c5760405162461bcd60e51b8152600401610b109061372a565b600a546001600160a01b0390811690831603611ad05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b10565b611ada8282613036565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611b405760405162461bcd60e51b8152600401610b109061372a565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bd15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b10565b611bde33858584036122d3565b5060019392505050565b6000610c2533848461254c565b6005546001600160a01b03163314611c1f5760405162461bcd60e51b8152600401610b109061372a565b80611c6c5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610b10565b601254610100900460ff1615611c945760405162461bcd60e51b8152600401610b10906137f1565b60004711611cb45760405162461bcd60e51b8152600401610b10906138a0565b6000611cbf3061150a565b11611cdc5760405162461bcd60e51b8152600401610b10906138e3565b600954611cf79030906001600160a01b0316610f1f8261150a565b6009546001600160a01b031663f305d7194730611d138161150a565b60008030426040518863ffffffff1660e01b8152600401611d3996959493929190613929565b60606040518083038185885af1158015611d57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d7c9190613964565b50505050565b6005546001600160a01b03163314611dac5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60108181548110611e1b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611e5f5760405162461bcd60e51b8152600401610b109061372a565b60185460168190556019546017819055611e7891613775565b601555601a54601d819055601b54601e819055611e9491613775565b601c55565b6005546001600160a01b03163314611ec35760405162461bcd60e51b8152600401610b109061372a565b6014805460ff19169055565b6005546001600160a01b03163314611ef95760405162461bcd60e51b8152600401610b109061372a565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190613992565b905060008111611fb85760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610b10565b6000612710611fc784846139c8565b611fd191906139df565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c91906139ab565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906120879030908590600190819033904290600401613929565b60408051808303816000875af11580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190613a01565b6005546001600160a01b031633146120f35760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b0381166121585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b10565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121de5760405162461bcd60e51b8152600401610b109061372a565b604051600090339047908381818185875af1925050503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d7c565b6005546001600160a01b0316331461224a5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b0381166000908152600f602052604090205460ff166122b25760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610b10565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6001600160a01b0383166123355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b10565b6001600160a01b0382166123965760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b10565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661241d5760405162461bcd60e51b8152600401610b1090613a25565b6001600160a01b0382166124435760405162461bcd60e51b8152600401610b1090613a6a565b6001600160a01b038316600090815260208190526040902054818110156124bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b10565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124f2908490613775565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253e91815260200190565b60405180910390a350505050565b6001600160a01b0383166125725760405162461bcd60e51b8152600401610b1090613a25565b6001600160a01b0382166125985760405162461bcd60e51b8152600401610b1090613a6a565b600081116125e85760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b10565b601254610100900460ff1661267b576001600160a01b03831660009081526021602052604090205460ff168061263657506001600160a01b03821660009081526021602052604090205460ff165b61267b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b10565b600e5443101580156126945750601254610100900460ff165b15612764576001600160a01b0383166000908152600f602052604090205460ff1615806126ce57506005546001600160a01b038381169116145b806126e357506001600160a01b03821661dead145b6127645760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b10565b60125460ff1615612b42576005546001600160a01b0384811691161480159061279b57506005546001600160a01b03838116911614155b80156127b257506001600160a01b03821661dead14155b80156127d757506001600160a01b03831660009081526021602052604090205460ff16155b80156127fc57506001600160a01b03821660009081526021602052604090205460ff16155b15612b425760145460ff1615612915576009546001600160a01b038381169116148015906128385750600a546001600160a01b03838116911614155b1561291557612848600243613aad565b32600090815260136020526040902054108015612886575061286b600243613aad565b6001600160a01b038316600090815260136020526040902054105b6128f05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b10565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561295657506001600160a01b03821660009081526022602052604090205460ff16155b15612a1d576006548111156129be5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b10565b6008546129ca8361150a565b6129d49083613775565b1115612a185760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b10565b612b42565b6001600160a01b03821660009081526023602052604090205460ff168015612a5e57506001600160a01b03831660009081526022602052604090205460ff16155b15612ac857600754811115612a185760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b10565b6001600160a01b03821660009081526022602052604090205460ff16612b4257600854612af48361150a565b612afe9083613775565b1115612b425760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b10565b6000612b4d3061150a565b600b5490915081108015908190612b6c575060125462010000900460ff165b8015612b825750600a54600160a01b900460ff16155b8015612ba657506001600160a01b03841660009081526023602052604090205460ff165b15612bd457600a805460ff60a01b1916600160a01b179055612bc6613064565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff1680612c1657506001600160a01b03851660009081526021602052604090205460ff165b15612c1f575060005b60008115612fbf57600e54431080612c655750670c7d713b49da0000600654612c489190613aad565b8510158015612c65575043600e546008612c629190613775565b10155b8015612c8957506001600160a01b03871660009081526023602052604090205460ff165b8015612cae57506001600160a01b03861660009081526023602052604090205460ff16155b8015612cd357506001600160a01b03861660009081526021602052604090205460ff16155b8015612ce157506000601554115b15612e6857600e544310612d0857600160066000828254612d029190613aad565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff16612de8576001600160a01b0386166000908152600f60205260408120805460ff191660019081179091556011805491929091612d61908490613775565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612df58660636139c8565b612dff91906139df565b905060155460175482612e1291906139c8565b612e1c91906139df565b60206000828254612e2d9190613775565b9091555050601554601654612e4290836139c8565b612e4c91906139df565b601f6000828254612e5d9190613775565b90915550612fa19050565b6001600160a01b03861660009081526023602052604090205460ff168015612e9257506000601c54115b15612ef4576064601c5486612ea791906139c8565b612eb191906139df565b9050601c54601e5482612ec491906139c8565b612ece91906139df565b60206000828254612edf9190613775565b9091555050601c54601d54612e4290836139c8565b6001600160a01b03871660009081526023602052604090205460ff168015612f1e57506000601554115b15612fa157606460155486612f3391906139c8565b612f3d91906139df565b905060155460175482612f5091906139c8565b612f5a91906139df565b60206000828254612f6b9190613775565b9091555050601554601654612f8090836139c8565b612f8a91906139df565b601f6000828254612f9b9190613775565b90915550505b8015612fb257612fb28730836123f7565b612fbc8186613aad565b94505b612fca8787876123f7565b50505050505050565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602360205260409020805460ff1916821515179055611ada8282612fd3565b600061306f3061150a565b90506000601f546020546130839190613775565b9050811580613090575080155b15613099575050565b600b546130a790600f6139c8565b8211156130bf57600b546130bc90600f6139c8565b91505b600080600283602054866130d391906139c8565b6130dd91906139df565b6130e791906139df565b90506130fb6130f68286613aad565b6131c6565b60205447908190600090613111906002906139df565b61311b9087613aad565b601f5461312890856139c8565b61313291906139df565b905061313e8183613aad565b60006020819055601f55915083158015906131595750600082115b15613168576131688483613320565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146131b5576040519150601f19603f3d011682016040523d82523d6000602084013e6131ba565b606091505b50505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131fb576131fb6137c2565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132789190613883565b8160018151811061328b5761328b6137c2565b6001600160a01b0392831660209182029290920101526009546132b191309116846122d3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906132ea908590600090869030904290600401613ac0565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b505050505050565b6009546133389030906001600160a01b0316846122d3565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906114c09030908790600090819061dead904290600401613929565b6001600160a01b038116811461338c57600080fd5b50565b6000602082840312156133a157600080fd5b81356133ac81613377565b9392505050565b600080604083850312156133c657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613402578581018301518582016040015282016133e6565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561343657600080fd5b823561344181613377565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561348e5761348e61344f565b604052919050565b600067ffffffffffffffff8211156134b0576134b061344f565b5060051b60200190565b600082601f8301126134cb57600080fd5b813560206134e06134db83613496565b613465565b82815260059290921b840181019181810190868411156134ff57600080fd5b8286015b8481101561351a5780358352918301918301613503565b509695505050505050565b6000806040838503121561353857600080fd5b823567ffffffffffffffff8082111561355057600080fd5b818501915085601f83011261356457600080fd5b813560206135746134db83613496565b82815260059290921b8401810191818101908984111561359357600080fd5b948201945b838610156135ba5785356135ab81613377565b82529482019490820190613598565b965050860135925050808211156135d057600080fd5b506135dd858286016134ba565b9150509250929050565b6000806000606084860312156135fc57600080fd5b833561360781613377565b9250602084013561361781613377565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156136615781516001600160a01b03168752958201959082019060010161363c565b509495945050505050565b6020815260006133ac6020830184613628565b60006020828403121561369157600080fd5b5035919050565b801515811461338c57600080fd5b600080604083850312156136b957600080fd5b82356136c481613377565b915060208301356136d481613698565b809150509250929050565b6000602082840312156136f157600080fd5b81356133ac81613698565b6000806040838503121561370f57600080fd5b823561371a81613377565b915060208301356136d481613377565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c2957610c2961375f565b600181811c9082168061379c57607f821691505b6020821081036137bc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016137ea576137ea61375f565b5060010190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561389557600080fd5b81516133ac81613377565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561397957600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156139a457600080fd5b5051919050565b6000602082840312156139bd57600080fd5b81516133ac81613698565b8082028115828204841417610c2957610c2961375f565b6000826139fc57634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613a1457600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2957610c2961375f565b85815284602082015260a060408201526000613adf60a0830186613628565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212207d5345472e82340d191bfed83b0730ec76f53fa2f55c2a376f2650a6b88791f564736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806382aa7c68116101e7578063d5fb5b171161010d578063efda1165116100a0578063f63743421161006f578063f637434214610a84578063f8b45b0514610a9a578063fb002c9714610ab0578063fed20c7814610ac657600080fd5b8063efda116514610a19578063f11a24d314610a39578063f2fde38b14610a4f578063f5648a4f14610a6f57600080fd5b8063e7b71ce2116100dc578063e7b71ce2146109b9578063e884f260146109ce578063ea4cfe12146109e3578063ee40166e14610a0357600080fd5b8063d5fb5b1714610927578063d85ba06314610947578063dd62ed3e1461095d578063e2f45605146109a357600080fd5b8063a457c2d711610185578063b987553911610154578063b9875539146108ae578063bbc0c742146108ce578063c0246668146108ed578063c876d0b91461090d57600080fd5b8063a457c2d714610828578063a62068ce14610848578063a9059cbb1461085e578063b62496f51461087e57600080fd5b80638da5cb5b116101c15780638da5cb5b146107c057806395d89b41146107de5780639a7a23d6146107f3578063a28e86d31461081357600080fd5b806382aa7c681461076a5780638366e79a1461078a57806388e765ff146107aa57600080fd5b80634a62bb65116102cc5780636a19197b1161026a57806370a082311161023957806370a08231146106f5578063751039fc146107155780637571336a1461072a5780637e926b4b1461074a57600080fd5b80636a19197b146106895780636a486a8e146106a95780636b0a894c146106bf5780636ddd1713146106d557600080fd5b80635a139dd4116102a65780635a139dd41461061b57806366ca9b831461063157806366d602ae146106515780636a11afc61461066757600080fd5b80634a62bb65146105d45780634f77f6c0146105ee57806358a6d5311461060457600080fd5b80631a8145bb11610344578063313ce56711610313578063313ce567146105585780633950935114610574578063452ed4f114610594578063499b8394146105b457600080fd5b80631a8145bb146104e25780632307b441146104f857806323b872dd14610518578063243c20f71461053857600080fd5b80630758d924116103805780630758d9241461043b578063095ea7b31461047357806310d5de531461049357806318160ddd146104c357600080fd5b8063017e0192146103b257806302dbd8f8146103f757806306fdde031461041957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103e26103cd36600461338f565b600f6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561040357600080fd5b506104176104123660046133b3565b610ae6565b005b34801561042557600080fd5b5061042e610b86565b6040516103ee91906133d5565b34801561044757600080fd5b5060095461045b906001600160a01b031681565b6040516001600160a01b0390911681526020016103ee565b34801561047f57600080fd5b506103e261048e366004613423565b610c18565b34801561049f57600080fd5b506103e26104ae36600461338f565b60226020526000908152604090205460ff1681565b3480156104cf57600080fd5b506002545b6040519081526020016103ee565b3480156104ee57600080fd5b506104d460205481565b34801561050457600080fd5b50610417610513366004613525565b610c2f565b34801561052457600080fd5b506103e26105333660046135e7565b610d87565b34801561054457600080fd5b5061041761055336600461338f565b610e31565b34801561056457600080fd5b50604051601281526020016103ee565b34801561058057600080fd5b506103e261058f366004613423565b610ee8565b3480156105a057600080fd5b50600a5461045b906001600160a01b031681565b3480156105c057600080fd5b506104176105cf36600461338f565b610f24565b3480156105e057600080fd5b506012546103e29060ff1681565b3480156105fa57600080fd5b506104d4601d5481565b34801561061057600080fd5b50600e5443106103e2565b34801561062757600080fd5b506104d460165481565b34801561063d57600080fd5b5061041761064c3660046133b3565b610ffd565b34801561065d57600080fd5b506104d460075481565b34801561067357600080fd5b5061067c611090565b6040516103ee919061366c565b34801561069557600080fd5b506104176106a436600461367f565b6110f1565b3480156106b557600080fd5b506104d4601c5481565b3480156106cb57600080fd5b506104d460115481565b3480156106e157600080fd5b506012546103e29062010000900460ff1681565b34801561070157600080fd5b506104d461071036600461338f565b61150a565b34801561072157600080fd5b50610417611525565b34801561073657600080fd5b506104176107453660046136a6565b61155b565b34801561075657600080fd5b506104176107653660046136df565b611623565b34801561077657600080fd5b5061041761078536600461367f565b6116e5565b34801561079657600080fd5b506103e26107a53660046136fc565b6117d9565b3480156107b657600080fd5b506104d460065481565b3480156107cc57600080fd5b506005546001600160a01b031661045b565b3480156107ea57600080fd5b5061042e611a13565b3480156107ff57600080fd5b5061041761080e3660046136a6565b611a22565b34801561081f57600080fd5b50610417611b16565b34801561083457600080fd5b506103e2610843366004613423565b611b4f565b34801561085457600080fd5b506104d4600e5481565b34801561086a57600080fd5b506103e2610879366004613423565b611be8565b34801561088a57600080fd5b506103e261089936600461338f565b60236020526000908152604090205460ff1681565b3480156108ba57600080fd5b506104176108c93660046136df565b611bf5565b3480156108da57600080fd5b506012546103e290610100900460ff1681565b3480156108f957600080fd5b506104176109083660046136a6565b611d82565b34801561091957600080fd5b506014546103e29060ff1681565b34801561093357600080fd5b5061045b61094236600461367f565b611e0b565b34801561095357600080fd5b506104d460155481565b34801561096957600080fd5b506104d46109783660046136fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109af57600080fd5b506104d4600b5481565b3480156109c557600080fd5b50610417611e35565b3480156109da57600080fd5b50610417611e99565b3480156109ef57600080fd5b50600c5461045b906001600160a01b031681565b348015610a0f57600080fd5b506104d4600d5481565b348015610a2557600080fd5b50610417610a3436600461367f565b611ecf565b348015610a4557600080fd5b506104d460175481565b348015610a5b57600080fd5b50610417610a6a36600461338f565b6120c9565b348015610a7b57600080fd5b506104176121b4565b348015610a9057600080fd5b506104d4601e5481565b348015610aa657600080fd5b506104d460085481565b348015610abc57600080fd5b506104d4601f5481565b348015610ad257600080fd5b50610417610ae136600461338f565b612220565b6005546001600160a01b03163314610b195760405162461bcd60e51b8152600401610b109061372a565b60405180910390fd5b601d829055601e819055610b2d8183613775565b601c819055600f1015610b825760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b10565b5050565b606060038054610b9590613788565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190613788565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c253384846122d3565b5060015b92915050565b6005546001600160a01b03163314610c595760405162461bcd60e51b8152600401610b109061372a565b8051825114610caa5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b10565b60c8825110610d1a5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b10565b60005b8251811015610d82576000838281518110610d3a57610d3a6137c2565b602002602001015190506000838381518110610d5857610d586137c2565b60200260200101519050610d6d3383836123f7565b50508080610d7a906137d8565b915050610d1d565b505050565b6000610d9484848461254c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b10565b610e2685338584036122d3565b506001949350505050565b6005546001600160a01b03163314610e5b5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b0381166000908152600f602052604090205460ff1615610ec45760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b10565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c25918590610f1f908690613775565b6122d3565b6005546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b10565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146110275760405162461bcd60e51b8152600401610b109061372a565b6016829055601781905561103b8183613775565b6015819055600f1015610b825760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b10565b60606010805480602002602001604051908101604052809291908181526020018280548015610c0e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110ca575050505050905090565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610b109061372a565b601254610100900460ff16156111435760405162461bcd60e51b8152600401610b10906137f1565b600a81106111635760405162461bcd60e51b8152600401610b109061383c565b6012805462ffff0019166201010017905543600d819055611185908290613775565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000466001036111d65750737a250d5630b4cf539739df2c5dacb4c659f2488d611238565b466005036111f95750737a250d5630b4cf539739df2c5dacb4c659f2488d611238565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610b10565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b59190613883565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133b9190613883565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac9190613883565b600a80546001600160a01b0319166001600160a01b039290921691821790556113d6906001612fd3565b600a546113ed906001600160a01b03166001613036565b600954611404906001600160a01b03166001612fd3565b60095461141b906001600160a01b03166001611d82565b6000471161143b5760405162461bcd60e51b8152600401610b10906138a0565b60006114463061150a565b116114635760405162461bcd60e51b8152600401610b10906138e3565b60095461147e9030906001600160a01b0316610f1f8261150a565b6009546001600160a01b031663f305d719473061149a8161150a565b60008030426040518863ffffffff1660e01b81526004016114c096959493929190613929565b60606040518083038185885af11580156114de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115039190613964565b5050505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461154f5760405162461bcd60e51b8152600401610b109061372a565b6012805460ff19169055565b6005546001600160a01b031633146115855760405162461bcd60e51b8152600401610b109061372a565b806115f857600a546001600160a01b03908116908316036115f85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b10565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461164d5760405162461bcd60e51b8152600401610b109061372a565b8061169a5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b10565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461170f5760405162461bcd60e51b8152600401610b109061372a565b601254610100900460ff16156117675760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b10565b600a8111156117885760405162461bcd60e51b8152600401610b109061383c565b6012805462ffff0019166201010017905543600d8190556117aa908290613775565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118065760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b03831661185c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b10565b6001600160a01b0383163014158061187c5750601254610100900460ff16155b6118e55760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b10565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613992565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c791906139ab565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b9590613788565b6005546001600160a01b03163314611a4c5760405162461bcd60e51b8152600401610b109061372a565b600a546001600160a01b0390811690831603611ad05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b10565b611ada8282613036565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611b405760405162461bcd60e51b8152600401610b109061372a565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bd15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b10565b611bde33858584036122d3565b5060019392505050565b6000610c2533848461254c565b6005546001600160a01b03163314611c1f5760405162461bcd60e51b8152600401610b109061372a565b80611c6c5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610b10565b601254610100900460ff1615611c945760405162461bcd60e51b8152600401610b10906137f1565b60004711611cb45760405162461bcd60e51b8152600401610b10906138a0565b6000611cbf3061150a565b11611cdc5760405162461bcd60e51b8152600401610b10906138e3565b600954611cf79030906001600160a01b0316610f1f8261150a565b6009546001600160a01b031663f305d7194730611d138161150a565b60008030426040518863ffffffff1660e01b8152600401611d3996959493929190613929565b60606040518083038185885af1158015611d57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d7c9190613964565b50505050565b6005546001600160a01b03163314611dac5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60108181548110611e1b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611e5f5760405162461bcd60e51b8152600401610b109061372a565b60185460168190556019546017819055611e7891613775565b601555601a54601d819055601b54601e819055611e9491613775565b601c55565b6005546001600160a01b03163314611ec35760405162461bcd60e51b8152600401610b109061372a565b6014805460ff19169055565b6005546001600160a01b03163314611ef95760405162461bcd60e51b8152600401610b109061372a565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190613992565b905060008111611fb85760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610b10565b6000612710611fc784846139c8565b611fd191906139df565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c91906139ab565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906120879030908590600190819033904290600401613929565b60408051808303816000875af11580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190613a01565b6005546001600160a01b031633146120f35760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b0381166121585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b10565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121de5760405162461bcd60e51b8152600401610b109061372a565b604051600090339047908381818185875af1925050503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d7c565b6005546001600160a01b0316331461224a5760405162461bcd60e51b8152600401610b109061372a565b6001600160a01b0381166000908152600f602052604090205460ff166122b25760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610b10565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6001600160a01b0383166123355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b10565b6001600160a01b0382166123965760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b10565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661241d5760405162461bcd60e51b8152600401610b1090613a25565b6001600160a01b0382166124435760405162461bcd60e51b8152600401610b1090613a6a565b6001600160a01b038316600090815260208190526040902054818110156124bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b10565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124f2908490613775565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253e91815260200190565b60405180910390a350505050565b6001600160a01b0383166125725760405162461bcd60e51b8152600401610b1090613a25565b6001600160a01b0382166125985760405162461bcd60e51b8152600401610b1090613a6a565b600081116125e85760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b10565b601254610100900460ff1661267b576001600160a01b03831660009081526021602052604090205460ff168061263657506001600160a01b03821660009081526021602052604090205460ff165b61267b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b10565b600e5443101580156126945750601254610100900460ff165b15612764576001600160a01b0383166000908152600f602052604090205460ff1615806126ce57506005546001600160a01b038381169116145b806126e357506001600160a01b03821661dead145b6127645760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b10565b60125460ff1615612b42576005546001600160a01b0384811691161480159061279b57506005546001600160a01b03838116911614155b80156127b257506001600160a01b03821661dead14155b80156127d757506001600160a01b03831660009081526021602052604090205460ff16155b80156127fc57506001600160a01b03821660009081526021602052604090205460ff16155b15612b425760145460ff1615612915576009546001600160a01b038381169116148015906128385750600a546001600160a01b03838116911614155b1561291557612848600243613aad565b32600090815260136020526040902054108015612886575061286b600243613aad565b6001600160a01b038316600090815260136020526040902054105b6128f05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b10565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561295657506001600160a01b03821660009081526022602052604090205460ff16155b15612a1d576006548111156129be5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b10565b6008546129ca8361150a565b6129d49083613775565b1115612a185760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b10565b612b42565b6001600160a01b03821660009081526023602052604090205460ff168015612a5e57506001600160a01b03831660009081526022602052604090205460ff16155b15612ac857600754811115612a185760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b10565b6001600160a01b03821660009081526022602052604090205460ff16612b4257600854612af48361150a565b612afe9083613775565b1115612b425760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b10565b6000612b4d3061150a565b600b5490915081108015908190612b6c575060125462010000900460ff165b8015612b825750600a54600160a01b900460ff16155b8015612ba657506001600160a01b03841660009081526023602052604090205460ff165b15612bd457600a805460ff60a01b1916600160a01b179055612bc6613064565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff1680612c1657506001600160a01b03851660009081526021602052604090205460ff165b15612c1f575060005b60008115612fbf57600e54431080612c655750670c7d713b49da0000600654612c489190613aad565b8510158015612c65575043600e546008612c629190613775565b10155b8015612c8957506001600160a01b03871660009081526023602052604090205460ff165b8015612cae57506001600160a01b03861660009081526023602052604090205460ff16155b8015612cd357506001600160a01b03861660009081526021602052604090205460ff16155b8015612ce157506000601554115b15612e6857600e544310612d0857600160066000828254612d029190613aad565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff16612de8576001600160a01b0386166000908152600f60205260408120805460ff191660019081179091556011805491929091612d61908490613775565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612df58660636139c8565b612dff91906139df565b905060155460175482612e1291906139c8565b612e1c91906139df565b60206000828254612e2d9190613775565b9091555050601554601654612e4290836139c8565b612e4c91906139df565b601f6000828254612e5d9190613775565b90915550612fa19050565b6001600160a01b03861660009081526023602052604090205460ff168015612e9257506000601c54115b15612ef4576064601c5486612ea791906139c8565b612eb191906139df565b9050601c54601e5482612ec491906139c8565b612ece91906139df565b60206000828254612edf9190613775565b9091555050601c54601d54612e4290836139c8565b6001600160a01b03871660009081526023602052604090205460ff168015612f1e57506000601554115b15612fa157606460155486612f3391906139c8565b612f3d91906139df565b905060155460175482612f5091906139c8565b612f5a91906139df565b60206000828254612f6b9190613775565b9091555050601554601654612f8090836139c8565b612f8a91906139df565b601f6000828254612f9b9190613775565b90915550505b8015612fb257612fb28730836123f7565b612fbc8186613aad565b94505b612fca8787876123f7565b50505050505050565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602360205260409020805460ff1916821515179055611ada8282612fd3565b600061306f3061150a565b90506000601f546020546130839190613775565b9050811580613090575080155b15613099575050565b600b546130a790600f6139c8565b8211156130bf57600b546130bc90600f6139c8565b91505b600080600283602054866130d391906139c8565b6130dd91906139df565b6130e791906139df565b90506130fb6130f68286613aad565b6131c6565b60205447908190600090613111906002906139df565b61311b9087613aad565b601f5461312890856139c8565b61313291906139df565b905061313e8183613aad565b60006020819055601f55915083158015906131595750600082115b15613168576131688483613320565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146131b5576040519150601f19603f3d011682016040523d82523d6000602084013e6131ba565b606091505b50505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131fb576131fb6137c2565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132789190613883565b8160018151811061328b5761328b6137c2565b6001600160a01b0392831660209182029290920101526009546132b191309116846122d3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906132ea908590600090869030904290600401613ac0565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b505050505050565b6009546133389030906001600160a01b0316846122d3565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906114c09030908790600090819061dead904290600401613929565b6001600160a01b038116811461338c57600080fd5b50565b6000602082840312156133a157600080fd5b81356133ac81613377565b9392505050565b600080604083850312156133c657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613402578581018301518582016040015282016133e6565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561343657600080fd5b823561344181613377565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561348e5761348e61344f565b604052919050565b600067ffffffffffffffff8211156134b0576134b061344f565b5060051b60200190565b600082601f8301126134cb57600080fd5b813560206134e06134db83613496565b613465565b82815260059290921b840181019181810190868411156134ff57600080fd5b8286015b8481101561351a5780358352918301918301613503565b509695505050505050565b6000806040838503121561353857600080fd5b823567ffffffffffffffff8082111561355057600080fd5b818501915085601f83011261356457600080fd5b813560206135746134db83613496565b82815260059290921b8401810191818101908984111561359357600080fd5b948201945b838610156135ba5785356135ab81613377565b82529482019490820190613598565b965050860135925050808211156135d057600080fd5b506135dd858286016134ba565b9150509250929050565b6000806000606084860312156135fc57600080fd5b833561360781613377565b9250602084013561361781613377565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156136615781516001600160a01b03168752958201959082019060010161363c565b509495945050505050565b6020815260006133ac6020830184613628565b60006020828403121561369157600080fd5b5035919050565b801515811461338c57600080fd5b600080604083850312156136b957600080fd5b82356136c481613377565b915060208301356136d481613698565b809150509250929050565b6000602082840312156136f157600080fd5b81356133ac81613698565b6000806040838503121561370f57600080fd5b823561371a81613377565b915060208301356136d481613377565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c2957610c2961375f565b600181811c9082168061379c57607f821691505b6020821081036137bc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016137ea576137ea61375f565b5060010190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561389557600080fd5b81516133ac81613377565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561397957600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156139a457600080fd5b5051919050565b6000602082840312156139bd57600080fd5b81516133ac81613698565b8082028115828204841417610c2957610c2961375f565b6000826139fc57634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613a1457600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c2957610c2961375f565b85815284602082015260a060408201526000613adf60a0830186613628565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212207d5345472e82340d191bfed83b0730ec76f53fa2f55c2a376f2650a6b88791f564736f6c63430008130033

Deployed Bytecode Sourcemap

10677:21311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11078:44;;;;;;;;;;-1:-1:-1;11078:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;11078:44:0;;;;;;;;16571:346;;;;;;;;;;-1:-1:-1;16571:346:0;;;;;:::i;:::-;;:::i;:::-;;4193:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10821:27::-;;;;;;;;;;-1:-1:-1;10821:27:0;;;;-1:-1:-1;;;;;10821:27:0;;;;;;-1:-1:-1;;;;;1582:32:1;;;1564:51;;1552:2;1537:18;10821:27:0;1400:221:1;5173:194:0;;;;;;;;;;-1:-1:-1;5173:194:0;;;;;:::i;:::-;;:::i;11982:63::-;;;;;;;;;;-1:-1:-1;11982:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4514:108;;;;;;;;;;-1:-1:-1;4602:12:0;;4514:108;;;2092:25:1;;;2080:2;2065:18;4514:108:0;1946:177:1;11881:33:0;;;;;;;;;;;;;;;;29210:719;;;;;;;;;;-1:-1:-1;29210:719:0;;;;;:::i;:::-;;:::i;5375:529::-;;;;;;;;;;-1:-1:-1;5375:529:0;;;;;:::i;:::-;;:::i;14697:169::-;;;;;;;;;;-1:-1:-1;14697:169:0;;;;;:::i;:::-;;:::i;4413:93::-;;;;;;;;;;-1:-1:-1;4413:93:0;;4496:2;5218:36:1;;5206:2;5191:18;4413:93:0;5076:184:1;5912:290:0;;;;;;;;;;-1:-1:-1;5912:290:0;;;;;:::i;:::-;;:::i;10855:21::-;;;;;;;;;;-1:-1:-1;10855:21:0;;;;-1:-1:-1;;;;;10855:21:0;;;26266:350;;;;;;;;;;-1:-1:-1;26266:350:0;;;;;:::i;:::-;;:::i;11196:33::-;;;;;;;;;;-1:-1:-1;11196:33:0;;;;;;;;11761:32;;;;;;;;;;;;;;;;22941:121;;;;;;;;;;-1:-1:-1;23036:18:0;;23021:12;:33;22941:121;;11469:31;;;;;;;;;;;;;;;;16224:339;;;;;;;;;;-1:-1:-1;16224:339:0;;;;;:::i;:::-;;:::i;10753:28::-;;;;;;;;;;;;;;;;14406:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29934:2047::-;;;;;;;;;;-1:-1:-1;29934:2047:0;;;;;:::i;:::-;;:::i;11726:28::-;;;;;;;;;;;;;;;;11162:25;;;;;;;;;;;;;;;;11276:31;;;;;;;;;;-1:-1:-1;11276:31:0;;;;;;;;;;;4630:143;;;;;;;;;;-1:-1:-1;4630:143:0;;;;;:::i;:::-;;:::i;26624:84::-;;;;;;;;;;;;;:::i;15273:336::-;;;;;;;;;;-1:-1:-1;15273:336:0;;;;;:::i;:::-;;:::i;8621:249::-;;;;;;;;;;-1:-1:-1;8621:249:0;;;;;:::i;:::-;;:::i;27196:464::-;;;;;;;;;;-1:-1:-1;27196:464:0;;;;;:::i;:::-;;:::i;25443:560::-;;;;;;;;;;-1:-1:-1;25443:560:0;;;;;:::i;:::-;;:::i;10719:27::-;;;;;;;;;;;;;;;;8407:79;;;;;;;;;;-1:-1:-1;8472:6:0;;-1:-1:-1;;;;;8472:6:0;8407:79;;4301:104;;;;;;;;;;;;;:::i;15617:355::-;;;;;;;;;;-1:-1:-1;15617:355:0;;;;;:::i;:::-;;:::i;26716:84::-;;;;;;;;;;;;;:::i;6210:475::-;;;;;;;;;;-1:-1:-1;6210:475:0;;;;;:::i;:::-;;:::i;11038:33::-;;;;;;;;;;;;;;;;4781:200;;;;;;;;;;-1:-1:-1;4781:200:0;;;;;:::i;:::-;;:::i;12052:57::-;;;;;;;;;;-1:-1:-1;12052:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27668:861;;;;;;;;;;-1:-1:-1;27668:861:0;;;;;:::i;:::-;;:::i;11236:33::-;;;;;;;;;;-1:-1:-1;11236:33:0;;;;;;;;;;;16925:182;;;;;;;;;;-1:-1:-1;16925:182:0;;;;;:::i;:::-;;:::i;11387:39::-;;;;;;;;;;-1:-1:-1;11387:39:0;;;;;;;;11129:26;;;;;;;;;;-1:-1:-1;11129:26:0;;;;;:::i;:::-;;:::i;11435:27::-;;;;;;;;;;;;;;;;4989:176;;;;;;;;;;-1:-1:-1;4989:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;5130:18:0;;;5103:7;5130:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4989:176;10913:33;;;;;;;;;;;;;;;;26808:380;;;;;;;;;;;;;:::i;14927:98::-;;;;;;;;;;;;;:::i;10953:32::-;;;;;;;;;;-1:-1:-1;10953:32:0;;;;-1:-1:-1;;;;;10953:32:0;;;10994:37;;;;;;;;;;;;;;;;28537:665;;;;;;;;;;-1:-1:-1;28537:665:0;;;;;:::i;:::-;;:::i;11507:30::-;;;;;;;;;;;;;;;;8878:281;;;;;;;;;;-1:-1:-1;8878:281:0;;;;;:::i;:::-;;:::i;26073:185::-;;;;;;;;;;;;;:::i;11800:31::-;;;;;;;;;;;;;;;;10788:24;;;;;;;;;;;;;;;;11840:34;;;;;;;;;;;;;;;;14514:175;;;;;;;;;;-1:-1:-1;14514:175:0;;;;;:::i;:::-;;:::i;16571:346::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;;;;;;;;;16697:17:::1;:34:::0;;;16742:16:::1;:32:::0;;;16801:36:::1;16761:13:::0;16717:14;16801:36:::1;:::i;:::-;16785:13;:52:::0;;;16873:2:::1;-1:-1:-1::0;16856:19:0::1;16848:61;;;::::0;-1:-1:-1;;;16848:61:0;;8364:2:1;16848:61:0::1;::::0;::::1;8346:21:1::0;8403:2;8383:18;;;8376:30;8442:31;8422:18;;;8415:59;8491:18;;16848:61:0::1;8162:353:1::0;16848:61:0::1;16571:346:::0;;:::o;4193:100::-;4247:13;4280:5;4273:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4193:100;:::o;5173:194::-;5281:4;5298:39;338:10;5321:7;5330:6;5298:8;:39::i;:::-;-1:-1:-1;5355:4:0;5173:194;;;;;:::o;29210:719::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;29391:15:::1;:22;29373:7;:14;:40;29351:120;;;::::0;-1:-1:-1;;;29351:120:0;;9107:2:1;29351:120:0::1;::::0;::::1;9089:21:1::0;9146:2;9126:18;;;9119:30;9185:32;9165:18;;;9158:60;9235:18;;29351:120:0::1;8905:354:1::0;29351:120:0::1;29521:3;29504:7;:14;:20;29482:124;;;::::0;-1:-1:-1;;;29482:124:0;;9466:2:1;29482:124:0::1;::::0;::::1;9448:21:1::0;9505:2;9485:18;;;9478:30;9544:34;9524:18;;;9517:62;-1:-1:-1;;;9595:18:1;;;9588:52;9657:19;;29482:124:0::1;9264:418:1::0;29482:124:0::1;29720:9;29715:207;29739:7;:14;29735:1;:18;29715:207;;;29775:14;29792:7;29800:1;29792:10;;;;;;;;:::i;:::-;;;;;;;29775:27;;29817:14;29834:15;29850:1;29834:18;;;;;;;;:::i;:::-;;;;;;;29817:35;;29867:43;29883:10;29895:6;29903;29867:15;:43::i;:::-;29760:162;;29755:3;;;;;:::i;:::-;;;;29715:207;;;;29210:719:::0;;:::o;5375:529::-;5515:4;5532:36;5542:6;5550:9;5561:6;5532:9;:36::i;:::-;-1:-1:-1;;;;;5608:19:0;;5581:24;5608:19;;;:11;:19;;;;;;;;338:10;5608:33;;;;;;;;5674:26;;;;5652:116;;;;-1:-1:-1;;;5652:116:0;;10161:2:1;5652:116:0;;;10143:21:1;10200:2;10180:18;;;10173:30;10239:34;10219:18;;;10212:62;-1:-1:-1;;;10290:18:1;;;10283:38;10338:19;;5652:116:0;9959:404:1;5652:116:0;5804:57;5813:6;338:10;5854:6;5835:16;:25;5804:8;:57::i;:::-;-1:-1:-1;5892:4:0;;5375:529;-1:-1:-1;;;;5375:529:0:o;14697:169::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14769:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;14768:21;14760:60;;;::::0;-1:-1:-1;;;14760:60:0;;10570:2:1;14760:60:0::1;::::0;::::1;10552:21:1::0;10609:2;10589:18;;;10582:30;10648:28;10628:18;;;10621:56;10694:18;;14760:60:0::1;10368:350:1::0;14760:60:0::1;-1:-1:-1::0;;;;;14831:20:0::1;;::::0;;;:12:::1;:20;::::0;;;;:27;;-1:-1:-1;;14831:27:0::1;14854:4;14831:27;::::0;;14697:169::o;5912:290::-;338:10;6025:4;6114:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6114:34:0;;;;;;;;;;6025:4;;6042:130;;6092:7;;6114:47;;6151:10;;6114:47;:::i;:::-;6042:8;:130::i;26266:350::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26392:32:0;::::1;26370:120;;;::::0;-1:-1:-1;;;26370:120:0;;10925:2:1;26370:120:0::1;::::0;::::1;10907:21:1::0;10964:2;10944:18;;;10937:30;11003:34;10983:18;;;10976:62;-1:-1:-1;;;11054:18:1;;;11047:36;11100:19;;26370:120:0::1;10723:402:1::0;26370:120:0::1;26501:17;:47:::0;;-1:-1:-1;;;;;;26501:47:0::1;-1:-1:-1::0;;;;;26501:47:0;::::1;::::0;;::::1;::::0;;;26564:44:::1;::::0;::::1;::::0;-1:-1:-1;;26564:44:0::1;26266:350:::0;:::o;16224:339::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;16349:16:::1;:33:::0;;;16393:15:::1;:31:::0;;;16450:34:::1;16411:13:::0;16368:14;16450:34:::1;:::i;:::-;16435:12;:49:::0;;;16519:2:::1;-1:-1:-1::0;16503:18:0::1;16495:60;;;::::0;-1:-1:-1;;;16495:60:0;;8364:2:1;16495:60:0::1;::::0;::::1;8346:21:1::0;8403:2;8383:18;;;8376:30;8442:31;8422:18;;;8415:59;8491:18;;16495:60:0::1;8162:353:1::0;14406:100:0;14453:16;14489:9;14482:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14482:16:0;;;;;;;;;;;;;;;;;;;;;;14406:100;:::o;29934:2047::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;30020:13:::1;::::0;::::1;::::0;::::1;;;30019:14;30011:70;;;;-1:-1:-1::0;;;30011:70:0::1;;;;;;;:::i;:::-;30133:2;30114:16;:21;30092:110;;;;-1:-1:-1::0;;;30092:110:0::1;;;;;;;:::i;:::-;30250:13;:20:::0;;-1:-1:-1;;30281:18:0;;;;;30331:12:::1;30310:18;:33:::0;;;30375:37:::1;::::0;30396:16;;30375:37:::1;:::i;:::-;30354:18;:58:::0;30428:16:::1;::::0;::::1;::::0;;;::::1;30457:18;30492:13;30509:1;30492:18:::0;30488:315:::1;;-1:-1:-1::0;30540:42:0::1;30488:315;;;30623:13;30640:1;30623:18:::0;30619:184:::1;;-1:-1:-1::0;30671:42:0::1;30619:184;;;30761:30;::::0;-1:-1:-1;;;30761:30:0;;12152:2:1;30761:30:0::1;::::0;::::1;12134:21:1::0;12191:2;12171:18;;;12164:30;-1:-1:-1;;;12210:18:1;;;12203:50;12270:18;;30761:30:0::1;11950:344:1::0;30619:184:0::1;30845:9;:34:::0;;-1:-1:-1;;;;;;30845:34:0::1;-1:-1:-1::0;;;;;30845:34:0;::::1;::::0;;::::1;::::0;;;30945:19:::1;::::0;;-1:-1:-1;;;30945:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;30845:34;30945:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30933:43:0::1;;30999:4;31019:9;;;;;;;;;-1:-1:-1::0;;;;;31019:9:0::1;-1:-1:-1::0;;;;;31019:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30933:113;::::0;-1:-1:-1;;;;;;30933:113:0::1;::::0;;;;;;-1:-1:-1;;;;;12785:15:1;;;30933:113:0::1;::::0;::::1;12767:34:1::0;12837:15;;12817:18;;;12810:43;12702:18;;30933:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30924:6;:122:::0;;-1:-1:-1;;;;;;30924:122:0::1;-1:-1:-1::0;;;;;30924:122:0;;;::::1;::::0;;::::1;::::0;;31059:49:::1;::::0;-1:-1:-1;31059:26:0::1;:49::i;:::-;31156:6;::::0;31119:51:::1;::::0;-1:-1:-1;;;;;31156:6:0::1;::::0;31119:28:::1;:51::i;:::-;31226:9;::::0;31191:52:::1;::::0;-1:-1:-1;;;;;31226:9:0::1;::::0;31191:26:::1;:52::i;:::-;31278:9;::::0;31254:41:::1;::::0;-1:-1:-1;;;;;31278:9:0::1;::::0;31254:15:::1;:41::i;:::-;31408:1;31384:21;:25;31362:110;;;;-1:-1:-1::0;;;31362:110:0::1;;;;;;;:::i;:::-;31534:1;31507:24;31525:4;31507:9;:24::i;:::-;:28;31485:116;;;;-1:-1:-1::0;;;31485:116:0::1;;;;;;;:::i;:::-;31646:9;::::0;31614:69:::1;::::0;31631:4:::1;::::0;-1:-1:-1;;;;;31646:9:0::1;31658:24;31631:4:::0;31658:9:::1;:24::i;31614:69::-;31696:9;::::0;-1:-1:-1;;;;;31696:9:0::1;:25;31729:21;31774:4;31794:24;31774:4:::0;31794:9:::1;:24::i;:::-;31833:1;31876::::0;31927:4:::1;31947:15;31696:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30000:1981;29934:2047:::0;:::o;4630:143::-;-1:-1:-1;;;;;4747:18:0;4720:7;4747:18;;;;;;;;;;;;4630:143::o;26624:84::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;26678:14:::1;:22:::0;;-1:-1:-1;;26678:22:0::1;::::0;;26624:84::o;15273:336::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;15395:4:::1;15390:155;;15452:6;::::0;-1:-1:-1;;;;;15452:6:0;;::::1;15442:16:::0;;::::1;::::0;15416:117:::1;;;::::0;-1:-1:-1;;;15416:117:0;;14800:2:1;15416:117:0::1;::::0;::::1;14782:21:1::0;14839:2;14819:18;;;14812:30;14878:34;14858:18;;;14851:62;-1:-1:-1;;;14929:18:1;;;14922:37;14976:19;;15416:117:0::1;14598:403:1::0;15416:117:0::1;-1:-1:-1::0;;;;;15555:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15555:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15273:336::o;8621:249::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;8732:15:::1;8724:52;;;::::0;-1:-1:-1;;;8724:52:0;;15208:2:1;8724:52:0::1;::::0;::::1;15190:21:1::0;15247:2;15227:18;;;15220:30;15286:26;15266:18;;;15259:54;15330:18;;8724:52:0::1;15006:348:1::0;8724:52:0::1;8813:6;::::0;8792:40:::1;::::0;8829:1:::1;::::0;-1:-1:-1;;;;;8813:6:0::1;::::0;8792:40:::1;::::0;8829:1;;8792:40:::1;-1:-1:-1::0;8843:6:0::1;:19:::0;;-1:-1:-1;;;;;;8843:19:0::1;::::0;;8621:249::o;27196:464::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;27284:13:::1;::::0;::::1;::::0;::::1;;;27283:14;27275:50;;;::::0;-1:-1:-1;;;27275:50:0;;15561:2:1;27275:50:0::1;::::0;::::1;15543:21:1::0;15600:2;15580:18;;;15573:30;15639:25;15619:18;;;15612:53;15682:18;;27275:50:0::1;15359:347:1::0;27275:50:0::1;27378:2;27358:16;:22;;27336:111;;;;-1:-1:-1::0;;;27336:111:0::1;;;;;;;:::i;:::-;27458:13;:20:::0;;-1:-1:-1;;27489:18:0;;;;;27539:12:::1;27518:18;:33:::0;;;27583:37:::1;::::0;27604:16;;27583:37:::1;:::i;:::-;27562:18;:58:::0;27636:16:::1;::::0;::::1;::::0;;;::::1;27196:464:::0;:::o;25443:560::-;8534:6;;25555:10;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25586:20:0;::::1;25578:59;;;::::0;-1:-1:-1;;;25578:59:0;;15913:2:1;25578:59:0::1;::::0;::::1;15895:21:1::0;15952:2;15932:18;;;15925:30;15991:28;15971:18;;;15964:56;16037:18;;25578:59:0::1;15711:350:1::0;25578:59:0::1;-1:-1:-1::0;;;;;25670:23:0;::::1;25688:4;25670:23;;::::0;:41:::1;;-1:-1:-1::0;25698:13:0::1;::::0;::::1;::::0;::::1;;;25697:14;25670:41;25648:143;;;::::0;-1:-1:-1;;;25648:143:0;;16268:2:1;25648:143:0::1;::::0;::::1;16250:21:1::0;16307:2;16287:18;;;16280:30;16346:34;16326:18;;;16319:62;-1:-1:-1;;;16397:18:1;;;16390:50;16457:19;;25648:143:0::1;16066:416:1::0;25648:143:0::1;25829:39;::::0;-1:-1:-1;;;25829:39:0;;25862:4:::1;25829:39;::::0;::::1;1564:51:1::0;25802:24:0::1;::::0;-1:-1:-1;;;;;25829:24:0;::::1;::::0;::::1;::::0;1537:18:1;;25829:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25887:46;::::0;-1:-1:-1;;;25887:46:0;;-1:-1:-1;;;;;16868:32:1;;;25887:46:0::1;::::0;::::1;16850:51:1::0;16917:18;;;16910:34;;;25802:66:0;;-1:-1:-1;25887:23:0;;::::1;::::0;::::1;::::0;16823:18:1;;25887:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25949;::::0;;-1:-1:-1;;;;;16868:32:1;;16850:51;;16932:2;16917:18;;16910:34;;;25879:54:0;;-1:-1:-1;25949:46:0::1;::::0;16823:18:1;25949:46:0::1;;;;;;;25567:436;25443:560:::0;;;;:::o;4301:104::-;4357:13;4390:7;4383:14;;;;;:::i;15617:355::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;15765:6:::1;::::0;-1:-1:-1;;;;;15765:6:0;;::::1;15757:14:::0;;::::1;::::0;15735:121:::1;;;::::0;-1:-1:-1;;;15735:121:0;;17407:2:1;15735:121:0::1;::::0;::::1;17389:21:1::0;17446:2;17426:18;;;17419:30;17485:34;17465:18;;;17458:62;17556:27;17536:18;;;17529:55;17601:19;;15735:121:0::1;17205:421:1::0;15735:121:0::1;15867:41;15896:4;15902:5;15867:28;:41::i;:::-;15924:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15924:40:0;::::1;::::0;::::1;::::0;;;::::1;15617:355:::0;;:::o;26716:84::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;26771:14:::1;:21:::0;;-1:-1:-1;;26771:21:0::1;26788:4;26771:21;::::0;;26716:84::o;6210:475::-;338:10;6328:4;6372:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6372:34:0;;;;;;;;;;6439:35;;;;6417:122;;;;-1:-1:-1;;;6417:122:0;;17833:2:1;6417:122:0;;;17815:21:1;17872:2;17852:18;;;17845:30;17911:34;17891:18;;;17884:62;-1:-1:-1;;;17962:18:1;;;17955:35;18007:19;;6417:122:0;17631:401:1;6417:122:0;6575:67;338:10;6598:7;6626:15;6607:16;:34;6575:8;:67::i;:::-;-1:-1:-1;6673:4:0;;6210:475;-1:-1:-1;;;6210:475:0:o;4781:200::-;4892:4;4909:42;338:10;4933:9;4944:6;4909:9;:42::i;27668:861::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;27740:12:::1;27732:56;;;::::0;-1:-1:-1;;;27732:56:0;;18239:2:1;27732:56:0::1;::::0;::::1;18221:21:1::0;18278:2;18258:18;;;18251:30;18317:33;18297:18;;;18290:61;18368:18;;27732:56:0::1;18037:355:1::0;27732:56:0::1;27808:13;::::0;::::1;::::0;::::1;;;27807:14;27799:70;;;;-1:-1:-1::0;;;27799:70:0::1;;;;;;;:::i;:::-;27958:1;27934:21;:25;27912:110;;;;-1:-1:-1::0;;;27912:110:0::1;;;;;;;:::i;:::-;28082:1;28055:24;28073:4;28055:9;:24::i;:::-;:28;28033:116;;;;-1:-1:-1::0;;;28033:116:0::1;;;;;;;:::i;:::-;28194:9;::::0;28162:69:::1;::::0;28179:4:::1;::::0;-1:-1:-1;;;;;28194:9:0::1;28206:24;28179:4:::0;28206:9:::1;:24::i;28162:69::-;28244:9;::::0;-1:-1:-1;;;;;28244:9:0::1;:25;28277:21;28322:4;28342:24;28322:4:::0;28342:9:::1;:24::i;:::-;28381:1;28424::::0;28475:4:::1;28495:15;28244:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27668:861:::0;:::o;16925:182::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17010:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17010:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17065:34;;542:41:1;;;17065:34:0::1;::::0;515:18:1;17065:34:0::1;;;;;;;16925:182:::0;;:::o;11129:26::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11129:26:0;;-1:-1:-1;11129:26:0;:::o;26808:380::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;26879:20:::1;::::0;26860:16:::1;:39:::0;;;26928:19:::1;::::0;26910:15:::1;:37:::0;;;26973:34:::1;::::0;::::1;:::i;:::-;26958:12;:49:::0;27040:24:::1;::::0;27020:17:::1;:44:::0;;;27094:23:::1;::::0;27075:16:::1;:42:::0;;;27144:36:::1;::::0;::::1;:::i;:::-;27128:13;:52:::0;26808:380::o;14927:98::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;14989:20:::1;:28:::0;;-1:-1:-1;;14989:28:0::1;::::0;;14927:98::o;28537:665::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;28629:6:::1;::::0;28622:39:::1;::::0;-1:-1:-1;;;28622:39:0;;28655:4:::1;28622:39;::::0;::::1;1564:51:1::0;28602:17:0::1;::::0;-1:-1:-1;;;;;28629:6:0::1;::::0;28622:24:::1;::::0;1537:18:1;;28622:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28602:59;;28694:1;28682:9;:13;28674:50;;;::::0;-1:-1:-1;;;28674:50:0;;18599:2:1;28674:50:0::1;::::0;::::1;18581:21:1::0;18638:2;18618:18;;;18611:30;18677:26;18657:18;;;18650:54;18721:18;;28674:50:0::1;18397:348:1::0;28674:50:0::1;28737:16;28780:5;28757:19;28769:7:::0;28757:9;:19:::1;:::i;:::-;28756:29;;;;:::i;:::-;28872:6;::::0;28896:9:::1;::::0;28865:52:::1;::::0;-1:-1:-1;;;28865:52:0;;-1:-1:-1;;;;;28896:9:0;;::::1;28865:52;::::0;::::1;16850:51:1::0;16917:18;;;16910:34;;;28737:48:0;;-1:-1:-1;28872:6:0::1;::::0;28865:22:::1;::::0;16823:18:1;;28865:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28963:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;28963:231:0;;-1:-1:-1;;;;;28963:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;29014:4:::1;::::0;29034:8;;28963:9;;;;29143:10:::1;::::0;29168:15:::1;::::0;28963:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8878:281::-:0;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8981:22:0;::::1;8959:110;;;::::0;-1:-1:-1;;;8959:110:0;;20209:2:1;8959:110:0::1;::::0;::::1;20191:21:1::0;20248:2;20228:18;;;20221:30;20287:34;20267:18;;;20260:62;-1:-1:-1;;;20338:18:1;;;20331:36;20384:19;;8959:110:0::1;20007:402:1::0;8959:110:0::1;9106:6;::::0;9085:38:::1;::::0;-1:-1:-1;;;;;9085:38:0;;::::1;::::0;9106:6:::1;::::0;9085:38:::1;::::0;9106:6:::1;::::0;9085:38:::1;9134:6;:17:::0;;-1:-1:-1;;;;;;9134:17:0::1;-1:-1:-1::0;;;;;9134:17:0;;;::::1;::::0;;;::::1;::::0;;8878:281::o;26073:185::-;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;26168:82:::1;::::0;26131:12:::1;::::0;26176:10:::1;::::0;26200:21:::1;::::0;26131:12;26168:82;26131:12;26168:82;26200:21;26176:10;26168:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14514:175:::0;8534:6;;-1:-1:-1;;;;;8534:6:0;338:10;8534:22;8526:67;;;;-1:-1:-1;;;8526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14587:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;14579:63;;;::::0;-1:-1:-1;;;14579:63:0;;20826:2:1;14579:63:0::1;::::0;::::1;20808:21:1::0;20865:2;20845:18;;;20838:30;20904:32;20884:18;;;20877:60;20954:18;;14579:63:0::1;20624:354:1::0;14579:63:0::1;-1:-1:-1::0;;;;;14653:20:0::1;14676:5;14653:20:::0;;;:12:::1;:20;::::0;;;;:28;;-1:-1:-1;;14653:28:0::1;::::0;;14514:175::o;7676:380::-;-1:-1:-1;;;;;7812:19:0;;7804:68;;;;-1:-1:-1;;;7804:68:0;;21185:2:1;7804:68:0;;;21167:21:1;21224:2;21204:18;;;21197:30;21263:34;21243:18;;;21236:62;-1:-1:-1;;;21314:18:1;;;21307:34;21358:19;;7804:68:0;20983:400:1;7804:68:0;-1:-1:-1;;;;;7891:21:0;;7883:68;;;;-1:-1:-1;;;7883:68:0;;21590:2:1;7883:68:0;;;21572:21:1;21629:2;21609:18;;;21602:30;21668:34;21648:18;;;21641:62;-1:-1:-1;;;21719:18:1;;;21712:32;21761:19;;7883:68:0;21388:398:1;7883:68:0;-1:-1:-1;;;;;7964:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8016:32;;2092:25:1;;;8016:32:0;;2065:18:1;8016:32:0;;;;;;;7676:380;;;:::o;6693:651::-;-1:-1:-1;;;;;6833:20:0;;6825:70;;;;-1:-1:-1;;;6825:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6914:23:0;;6906:71;;;;-1:-1:-1;;;6906:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7014:17:0;;6990:21;7014:17;;;;;;;;;;;7064:23;;;;7042:111;;;;-1:-1:-1;;;7042:111:0;;22803:2:1;7042:111:0;;;22785:21:1;22842:2;22822:18;;;22815:30;22881:34;22861:18;;;22854:62;-1:-1:-1;;;22932:18:1;;;22925:36;22978:19;;7042:111:0;22601:402:1;7042:111:0;-1:-1:-1;;;;;7189:17:0;;;:9;:17;;;;;;;;;;;7209:22;;;7189:42;;7253:20;;;;;;;;:30;;7225:6;;7189:9;7253:30;;7225:6;;7253:30;:::i;:::-;;;;;;;;7318:9;-1:-1:-1;;;;;7301:35:0;7310:6;-1:-1:-1;;;;;7301:35:0;;7329:6;7301:35;;;;2092:25:1;;2080:2;2065:18;;1946:177;7301:35:0;;;;;;;;6814:530;6693:651;;;:::o;17115:5818::-;-1:-1:-1;;;;;17247:18:0;;17239:68;;;;-1:-1:-1;;;17239:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17326:16:0;;17318:64;;;;-1:-1:-1;;;17318:64:0;;;;;;;:::i;:::-;17410:1;17401:6;:10;17393:52;;;;-1:-1:-1;;;17393:52:0;;23210:2:1;17393:52:0;;;23192:21:1;23249:2;23229:18;;;23222:30;23288:31;23268:18;;;23261:59;23337:18;;17393:52:0;23008:353:1;17393:52:0;17463:13;;;;;;;17458:183;;-1:-1:-1;;;;;17519:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17548:23:0;;;;;;:19;:23;;;;;;;;17519:52;17493:136;;;;-1:-1:-1;;;17493:136:0;;23568:2:1;17493:136:0;;;23550:21:1;23607:2;23587:18;;;23580:30;-1:-1:-1;;;23626:18:1;;;23619:52;23688:18;;17493:136:0;23366:346:1;17493:136:0;23036:18;;23021:12;:33;17657:26;:43;;;;-1:-1:-1;17687:13:0;;;;;;;17657:43;17653:269;;;-1:-1:-1;;;;;17744:18:0;;;;;;:12;:18;;;;;;;;17743:19;;:36;;-1:-1:-1;8472:6:0;;-1:-1:-1;;;;;17766:13:0;;;8472:6;;17766:13;17743:36;:61;;;-1:-1:-1;;;;;;17783:21:0;;17797:6;17783:21;17743:61;17717:193;;;;-1:-1:-1;;;17717:193:0;;23919:2:1;17717:193:0;;;23901:21:1;23958:2;23938:18;;;23931:30;23997:34;23977:18;;;23970:62;24068:34;24048:18;;;24041:62;-1:-1:-1;;;24119:19:1;;;24112:37;24166:19;;17717:193:0;23717:474:1;17717:193:0;17938:14;;;;17934:2148;;;8472:6;;-1:-1:-1;;;;;17991:15:0;;;8472:6;;17991:15;;;;:49;;-1:-1:-1;8472:6:0;;-1:-1:-1;;;;;18027:13:0;;;8472:6;;18027:13;;17991:49;:91;;;;-1:-1:-1;;;;;;18061:21:0;;18075:6;18061:21;;17991:91;:138;;;;-1:-1:-1;;;;;;18104:25:0;;;;;;:19;:25;;;;;;;;18103:26;17991:138;:183;;;;-1:-1:-1;;;;;;18151:23:0;;;;;;:19;:23;;;;;;;;18150:24;17991:183;17969:2102;;;18213:20;;;;18209:692;;;18276:9;;-1:-1:-1;;;;;18262:24:0;;;18276:9;;18262:24;;;;:49;;-1:-1:-1;18304:6:0;;-1:-1:-1;;;;;18290:21:0;;;18304:6;;18290:21;;18262:49;18258:624;;;18453:16;18468:1;18453:12;:16;:::i;:::-;18407:9;18378:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;18574:16:0;18589:1;18574:12;:16;:::i;:::-;-1:-1:-1;;;;;18506:32:0;;;;;;:28;:32;;;;;;:84;18378:212;18340:363;;;;-1:-1:-1;;;18340:363:0;;24531:2:1;18340:363:0;;;24513:21:1;24570:2;24550:18;;;24543:30;24609:34;24589:18;;;24582:62;-1:-1:-1;;;24660:18:1;;;24653:51;24721:19;;18340:363:0;24329:417:1;18340:363:0;18759:9;18730:39;;;;:28;:39;;;;;;18772:12;18730:54;;;;-1:-1:-1;;;;;18811:32:0;;;;;;:47;18258:624;-1:-1:-1;;;;;18975:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;19032:35:0;;;;;;:31;:35;;;;;;;;19031:36;18975:92;18949:1107;;;19154:12;;19144:6;:22;;19110:148;;;;-1:-1:-1;;;19110:148:0;;24953:2:1;19110:148:0;;;24935:21:1;24992:2;24972:18;;;24965:30;25031:34;25011:18;;;25004:62;-1:-1:-1;;;25082:18:1;;;25075:38;25130:19;;19110:148:0;24751:404:1;19110:148:0;19341:9;;19324:13;19334:2;19324:9;:13::i;:::-;19315:22;;:6;:22;:::i;:::-;:35;;19281:140;;;;-1:-1:-1;;;19281:140:0;;25362:2:1;19281:140:0;;;25344:21:1;25401:2;25381:18;;;25374:30;-1:-1:-1;;;25420:18:1;;;25413:49;25479:18;;19281:140:0;25160:343:1;19281:140:0;18949:1107;;;-1:-1:-1;;;;;19519:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;19574:37:0;;;;;;:31;:37;;;;;;;;19573:38;19519:92;19493:563;;;19698:13;;19688:6;:23;;19654:151;;;;-1:-1:-1;;;19654:151:0;;25710:2:1;19654:151:0;;;25692:21:1;25749:2;25729:18;;;25722:30;25788:34;25768:18;;;25761:62;-1:-1:-1;;;25839:18:1;;;25832:40;25889:19;;19654:151:0;25508:406:1;19493:563:0;-1:-1:-1;;;;;19836:35:0;;;;;;:31;:35;;;;;;;;19831:225;;19956:9;;19939:13;19949:2;19939:9;:13::i;:::-;19930:22;;:6;:22;:::i;:::-;:35;;19896:140;;;;-1:-1:-1;;;19896:140:0;;25362:2:1;19896:140:0;;;25344:21:1;25401:2;25381:18;;;25374:30;-1:-1:-1;;;25420:18:1;;;25413:49;25479:18;;19896:140:0;25160:343:1;19896:140:0;20094:28;20125:24;20143:4;20125:9;:24::i;:::-;20201:18;;20094:55;;-1:-1:-1;20177:42:0;;;;;;;20250:22;;-1:-1:-1;20261:11:0;;;;;;;20250:22;:35;;;;-1:-1:-1;20277:8:0;;-1:-1:-1;;;20277:8:0;;;;20276:9;20250:35;:68;;;;-1:-1:-1;;;;;;20289:29:0;;;;;;:25;:29;;;;;;;;20250:68;20232:196;;;20345:8;:15;;-1:-1:-1;;;;20345:15:0;-1:-1:-1;;;20345:15:0;;;20375:10;:8;:10::i;:::-;20400:8;:16;;-1:-1:-1;;;;20400:16:0;;;20232:196;-1:-1:-1;;;;;20559:25:0;;20440:12;20559:25;;;:19;:25;;;;;;20455:4;;20559:25;;;:52;;-1:-1:-1;;;;;;20588:23:0;;;;;;:19;:23;;;;;;;;20559:52;20555:100;;;-1:-1:-1;20638:5:0;20555:100;20667:12;20772:7;20768:2112;;;23036:18;;23021:12;:33;20855:152;;;;20931:8;20916:12;;:23;;;;:::i;:::-;20906:6;:33;;:100;;;;;20994:12;20968:18;;20989:1;20968:22;;;;:::i;:::-;:38;;20906:100;20854:206;;;;-1:-1:-1;;;;;;21029:31:0;;;;;;:25;:31;;;;;;;;20854:206;:257;;;;-1:-1:-1;;;;;;21082:29:0;;;;;;:25;:29;;;;;;;;21081:30;20854:257;:302;;;;-1:-1:-1;;;;;;21133:23:0;;;;;;:19;:23;;;;;;;;21132:24;20854:302;:339;;;;;21192:1;21177:12;;:16;20854:339;20832:1899;;;23036:18;;23021:12;:33;21228:332;;21539:1;21523:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;21228:332:0;-1:-1:-1;;;;;21585:16:0;;;;;;:12;:16;;;;;;;;21580:216;;-1:-1:-1;;;;;21626:16:0;;;;;;:12;:16;;;;;:23;;-1:-1:-1;;21626:23:0;21645:4;21626:23;;;;;;21672:10;:15;;21645:4;;21672:10;;:15;;21645:4;;21672:15;:::i;:::-;;;;-1:-1:-1;;21710:9:0;:18;;;;;;;-1:-1:-1;21710:18:0;;;;;;;;-1:-1:-1;;;;;;21710:18:0;-1:-1:-1;;;;;21710:18:0;;;;;;;;21756:20;;1564:51:1;;;21756:20:0;;1552:2:1;1537:18;21756:20:0;;;;;;;21580:216;21839:3;21824:11;:6;21833:2;21824:11;:::i;:::-;21823:19;;;;:::i;:::-;21816:26;;21910:12;;21891:15;;21884:4;:22;;;;:::i;:::-;21883:39;;;;:::i;:::-;21861:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21992:12:0;;21972:16;;21965:23;;:4;:23;:::i;:::-;21964:40;;;;:::i;:::-;21941:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;20832:1899:0;;-1:-1:-1;20832:1899:0;;-1:-1:-1;;;;;22067:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22116:1;22100:13;;:17;22067:50;22063:668;;;22172:3;22155:13;;22146:6;:22;;;;:::i;:::-;22145:30;;;;:::i;:::-;22138:37;;22244:13;;22224:16;;22217:4;:23;;;;:::i;:::-;22216:41;;;;:::i;:::-;22194:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22370:13:0;;22328:17;;22321:24;;:4;:24;:::i;22063:668::-;-1:-1:-1;;;;;22445:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22495:1;22480:12;;:16;22445:51;22441:290;;;22550:3;22534:12;;22525:6;:21;;;;:::i;:::-;22524:29;;;;:::i;:::-;22517:36;;22621:12;;22602:15;;22595:4;:22;;;;:::i;:::-;22594:39;;;;:::i;:::-;22572:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22703:12:0;;22683:16;;22676:23;;:4;:23;:::i;:::-;22675:40;;;;:::i;:::-;22652:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22441:290:0;22751:8;;22747:91;;22780:42;22796:4;22810;22817;22780:15;:42::i;:::-;22854:14;22864:4;22854:14;;:::i;:::-;;;20768:2112;22892:33;22908:4;22914:2;22918:6;22892:15;:33::i;:::-;17228:5705;;;;17115:5818;;;:::o;15033:232::-;-1:-1:-1;;;;;15146:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15146:52:0;;;;;;;;;;15214:43;;26087:51:1;;;26154:18;;;26147:50;15214:43:0;;26060:18:1;15214:43:0;;;;;;;15033:232;;:::o;15980:236::-;-1:-1:-1;;;;;16063:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;16063:39:0;;;;;;;16113;16063:31;:39;16113:26;:39::i;24166:1269::-;24205:23;24231:24;24249:4;24231:9;:24::i;:::-;24205:50;;24266:25;24315:19;;24294:18;;:40;;;;:::i;:::-;24266:68;-1:-1:-1;24351:20:0;;;:46;;-1:-1:-1;24375:22:0;;24351:46;24347:85;;;24414:7;;24166:1269::o;24347:85::-;24466:18;;:23;;24487:2;24466:23;:::i;:::-;24448:15;:41;24444:115;;;24524:18;;:23;;24545:2;24524:23;:::i;:::-;24506:41;;24444:115;24571:12;24645:23;24758:1;24725:17;24690:18;;24672:15;:36;;;;:::i;:::-;24671:71;;;;:::i;:::-;:88;;;;:::i;:::-;24645:114;-1:-1:-1;24772:51:0;24789:33;24645:114;24789:15;:33;:::i;:::-;24772:16;:51::i;:::-;25037:18;;24857:21;;;;24836:18;;25037:22;;25058:1;;25037:22;:::i;:::-;25016:44;;:17;:44;:::i;:::-;24979:19;;24966:32;;:10;:32;:::i;:::-;24965:96;;;;:::i;:::-;24938:123;-1:-1:-1;25074:35:0;24938:123;25074:35;;:::i;:::-;25143:1;25122:18;:22;;;25155:19;:23;25074:35;-1:-1:-1;25195:19:0;;;;;:42;;;25236:1;25218:15;:19;25195:42;25191:121;;;25254:46;25267:15;25284;25254:12;:46::i;:::-;25346:17;;25338:89;;-1:-1:-1;;;;;25346:17:0;;;;25391:21;;25338:89;;;;25391:21;25346:17;25338:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;24166:1269:0:o;23070:571::-;23220:16;;;23234:1;23220:16;;;;;;;;23196:21;;23220:16;;;;;;;;;;-1:-1:-1;23220:16:0;23196:40;;23265:4;23247;23252:1;23247:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23247:23:0;;;:7;;;;;;;;;;:23;;;;23291:9;;:16;;;-1:-1:-1;;;23291:16:0;;;;:9;;;;;:14;;:16;;;;;23247:7;;23291:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23281:4;23286:1;23281:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23281:26:0;;;:7;;;;;;;;;:26;23352:9;;23320:56;;23337:4;;23352:9;23364:11;23320:8;:56::i;:::-;23415:9;;:218;;-1:-1:-1;;;23415:218:0;;-1:-1:-1;;;;;23415:9:0;;;;:60;;:218;;23490:11;;23415:9;;23560:4;;23587;;23607:15;;23415:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23125:516;23070:571;:::o;23649:509::-;23829:9;;23797:56;;23814:4;;-1:-1:-1;;;;;23829:9:0;23841:11;23797:8;:56::i;:::-;23896:9;;:254;;-1:-1:-1;;;23896:254:0;;-1:-1:-1;;;;;23896:9:0;;;;:25;;23929:9;;23896:254;;23962:4;;23982:11;;23896:9;;;;24102:6;;24124:15;;23896:254;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;594:248::-;662:6;670;723:2;711:9;702:7;698:23;694:32;691:52;;;739:1;736;729:12;691:52;-1:-1:-1;;762:23:1;;;832:2;817:18;;;804:32;;-1:-1:-1;594:248:1:o;847:548::-;959:4;988:2;1017;1006:9;999:21;1049:6;1043:13;1092:6;1087:2;1076:9;1072:18;1065:34;1117:1;1127:140;1141:6;1138:1;1135:13;1127:140;;;1236:14;;;1232:23;;1226:30;1202:17;;;1221:2;1198:26;1191:66;1156:10;;1127:140;;;1131:3;1316:1;1311:2;1302:6;1291:9;1287:22;1283:31;1276:42;1386:2;1379;1375:7;1370:2;1362:6;1358:15;1354:29;1343:9;1339:45;1335:54;1327:62;;;;847:548;;;;:::o;1626:315::-;1694:6;1702;1755:2;1743:9;1734:7;1730:23;1726:32;1723:52;;;1771:1;1768;1761:12;1723:52;1810:9;1797:23;1829:31;1854:5;1829:31;:::i;:::-;1879:5;1931:2;1916:18;;;;1903:32;;-1:-1:-1;;;1626:315:1:o;2128:127::-;2189:10;2184:3;2180:20;2177:1;2170:31;2220:4;2217:1;2210:15;2244:4;2241:1;2234:15;2260:275;2331:2;2325:9;2396:2;2377:13;;-1:-1:-1;;2373:27:1;2361:40;;2431:18;2416:34;;2452:22;;;2413:62;2410:88;;;2478:18;;:::i;:::-;2514:2;2507:22;2260:275;;-1:-1:-1;2260:275:1:o;2540:183::-;2600:4;2633:18;2625:6;2622:30;2619:56;;;2655:18;;:::i;:::-;-1:-1:-1;2700:1:1;2696:14;2712:4;2692:25;;2540:183::o;2728:662::-;2782:5;2835:3;2828:4;2820:6;2816:17;2812:27;2802:55;;2853:1;2850;2843:12;2802:55;2889:6;2876:20;2915:4;2939:60;2955:43;2995:2;2955:43;:::i;:::-;2939:60;:::i;:::-;3033:15;;;3119:1;3115:10;;;;3103:23;;3099:32;;;3064:12;;;;3143:15;;;3140:35;;;3171:1;3168;3161:12;3140:35;3207:2;3199:6;3195:15;3219:142;3235:6;3230:3;3227:15;3219:142;;;3301:17;;3289:30;;3339:12;;;;3252;;3219:142;;;-1:-1:-1;3379:5:1;2728:662;-1:-1:-1;;;;;;2728:662:1:o;3395:1215::-;3513:6;3521;3574:2;3562:9;3553:7;3549:23;3545:32;3542:52;;;3590:1;3587;3580:12;3542:52;3630:9;3617:23;3659:18;3700:2;3692:6;3689:14;3686:34;;;3716:1;3713;3706:12;3686:34;3754:6;3743:9;3739:22;3729:32;;3799:7;3792:4;3788:2;3784:13;3780:27;3770:55;;3821:1;3818;3811:12;3770:55;3857:2;3844:16;3879:4;3903:60;3919:43;3959:2;3919:43;:::i;3903:60::-;3997:15;;;4079:1;4075:10;;;;4067:19;;4063:28;;;4028:12;;;;4103:19;;;4100:39;;;4135:1;4132;4125:12;4100:39;4159:11;;;;4179:217;4195:6;4190:3;4187:15;4179:217;;;4275:3;4262:17;4292:31;4317:5;4292:31;:::i;:::-;4336:18;;4212:12;;;;4374;;;;4179:217;;;4415:5;-1:-1:-1;;4458:18:1;;4445:32;;-1:-1:-1;;4489:16:1;;;4486:36;;;4518:1;4515;4508:12;4486:36;;4541:63;4596:7;4585:8;4574:9;4570:24;4541:63;:::i;:::-;4531:73;;;3395:1215;;;;;:::o;4615:456::-;4692:6;4700;4708;4761:2;4749:9;4740:7;4736:23;4732:32;4729:52;;;4777:1;4774;4767:12;4729:52;4816:9;4803:23;4835:31;4860:5;4835:31;:::i;:::-;4885:5;-1:-1:-1;4942:2:1;4927:18;;4914:32;4955:33;4914:32;4955:33;:::i;:::-;4615:456;;5007:7;;-1:-1:-1;;;5061:2:1;5046:18;;;;5033:32;;4615:456::o;5473:461::-;5526:3;5564:5;5558:12;5591:6;5586:3;5579:19;5617:4;5646:2;5641:3;5637:12;5630:19;;5683:2;5676:5;5672:14;5704:1;5714:195;5728:6;5725:1;5722:13;5714:195;;;5793:13;;-1:-1:-1;;;;;5789:39:1;5777:52;;5849:12;;;;5884:15;;;;5825:1;5743:9;5714:195;;;-1:-1:-1;5925:3:1;;5473:461;-1:-1:-1;;;;;5473:461:1:o;5939:261::-;6118:2;6107:9;6100:21;6081:4;6138:56;6190:2;6179:9;6175:18;6167:6;6138:56;:::i;6205:180::-;6264:6;6317:2;6305:9;6296:7;6292:23;6288:32;6285:52;;;6333:1;6330;6323:12;6285:52;-1:-1:-1;6356:23:1;;6205:180;-1:-1:-1;6205:180:1:o;6390:118::-;6476:5;6469:13;6462:21;6455:5;6452:32;6442:60;;6498:1;6495;6488:12;6513:382;6578:6;6586;6639:2;6627:9;6618:7;6614:23;6610:32;6607:52;;;6655:1;6652;6645:12;6607:52;6694:9;6681:23;6713:31;6738:5;6713:31;:::i;:::-;6763:5;-1:-1:-1;6820:2:1;6805:18;;6792:32;6833:30;6792:32;6833:30;:::i;:::-;6882:7;6872:17;;;6513:382;;;;;:::o;6900:241::-;6956:6;7009:2;6997:9;6988:7;6984:23;6980:32;6977:52;;;7025:1;7022;7015:12;6977:52;7064:9;7051:23;7083:28;7105:5;7083:28;:::i;7146:388::-;7214:6;7222;7275:2;7263:9;7254:7;7250:23;7246:32;7243:52;;;7291:1;7288;7281:12;7243:52;7330:9;7317:23;7349:31;7374:5;7349:31;:::i;:::-;7399:5;-1:-1:-1;7456:2:1;7441:18;;7428:32;7469:33;7428:32;7469:33;:::i;7539:356::-;7741:2;7723:21;;;7760:18;;;7753:30;7819:34;7814:2;7799:18;;7792:62;7886:2;7871:18;;7539:356::o;7900:127::-;7961:10;7956:3;7952:20;7949:1;7942:31;7992:4;7989:1;7982:15;8016:4;8013:1;8006:15;8032:125;8097:9;;;8118:10;;;8115:36;;;8131:18;;:::i;8520:380::-;8599:1;8595:12;;;;8642;;;8663:61;;8717:4;8709:6;8705:17;8695:27;;8663:61;8770:2;8762:6;8759:14;8739:18;8736:38;8733:161;;8816:10;8811:3;8807:20;8804:1;8797:31;8851:4;8848:1;8841:15;8879:4;8876:1;8869:15;8733:161;;8520:380;;;:::o;9687:127::-;9748:10;9743:3;9739:20;9736:1;9729:31;9779:4;9776:1;9769:15;9803:4;9800:1;9793:15;9819:135;9858:3;9879:17;;;9876:43;;9899:18;;:::i;:::-;-1:-1:-1;9946:1:1;9935:13;;9819:135::o;11130:407::-;11332:2;11314:21;;;11371:2;11351:18;;;11344:30;11410:34;11405:2;11390:18;;11383:62;-1:-1:-1;;;11476:2:1;11461:18;;11454:41;11527:3;11512:19;;11130:407::o;11542:403::-;11744:2;11726:21;;;11783:2;11763:18;;;11756:30;11822:34;11817:2;11802:18;;11795:62;-1:-1:-1;;;11888:2:1;11873:18;;11866:37;11935:3;11920:19;;11542:403::o;12299:251::-;12369:6;12422:2;12410:9;12401:7;12397:23;12393:32;12390:52;;;12438:1;12435;12428:12;12390:52;12470:9;12464:16;12489:31;12514:5;12489:31;:::i;12864:399::-;13066:2;13048:21;;;13105:2;13085:18;;;13078:30;13144:34;13139:2;13124:18;;13117:62;-1:-1:-1;;;13210:2:1;13195:18;;13188:33;13253:3;13238:19;;12864:399::o;13268:402::-;13470:2;13452:21;;;13509:2;13489:18;;;13482:30;13548:34;13543:2;13528:18;;13521:62;-1:-1:-1;;;13614:2:1;13599:18;;13592:36;13660:3;13645:19;;13268:402::o;13675:607::-;-1:-1:-1;;;;;14034:15:1;;;14016:34;;14081:2;14066:18;;14059:34;;;;14124:2;14109:18;;14102:34;;;;14167:2;14152:18;;14145:34;;;;14216:15;;;14210:3;14195:19;;14188:44;13996:3;14248:19;;14241:35;;;;13965:3;13950:19;;13675:607::o;14287:306::-;14375:6;14383;14391;14444:2;14432:9;14423:7;14419:23;14415:32;14412:52;;;14460:1;14457;14450:12;14412:52;14489:9;14483:16;14473:26;;14539:2;14528:9;14524:18;14518:25;14508:35;;14583:2;14572:9;14568:18;14562:25;14552:35;;14287:306;;;;;:::o;16487:184::-;16557:6;16610:2;16598:9;16589:7;16585:23;16581:32;16578:52;;;16626:1;16623;16616:12;16578:52;-1:-1:-1;16649:16:1;;16487:184;-1:-1:-1;16487:184:1:o;16955:245::-;17022:6;17075:2;17063:9;17054:7;17050:23;17046:32;17043:52;;;17091:1;17088;17081:12;17043:52;17123:9;17117:16;17142:28;17164:5;17142:28;:::i;18750:168::-;18823:9;;;18854;;18871:15;;;18865:22;;18851:37;18841:71;;18892:18;;:::i;18923:217::-;18963:1;18989;18979:132;;19033:10;19028:3;19024:20;19021:1;19014:31;19068:4;19065:1;19058:15;19096:4;19093:1;19086:15;18979:132;-1:-1:-1;19125:9:1;;18923:217::o;19757:245::-;19836:6;19844;19897:2;19885:9;19876:7;19872:23;19868:32;19865:52;;;19913:1;19910;19903:12;19865:52;-1:-1:-1;;19936:16:1;;19992:2;19977:18;;;19971:25;19936:16;;19971:25;;-1:-1:-1;19757:245:1:o;21791:401::-;21993:2;21975:21;;;22032:2;22012:18;;;22005:30;22071:34;22066:2;22051:18;;22044:62;-1:-1:-1;;;22137:2:1;22122:18;;22115:35;22182:3;22167:19;;21791:401::o;22197:399::-;22399:2;22381:21;;;22438:2;22418:18;;;22411:30;22477:34;22472:2;22457:18;;22450:62;-1:-1:-1;;;22543:2:1;22528:18;;22521:33;22586:3;22571:19;;22197:399::o;24196:128::-;24263:9;;;24284:11;;;24281:37;;;24298:18;;:::i;26208:582::-;26507:6;26496:9;26489:25;26550:6;26545:2;26534:9;26530:18;26523:34;26593:3;26588:2;26577:9;26573:18;26566:31;26470:4;26614:57;26666:3;26655:9;26651:19;26643:6;26614:57;:::i;:::-;-1:-1:-1;;;;;26707:32:1;;;;26702:2;26687:18;;26680:60;-1:-1:-1;26771:3:1;26756:19;26749:35;26606:65;26208:582;-1:-1:-1;;;26208:582:1:o

Swarm Source

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