ETH Price: $2,527.39 (-0.03%)
Gas: 0.68 Gwei

Token

World Bet Inu (WBI)
 

Overview

Max Total Supply

1,000,000,000 WBI

Holders

189

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
141,991.297527473060885942 WBI

Value
$0.00
0xEC62C98D554920E0f12d921cA7fb59435caF8A1A
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:
WorldBetInu

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-15
*/

// SPDX-License-Identifier: MIT
/*
 *  https://worldbetinu.io/
 *
 *  TG: https://t.me/WorldBetInu
 *  TW: https://twitter.com/WorldBetInu
 *  MD: https://medium.com/@worldbetinu
 */
pragma solidity 0.8.17;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

contract WorldBetInu 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;
    address public bettingAddress;

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

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

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

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

    uint256 private originalSellOperationsFee;
    uint256 private originalSellLiquidityFee;
    uint256 private originalSellBettingFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBetting;
    bool public sellingEnabled = false;

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

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

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

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedBettingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

    event EnabledSelling();

    constructor() payable ERC20("World Bet Inu", "WBI") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;

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

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

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

        uint256 totalSupply = 1 * 1e9 * 1e18; // 1 billion

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

        buyOperationsFee = 7;
        buyLiquidityFee = 1;
        buyBettingFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBettingFee;

        originalSellOperationsFee = 3;
        originalSellLiquidityFee = 1;
        originalSellBettingFee = 2;

        sellOperationsFee = 11;
        sellLiquidityFee = 2;
        sellBettingFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBettingFee;

        operationsAddress = address(0x2638ec30fF2336cA3AC01A645bdBe9A4eBe32f06);
        bettingAddress = address(0x5EF301a27d743238CbaB8aab71ACbEa1b6AD9E5D);

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

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

        _createInitialSupply(address(0xdead), (totalSupply * 16) / 100); // Burn
        _createInitialSupply(address(this), (totalSupply * 50) / 100); // Tokens for liquidity
        _createInitialSupply(newOwner, (totalSupply * 34) / 100); // Lock

        transferOwnership(newOwner);
    }

    receive() external payable {}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

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

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

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForBetting += (fees * buyBettingFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
                tokensForBetting += (fees * sellBettingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForBetting += (fees * buyBettingFee) / 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 +
            tokensForBetting;

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

        ethForLiquidity -= ethForOperations + ethForStaking;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForBetting = 0;

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

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

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

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

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

    function setBettingAddress(address _bettingAddress) external onlyOwner {
        require(
            _bettingAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        bettingAddress = payable(_bettingAddress);
        emit UpdatedBettingAddress(_bettingAddress);
    }

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

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

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

    function setSellingEnabled() external onlyOwner {
        require(!sellingEnabled, "Selling already enabled!");

        sellingEnabled = true;
        emit EnabledSelling();
    }

    function distribute(
        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 distribute 200 wallets per txn due to gas limits"
        );
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    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 launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(
            blocksForPenalty < 10,
            "Cannot make penalty blocks more than 10"
        );

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

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

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

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            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":"EnabledSelling","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":"UpdatedBettingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","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":"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":"bettingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBettingFee","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":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBettingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_bettingAddress","type":"address"}],"name":"setBettingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSellingEnabled","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":"tokensForBetting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bettingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bettingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600e556013805462ffffff191660019081179091556015805460ff199081169092179055602480549091169055600d60809081526c576f726c642042657420496e7560981b60a052610100604052600360c08181526257424960e81b60e052906200006d8382620009ba565b5060046200007c8282620009ba565b505050600062000091620005b660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004f5f833981519152908290a35033600046600103620000f65750737a250d5630b4cf539739df2c5dacb4c659f2488d62000168565b466005036200011b5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000168565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e8919062000a86565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000271919062000a86565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000a86565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000311906001620005ba565b600a546200032a906001600160a01b031660016200061d565b6b033b2e3c9fd0803ce80000006103e86200034782600562000ace565b62000353919062000aee565b6006556103e86200036682600562000ace565b62000372919062000aee565b60075560646200038482600262000ace565b62000390919062000aee565b600855612710620003a382600562000ace565b620003af919062000aee565b600b5560076017819055600160188190556000601981905591620003d4919062000b11565b620003e0919062000b11565b6016556003601a556001601b556002601c819055600b601e819055601f8290556000602081905591620004139162000b11565b6200041f919062000b11565b601d55600c80546001600160a01b0319908116732638ec30ff2336ca3ac01a645bdbe9a4ebe32f0617909155600d8054909116735ef301a27d743238cbab8aab71acbea1b6ad9e5d17905562000477836001620005ba565b62000484306001620005ba565b6200049361dead6001620005ba565b600c54620004ac906001600160a01b03166001620005ba565b600d54620004c5906001600160a01b03166001620005ba565b600954620004de906001600160a01b03166001620005ba565b620004eb83600162000689565b620004f830600162000689565b6200050761dead600162000689565b600c5462000520906001600160a01b0316600162000689565b600d5462000539906001600160a01b0316600162000689565b60095462000552906001600160a01b0316600162000689565b6200057a61dead60646200056884601062000ace565b62000574919062000aee565b62000733565b6200058e3060646200056884603262000ace565b620005a28360646200056884602262000ace565b620005ad8362000818565b50505062000b27565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556200064d8282620005ba565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006d45760405162461bcd60e51b8152602060048201819052602482015260008051602062004f3f83398151915260448201526064016200015f565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200078b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200015f565b80600260008282546200079f919062000b11565b90915550506001600160a01b03821660009081526020819052604081208054839290620007ce90849062000b11565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008635760405162461bcd60e51b8152602060048201819052602482015260008051602062004f3f83398151915260448201526064016200015f565b6001600160a01b038116620008ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200015f565b6005546040516001600160a01b0380841692169060008051602062004f5f83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200094057607f821691505b6020821081036200096157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009b557600081815260208120601f850160051c81016020861015620009905750805b601f850160051c820191505b81811015620009b1578281556001016200099c565b5050505b505050565b81516001600160401b03811115620009d657620009d662000915565b620009ee81620009e784546200092b565b8462000967565b602080601f83116001811462000a26576000841562000a0d5750858301515b600019600386901b1c1916600185901b178555620009b1565b600085815260208120601f198616915b8281101562000a575788860151825594840194600190910190840162000a36565b508582101562000a765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a9957600080fd5b81516001600160a01b038116811462000ab157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000ae85762000ae862000ab8565b92915050565b60008262000b0c57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000ae85762000ae862000ab8565b6144088062000b376000396000f3fe60806040526004361061042a5760003560e01c806385ecfd2811610229578063c876d0b91161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610c37578063f771cb6514610c4d578063f7a886a214610c67578063f8b45b0514610c7d578063fb002c9714610c9357600080fd5b8063ee40166e14610bb6578063efda116514610bcc578063f11a24d314610bec578063f2fde38b14610c02578063f5648a4f14610c2257600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610b05578063e2f4560514610b4b578063e884f26014610b61578063ea4cfe1214610b76578063eb472fc414610b9657600080fd5b8063c876d0b914610a95578063d257b34f14610aaf578063d85ba06314610acf578063dc3f0d0f14610ae557600080fd5b8063a62068ce116101b1578063bbc0c74211610180578063bbc0c742146109f6578063c024666814610a15578063c17b5b8c14610a35578063c18bc19514610a55578063c7b14ef814610a7557600080fd5b8063a62068ce14610970578063a9059cbb14610986578063b62496f5146109a6578063b9875539146109d657600080fd5b806397e875e8116101f857806397e875e8146108e35780639a5bd2dd146108f95780639a7a23d61461091b578063a28e86d31461093b578063a457c2d71461095057600080fd5b806385ecfd281461086a57806388e765ff1461089a5780638da5cb5b146108b057806395d89b41146108ce57600080fd5b806351f205e41161032f57806370a08231116102b75780638095d564116102865780638095d564146107d457806380b99b8e146107f457806382aa7c681461080a5780638366e79a1461082a57806385b12c7c1461084a57600080fd5b806370a082311461076a578063715018a61461078a578063751039fc1461079f5780637571336a146107b457600080fd5b80635eed98e2116102fe5780635eed98e2146106f357806366d602ae146107085780636a486a8e1461071e5780636b0a894c146107345780636ddd17131461074a57600080fd5b806351f205e41461069157806358a6d531146106a65780635a139dd4146106bd5780635bb988c9146106d357600080fd5b80632929abe6116103b2578063452ed4f111610381578063452ed4f1146106015780634724a2cd14610621578063499b8394146106415780634a62bb65146106615780634f77f6c01461067b57600080fd5b80632929abe6146105855780632be32b61146105a5578063313ce567146105c557806339509351146105e157600080fd5b806310d5de53116103f957806310d5de53146104e05780631805805b1461051057806318160ddd146105305780631a8145bb1461054f57806323b872dd1461056557600080fd5b806306fdde03146104365780630758d92414610461578063095ea7b3146104995780630fcdfb94146104c957600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610ca9565b6040516104589190613c43565b60405180910390f35b34801561046d57600080fd5b50600954610481906001600160a01b031681565b6040516001600160a01b039091168152602001610458565b3480156104a557600080fd5b506104b96104b4366004613ca9565b610d3b565b6040519015158152602001610458565b3480156104d557600080fd5b506104de610d52565b005b3480156104ec57600080fd5b506104b96104fb366004613cd5565b60266020526000908152604090205460ff1681565b34801561051c57600080fd5b506104de61052b366004613cd5565b610e10565b34801561053c57600080fd5b506002545b604051908152602001610458565b34801561055b57600080fd5b5061054160225481565b34801561057157600080fd5b506104b9610580366004613cf9565b610ec6565b34801561059157600080fd5b506104de6105a0366004613e10565b610f70565b3480156105b157600080fd5b506104de6105c0366004613ed2565b6110cf565b3480156105d157600080fd5b5060405160128152602001610458565b3480156105ed57600080fd5b506104b96105fc366004613ca9565b611270565b34801561060d57600080fd5b50600a54610481906001600160a01b031681565b34801561062d57600080fd5b506104de61063c366004613cd5565b6112ac565b34801561064d57600080fd5b506104de61065c366004613cd5565b611346565b34801561066d57600080fd5b506013546104b99060ff1681565b34801561068757600080fd5b50610541601e5481565b34801561069d57600080fd5b506104de6113e0565b3480156106b257600080fd5b50600f5443106104b9565b3480156106c957600080fd5b5061054160175481565b3480156106df57600080fd5b506104de6106ee366004613cd5565b6114e9565b3480156106ff57600080fd5b506104de61159c565b34801561071457600080fd5b5061054160075481565b34801561072a57600080fd5b50610541601d5481565b34801561074057600080fd5b5061054160125481565b34801561075657600080fd5b506013546104b99062010000900460ff1681565b34801561077657600080fd5b50610541610785366004613cd5565b611628565b34801561079657600080fd5b506104de611643565b3480156107ab57600080fd5b506104de6116b7565b3480156107c057600080fd5b506104de6107cf366004613ef9565b6116ed565b3480156107e057600080fd5b506104de6107ef366004613f32565b6117b5565b34801561080057600080fd5b5061054160205481565b34801561081657600080fd5b506104de610825366004613ed2565b611858565b34801561083657600080fd5b506104b9610845366004613f5e565b61194c565b34801561085657600080fd5b506104de610865366004613ed2565b611b86565b34801561087657600080fd5b506104b9610885366004613cd5565b60106020526000908152604090205460ff1681565b3480156108a657600080fd5b5061054160065481565b3480156108bc57600080fd5b506005546001600160a01b0316610481565b3480156108da57600080fd5b5061044b611d73565b3480156108ef57600080fd5b5061054160195481565b34801561090557600080fd5b5061090e611d82565b6040516104589190613fd0565b34801561092757600080fd5b506104de610936366004613ef9565b611de3565b34801561094757600080fd5b506104de611ed7565b34801561095c57600080fd5b506104b961096b366004613ca9565b611f10565b34801561097c57600080fd5b50610541600f5481565b34801561099257600080fd5b506104b96109a1366004613ca9565b611fa9565b3480156109b257600080fd5b506104b96109c1366004613cd5565b60276020526000908152604090205460ff1681565b3480156109e257600080fd5b506104de6109f1366004613fe3565b611fb6565b348015610a0257600080fd5b506013546104b990610100900460ff1681565b348015610a2157600080fd5b506104de610a30366004613ef9565b612075565b348015610a4157600080fd5b506104de610a50366004613f32565b6120fe565b348015610a6157600080fd5b506104de610a70366004613ed2565b6121a1565b348015610a8157600080fd5b50600d54610481906001600160a01b031681565b348015610aa157600080fd5b506015546104b99060ff1681565b348015610abb57600080fd5b506104de610aca366004613ed2565b612340565b348015610adb57600080fd5b5061054160165481565b348015610af157600080fd5b506104de610b00366004613ed2565b61248b565b348015610b1157600080fd5b50610541610b20366004613f5e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b5757600080fd5b50610541600b5481565b348015610b6d57600080fd5b506104de612626565b348015610b8257600080fd5b50600c54610481906001600160a01b031681565b348015610ba257600080fd5b50610481610bb1366004613ed2565b61265c565b348015610bc257600080fd5b50610541600e5481565b348015610bd857600080fd5b506104de610be7366004613ed2565b612686565b348015610bf857600080fd5b5061054160185481565b348015610c0e57600080fd5b506104de610c1d366004613cd5565b612887565b348015610c2e57600080fd5b506104de612972565b348015610c4357600080fd5b50610541601f5481565b348015610c5957600080fd5b506024546104b99060ff1681565b348015610c7357600080fd5b5061054160235481565b348015610c8957600080fd5b5061054160085481565b348015610c9f57600080fd5b5061054160215481565b606060038054610cb890614000565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce490614000565b8015610d315780601f10610d0657610100808354040283529160200191610d31565b820191906000526020600020905b815481529060010190602001808311610d1457829003601f168201915b5050505050905090565b6000610d483384846129de565b5060015b92915050565b6005546001600160a01b03163314610d855760405162461bcd60e51b8152600401610d7c9061403a565b60405180910390fd5b60245460ff1615610dd85760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d7c565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b03163314610e3a5760405162461bcd60e51b8152600401610d7c9061403a565b601354610100900460ff1615610ea45760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610d7c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ed3848484612b02565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f585760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d7c565b610f6585338584036129de565b506001949350505050565b6005546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610d7c9061403a565b8051825114610feb5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d7c565b60c88251106110625760405162461bcd60e51b815260206004820152603960248201527f43616e206f6e6c792064697374726962757465203230302077616c6c6574732060448201527f7065722074786e2064756520746f20676173206c696d697473000000000000006064820152608401610d7c565b60005b82518110156110ca5760008382815181106110825761108261406f565b6020026020010151905060008383815181106110a0576110a061406f565b602002602001015190506110b5338383613661565b505080806110c29061409b565b915050611065565b505050565b6005546001600160a01b031633146110f95760405162461bcd60e51b8152600401610d7c9061403a565b670de0b6b3a76400006103e861110e60025490565b6111199060056140b4565b61112391906140cb565b61112d91906140cb565b81101561118e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610d7c565b670de0b6b3a764000060646111a260025490565b6111ad9060026140b4565b6111b791906140cb565b6111c191906140cb565b8111156112225760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d7c565b61123481670de0b6b3a76400006140b4565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d489185906112a79086906140ed565b6129de565b6005546001600160a01b031633146112d65760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0381166112fc5760405162461bcd60e51b8152600401610d7c90614100565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f3ab9b916478d7dc1270b6f730a941f8138b10b9bc2cc3a9c165ed2708c269a8d90600090a250565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0381166113965760405162461bcd60e51b8152600401610d7c90614100565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610d7c9061403a565b600b5461141630611628565b101561148c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d7c565b600a805460ff60a01b1916600160a01b1790556114a76137b6565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115135760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b03811660009081526010602052604090205460ff1661157b5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d7c565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146115c65760405162461bcd60e51b8152600401610d7c9061403a565b601a546017819055601b546018819055601c546019819055916115e991906140ed565b6115f391906140ed565b601655601a54601e819055601b54601f819055601c5460208190559161161991906140ed565b61162391906140ed565b601d55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461166d5760405162461bcd60e51b8152600401610d7c9061403a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116e15760405162461bcd60e51b8152600401610d7c9061403a565b6013805460ff19169055565b6005546001600160a01b031633146117175760405162461bcd60e51b8152600401610d7c9061403a565b8061178a57600a546001600160a01b039081169083160361178a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d7c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117df5760405162461bcd60e51b8152600401610d7c9061403a565b601783905560188290556019819055806117f983856140ed565b61180391906140ed565b6016819055600a10156110ca5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610d7c565b6005546001600160a01b031633146118825760405162461bcd60e51b8152600401610d7c9061403a565b601354610100900460ff16156118da5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d7c565b600a8111156118fb5760405162461bcd60e51b8152600401610d7c90614146565b6013805462ffff0019166201010017905543600e81905561191d9082906140ed565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119795760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0383166119cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d7c565b6001600160a01b038316301415806119ef5750601354610100900460ff16155b611a585760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d7c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac3919061418d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3a91906141a6565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610d7c9061403a565b601354610100900460ff1615611bd85760405162461bcd60e51b8152600401610d7c906141c3565b600a8110611bf85760405162461bcd60e51b8152600401610d7c90614146565b6013805462ffff0019166201010017905543600e819055611c1a9082906140ed565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611c665760405162461bcd60e51b8152600401610d7c9061420e565b6000611c7130611628565b11611ccd5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d7c565b600954611ce89030906001600160a01b03166112a782611628565b6009546001600160a01b031663f305d7194730611d0481611628565b60008030426040518863ffffffff1660e01b8152600401611d2a96959493929190614251565b60606040518083038185885af1158015611d48573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d6d919061428c565b50505050565b606060048054610cb890614000565b60606011805480602002602001604051908101604052809291908181526020018280548015610d3157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611dbc575050505050905090565b6005546001600160a01b03163314611e0d5760405162461bcd60e51b8152600401610d7c9061403a565b600a546001600160a01b0390811690831603611e915760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d7c565b611e9b82826139be565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611f015760405162461bcd60e51b8152600401610d7c9061403a565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611f925760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d7c565b611f9f33858584036129de565b5060019392505050565b6000610d48338484612b02565b6005546001600160a01b03163314611fe05760405162461bcd60e51b8152600401610d7c9061403a565b8061202d5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610d7c565b601354610100900460ff16156120555760405162461bcd60e51b8152600401610d7c906141c3565b60004711611c665760405162461bcd60e51b8152600401610d7c9061420e565b6005546001600160a01b0316331461209f5760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146121285760405162461bcd60e51b8152600401610d7c9061403a565b601e839055601f82905560208190558061214283856140ed565b61214c91906140ed565b601d819055600c10156110ca5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313225206f72206c6573730000006044820152606401610d7c565b6005546001600160a01b031633146121cb5760405162461bcd60e51b8152600401610d7c9061403a565b670de0b6b3a76400006103e86121e060025490565b6121eb9060056140b4565b6121f591906140cb565b6121ff91906140cb565b8110156122635760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610d7c565b670de0b6b3a7640000606461227760025490565b6122829060026140b4565b61228c91906140cb565b61229691906140cb565b8111156122f95760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610d7c565b61230b81670de0b6b3a76400006140b4565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611265565b6005546001600160a01b0316331461236a5760405162461bcd60e51b8152600401610d7c9061403a565b620186a061237760025490565b6123829060016140b4565b61238c91906140cb565b8110156123f95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d7c565b6103e861240560025490565b6124109060016140b4565b61241a91906140cb565b8111156124865760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d7c565b600b55565b6005546001600160a01b031633146124b55760405162461bcd60e51b8152600401610d7c9061403a565b670de0b6b3a76400006103e86124ca60025490565b6124d59060056140b4565b6124df91906140cb565b6124e991906140cb565b81101561254b5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610d7c565b670de0b6b3a7640000606461255f60025490565b61256a9060026140b4565b61257491906140cb565b61257e91906140cb565b8111156125df5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d7c565b6125f181670de0b6b3a76400006140b4565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611265565b6005546001600160a01b031633146126505760405162461bcd60e51b8152600401610d7c9061403a565b6015805460ff19169055565b6011818154811061266c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146126b05760405162461bcd60e51b8152600401610d7c9061403a565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d919061418d565b90506000811161276f5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610d7c565b600061271061277e84846140b4565b61278891906140cb565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af11580156127df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280391906141a6565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061283e9030908590600190819033904290600401614251565b60408051808303816000875af115801561285c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288091906142ba565b5050505050565b6005546001600160a01b031633146128b15760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0381166129165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d7c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461299c5760405162461bcd60e51b8152600401610d7c9061403a565b604051600090339047908381818185875af1925050503d8060008114611d6d576040519150601f19603f3d011682016040523d82523d6000602084013e611d6d565b6001600160a01b038316612a405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d7c565b6001600160a01b038216612aa15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d7c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b285760405162461bcd60e51b8152600401610d7c906142de565b6001600160a01b038216612b4e5760405162461bcd60e51b8152600401610d7c90614323565b60008111612b9e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d7c565b601354610100900460ff16612c31576001600160a01b03831660009081526025602052604090205460ff1680612bec57506001600160a01b03821660009081526025602052604090205460ff165b612c315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d7c565b600f544310158015612c4a5750601354610100900460ff165b15612d1a576001600160a01b03831660009081526010602052604090205460ff161580612c8457506005546001600160a01b038381169116145b80612c9957506001600160a01b03821661dead145b612d1a5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d7c565b60135460ff1615613140576005546001600160a01b03848116911614801590612d5157506005546001600160a01b03838116911614155b8015612d6857506001600160a01b03821661dead14155b8015612d8d57506001600160a01b03831660009081526025602052604090205460ff16155b8015612db257506001600160a01b03821660009081526025602052604090205460ff16155b156131405760155460ff1615612ecb576009546001600160a01b03838116911614801590612dee5750600a546001600160a01b03838116911614155b15612ecb57612dfe600243614366565b32600090815260146020526040902054108015612e3c5750612e21600243614366565b6001600160a01b038316600090815260146020526040902054105b612ea65760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d7c565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612f0c57506001600160a01b03821660009081526026602052604090205460ff16155b15612fd357600654811115612f745760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d7c565b600854612f8083611628565b612f8a90836140ed565b1115612fce5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d7c565b613140565b6001600160a01b03821660009081526027602052604090205460ff16801561301457506001600160a01b03831660009081526026602052604090205460ff16155b156130c65760245460ff166130615760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610d7c565b600754811115612fce5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d7c565b6001600160a01b03821660009081526026602052604090205460ff16613140576008546130f283611628565b6130fc90836140ed565b11156131405760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d7c565b600061314b30611628565b600b549091508110801590819061316a575060135462010000900460ff165b80156131805750600a54600160a01b900460ff16155b80156131a457506001600160a01b03841660009081526027602052604090205460ff165b156131d257600a805460ff60a01b1916600160a01b1790556131c46137b6565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061321457506001600160a01b03851660009081526025602052604090205460ff165b1561321d575060005b6000811561364d57600f544310806132635750670c7d713b49da00006006546132469190614366565b8510158015613263575043600f54600861326091906140ed565b10155b801561328757506001600160a01b03871660009081526027602052604090205460ff165b80156132ac57506001600160a01b03861660009081526027602052604090205460ff16155b80156132d157506001600160a01b03861660009081526025602052604090205460ff16155b80156132df57506000601654115b1561349657600f544310613306576001600660008282546133009190614366565b90915550505b6001600160a01b03861660009081526010602052604090205460ff166133e6576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601280549192909161335f9084906140ed565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646133f38660636140b4565b6133fd91906140cb565b90506016546018548261341091906140b4565b61341a91906140cb565b6022600082825461342b91906140ed565b909155505060165460175461344090836140b4565b61344a91906140cb565b6021600082825461345b91906140ed565b909155505060165460195461347090836140b4565b61347a91906140cb565b6023600082825461348b91906140ed565b9091555061362f9050565b6001600160a01b03861660009081526027602052604090205460ff1680156134c057506000601d54115b15613552576064601d54866134d591906140b4565b6134df91906140cb565b9050601d54601f54826134f291906140b4565b6134fc91906140cb565b6022600082825461350d91906140ed565b9091555050601d54601e5461352290836140b4565b61352c91906140cb565b6021600082825461353d91906140ed565b9091555050601d5460205461347090836140b4565b6001600160a01b03871660009081526027602052604090205460ff16801561357c57506000601654115b1561362f5760646016548661359191906140b4565b61359b91906140cb565b9050601654601854826135ae91906140b4565b6135b891906140cb565b602260008282546135c991906140ed565b90915550506016546017546135de90836140b4565b6135e891906140cb565b602160008282546135f991906140ed565b909155505060165460195461360e90836140b4565b61361891906140cb565b6023600082825461362991906140ed565b90915550505b801561364057613640873083613661565b61364a8186614366565b94505b613658878787613661565b50505050505050565b6001600160a01b0383166136875760405162461bcd60e51b8152600401610d7c906142de565b6001600160a01b0382166136ad5760405162461bcd60e51b8152600401610d7c90614323565b6001600160a01b038316600090815260208190526040902054818110156137255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d7c565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061375c9084906140ed565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137a891815260200190565b60405180910390a350505050565b60006137c130611628565b905060006023546021546022546137d891906140ed565b6137e291906140ed565b90508115806137ef575080155b156137f8575050565b600b5461380690600a6140b4565b82111561381e57600b5461381b90600a6140b4565b91505b6000806002836022548661383291906140b4565b61383c91906140cb565b61384691906140cb565b905061385a6138558286614366565b6139ec565b60225447908190600090613870906002906140cb565b61387a9087614366565b60215461388790856140b4565b61389191906140cb565b9050600060026022546138a491906140cb565b6138ae9088614366565b6023546138bb90866140b4565b6138c591906140cb565b90506138d181836140ed565b6138db9084614366565b600060228190556021819055602355925084158015906138fb5750600083115b1561390a5761390a8584613b46565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613957576040519150601f19603f3d011682016040523d82523d6000602084013e61395c565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146139ac576040519150601f19603f3d011682016040523d82523d6000602084013e6139b1565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611e9b8282613be0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a2157613a2161406f565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9e9190614379565b81600181518110613ab157613ab161406f565b6001600160a01b039283166020918202929092010152600954613ad791309116846129de565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613b10908590600090869030904290600401614396565b600060405180830381600087803b158015613b2a57600080fd5b505af1158015613b3e573d6000803e3d6000fd5b505050505050565b600954613b5e9030906001600160a01b0316846129de565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613b9d9030908790600090819061dead904290600401614251565b60606040518083038185885af1158015613bbb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612880919061428c565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613c7057858101830151858201604001528201613c54565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613ca657600080fd5b50565b60008060408385031215613cbc57600080fd5b8235613cc781613c91565b946020939093013593505050565b600060208284031215613ce757600080fd5b8135613cf281613c91565b9392505050565b600080600060608486031215613d0e57600080fd5b8335613d1981613c91565b92506020840135613d2981613c91565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613d7957613d79613d3a565b604052919050565b600067ffffffffffffffff821115613d9b57613d9b613d3a565b5060051b60200190565b600082601f830112613db657600080fd5b81356020613dcb613dc683613d81565b613d50565b82815260059290921b84018101918181019086841115613dea57600080fd5b8286015b84811015613e055780358352918301918301613dee565b509695505050505050565b60008060408385031215613e2357600080fd5b823567ffffffffffffffff80821115613e3b57600080fd5b818501915085601f830112613e4f57600080fd5b81356020613e5f613dc683613d81565b82815260059290921b84018101918181019089841115613e7e57600080fd5b948201945b83861015613ea5578535613e9681613c91565b82529482019490820190613e83565b96505086013592505080821115613ebb57600080fd5b50613ec885828601613da5565b9150509250929050565b600060208284031215613ee457600080fd5b5035919050565b8015158114613ca657600080fd5b60008060408385031215613f0c57600080fd5b8235613f1781613c91565b91506020830135613f2781613eeb565b809150509250929050565b600080600060608486031215613f4757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613f7157600080fd5b8235613f7c81613c91565b91506020830135613f2781613c91565b600081518084526020808501945080840160005b83811015613fc55781516001600160a01b031687529582019590820190600101613fa0565b509495945050505050565b602081526000613cf26020830184613f8c565b600060208284031215613ff557600080fd5b8135613cf281613eeb565b600181811c9082168061401457607f821691505b60208210810361403457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016140ad576140ad614085565b5060010190565b8082028115828204841417610d4c57610d4c614085565b6000826140e857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d4c57610d4c614085565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561419f57600080fd5b5051919050565b6000602082840312156141b857600080fd5b8151613cf281613eeb565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156142a157600080fd5b8351925060208401519150604084015190509250925092565b600080604083850312156142cd57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d4c57610d4c614085565b60006020828403121561438b57600080fd5b8151613cf281613c91565b85815284602082015260a0604082015260006143b560a0830186613f8c565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220bb5d6e02ddd5ec76a2bffdd86c35ea79751ed70c714a73de87faa127d05d111164736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061042a5760003560e01c806385ecfd2811610229578063c876d0b91161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610c37578063f771cb6514610c4d578063f7a886a214610c67578063f8b45b0514610c7d578063fb002c9714610c9357600080fd5b8063ee40166e14610bb6578063efda116514610bcc578063f11a24d314610bec578063f2fde38b14610c02578063f5648a4f14610c2257600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610b05578063e2f4560514610b4b578063e884f26014610b61578063ea4cfe1214610b76578063eb472fc414610b9657600080fd5b8063c876d0b914610a95578063d257b34f14610aaf578063d85ba06314610acf578063dc3f0d0f14610ae557600080fd5b8063a62068ce116101b1578063bbc0c74211610180578063bbc0c742146109f6578063c024666814610a15578063c17b5b8c14610a35578063c18bc19514610a55578063c7b14ef814610a7557600080fd5b8063a62068ce14610970578063a9059cbb14610986578063b62496f5146109a6578063b9875539146109d657600080fd5b806397e875e8116101f857806397e875e8146108e35780639a5bd2dd146108f95780639a7a23d61461091b578063a28e86d31461093b578063a457c2d71461095057600080fd5b806385ecfd281461086a57806388e765ff1461089a5780638da5cb5b146108b057806395d89b41146108ce57600080fd5b806351f205e41161032f57806370a08231116102b75780638095d564116102865780638095d564146107d457806380b99b8e146107f457806382aa7c681461080a5780638366e79a1461082a57806385b12c7c1461084a57600080fd5b806370a082311461076a578063715018a61461078a578063751039fc1461079f5780637571336a146107b457600080fd5b80635eed98e2116102fe5780635eed98e2146106f357806366d602ae146107085780636a486a8e1461071e5780636b0a894c146107345780636ddd17131461074a57600080fd5b806351f205e41461069157806358a6d531146106a65780635a139dd4146106bd5780635bb988c9146106d357600080fd5b80632929abe6116103b2578063452ed4f111610381578063452ed4f1146106015780634724a2cd14610621578063499b8394146106415780634a62bb65146106615780634f77f6c01461067b57600080fd5b80632929abe6146105855780632be32b61146105a5578063313ce567146105c557806339509351146105e157600080fd5b806310d5de53116103f957806310d5de53146104e05780631805805b1461051057806318160ddd146105305780631a8145bb1461054f57806323b872dd1461056557600080fd5b806306fdde03146104365780630758d92414610461578063095ea7b3146104995780630fcdfb94146104c957600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610ca9565b6040516104589190613c43565b60405180910390f35b34801561046d57600080fd5b50600954610481906001600160a01b031681565b6040516001600160a01b039091168152602001610458565b3480156104a557600080fd5b506104b96104b4366004613ca9565b610d3b565b6040519015158152602001610458565b3480156104d557600080fd5b506104de610d52565b005b3480156104ec57600080fd5b506104b96104fb366004613cd5565b60266020526000908152604090205460ff1681565b34801561051c57600080fd5b506104de61052b366004613cd5565b610e10565b34801561053c57600080fd5b506002545b604051908152602001610458565b34801561055b57600080fd5b5061054160225481565b34801561057157600080fd5b506104b9610580366004613cf9565b610ec6565b34801561059157600080fd5b506104de6105a0366004613e10565b610f70565b3480156105b157600080fd5b506104de6105c0366004613ed2565b6110cf565b3480156105d157600080fd5b5060405160128152602001610458565b3480156105ed57600080fd5b506104b96105fc366004613ca9565b611270565b34801561060d57600080fd5b50600a54610481906001600160a01b031681565b34801561062d57600080fd5b506104de61063c366004613cd5565b6112ac565b34801561064d57600080fd5b506104de61065c366004613cd5565b611346565b34801561066d57600080fd5b506013546104b99060ff1681565b34801561068757600080fd5b50610541601e5481565b34801561069d57600080fd5b506104de6113e0565b3480156106b257600080fd5b50600f5443106104b9565b3480156106c957600080fd5b5061054160175481565b3480156106df57600080fd5b506104de6106ee366004613cd5565b6114e9565b3480156106ff57600080fd5b506104de61159c565b34801561071457600080fd5b5061054160075481565b34801561072a57600080fd5b50610541601d5481565b34801561074057600080fd5b5061054160125481565b34801561075657600080fd5b506013546104b99062010000900460ff1681565b34801561077657600080fd5b50610541610785366004613cd5565b611628565b34801561079657600080fd5b506104de611643565b3480156107ab57600080fd5b506104de6116b7565b3480156107c057600080fd5b506104de6107cf366004613ef9565b6116ed565b3480156107e057600080fd5b506104de6107ef366004613f32565b6117b5565b34801561080057600080fd5b5061054160205481565b34801561081657600080fd5b506104de610825366004613ed2565b611858565b34801561083657600080fd5b506104b9610845366004613f5e565b61194c565b34801561085657600080fd5b506104de610865366004613ed2565b611b86565b34801561087657600080fd5b506104b9610885366004613cd5565b60106020526000908152604090205460ff1681565b3480156108a657600080fd5b5061054160065481565b3480156108bc57600080fd5b506005546001600160a01b0316610481565b3480156108da57600080fd5b5061044b611d73565b3480156108ef57600080fd5b5061054160195481565b34801561090557600080fd5b5061090e611d82565b6040516104589190613fd0565b34801561092757600080fd5b506104de610936366004613ef9565b611de3565b34801561094757600080fd5b506104de611ed7565b34801561095c57600080fd5b506104b961096b366004613ca9565b611f10565b34801561097c57600080fd5b50610541600f5481565b34801561099257600080fd5b506104b96109a1366004613ca9565b611fa9565b3480156109b257600080fd5b506104b96109c1366004613cd5565b60276020526000908152604090205460ff1681565b3480156109e257600080fd5b506104de6109f1366004613fe3565b611fb6565b348015610a0257600080fd5b506013546104b990610100900460ff1681565b348015610a2157600080fd5b506104de610a30366004613ef9565b612075565b348015610a4157600080fd5b506104de610a50366004613f32565b6120fe565b348015610a6157600080fd5b506104de610a70366004613ed2565b6121a1565b348015610a8157600080fd5b50600d54610481906001600160a01b031681565b348015610aa157600080fd5b506015546104b99060ff1681565b348015610abb57600080fd5b506104de610aca366004613ed2565b612340565b348015610adb57600080fd5b5061054160165481565b348015610af157600080fd5b506104de610b00366004613ed2565b61248b565b348015610b1157600080fd5b50610541610b20366004613f5e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b5757600080fd5b50610541600b5481565b348015610b6d57600080fd5b506104de612626565b348015610b8257600080fd5b50600c54610481906001600160a01b031681565b348015610ba257600080fd5b50610481610bb1366004613ed2565b61265c565b348015610bc257600080fd5b50610541600e5481565b348015610bd857600080fd5b506104de610be7366004613ed2565b612686565b348015610bf857600080fd5b5061054160185481565b348015610c0e57600080fd5b506104de610c1d366004613cd5565b612887565b348015610c2e57600080fd5b506104de612972565b348015610c4357600080fd5b50610541601f5481565b348015610c5957600080fd5b506024546104b99060ff1681565b348015610c7357600080fd5b5061054160235481565b348015610c8957600080fd5b5061054160085481565b348015610c9f57600080fd5b5061054160215481565b606060038054610cb890614000565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce490614000565b8015610d315780601f10610d0657610100808354040283529160200191610d31565b820191906000526020600020905b815481529060010190602001808311610d1457829003601f168201915b5050505050905090565b6000610d483384846129de565b5060015b92915050565b6005546001600160a01b03163314610d855760405162461bcd60e51b8152600401610d7c9061403a565b60405180910390fd5b60245460ff1615610dd85760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d7c565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b03163314610e3a5760405162461bcd60e51b8152600401610d7c9061403a565b601354610100900460ff1615610ea45760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610d7c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ed3848484612b02565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f585760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d7c565b610f6585338584036129de565b506001949350505050565b6005546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610d7c9061403a565b8051825114610feb5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d7c565b60c88251106110625760405162461bcd60e51b815260206004820152603960248201527f43616e206f6e6c792064697374726962757465203230302077616c6c6574732060448201527f7065722074786e2064756520746f20676173206c696d697473000000000000006064820152608401610d7c565b60005b82518110156110ca5760008382815181106110825761108261406f565b6020026020010151905060008383815181106110a0576110a061406f565b602002602001015190506110b5338383613661565b505080806110c29061409b565b915050611065565b505050565b6005546001600160a01b031633146110f95760405162461bcd60e51b8152600401610d7c9061403a565b670de0b6b3a76400006103e861110e60025490565b6111199060056140b4565b61112391906140cb565b61112d91906140cb565b81101561118e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610d7c565b670de0b6b3a764000060646111a260025490565b6111ad9060026140b4565b6111b791906140cb565b6111c191906140cb565b8111156112225760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d7c565b61123481670de0b6b3a76400006140b4565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d489185906112a79086906140ed565b6129de565b6005546001600160a01b031633146112d65760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0381166112fc5760405162461bcd60e51b8152600401610d7c90614100565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f3ab9b916478d7dc1270b6f730a941f8138b10b9bc2cc3a9c165ed2708c269a8d90600090a250565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0381166113965760405162461bcd60e51b8152600401610d7c90614100565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610d7c9061403a565b600b5461141630611628565b101561148c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d7c565b600a805460ff60a01b1916600160a01b1790556114a76137b6565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115135760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b03811660009081526010602052604090205460ff1661157b5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d7c565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146115c65760405162461bcd60e51b8152600401610d7c9061403a565b601a546017819055601b546018819055601c546019819055916115e991906140ed565b6115f391906140ed565b601655601a54601e819055601b54601f819055601c5460208190559161161991906140ed565b61162391906140ed565b601d55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461166d5760405162461bcd60e51b8152600401610d7c9061403a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116e15760405162461bcd60e51b8152600401610d7c9061403a565b6013805460ff19169055565b6005546001600160a01b031633146117175760405162461bcd60e51b8152600401610d7c9061403a565b8061178a57600a546001600160a01b039081169083160361178a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d7c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117df5760405162461bcd60e51b8152600401610d7c9061403a565b601783905560188290556019819055806117f983856140ed565b61180391906140ed565b6016819055600a10156110ca5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610d7c565b6005546001600160a01b031633146118825760405162461bcd60e51b8152600401610d7c9061403a565b601354610100900460ff16156118da5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d7c565b600a8111156118fb5760405162461bcd60e51b8152600401610d7c90614146565b6013805462ffff0019166201010017905543600e81905561191d9082906140ed565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119795760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0383166119cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d7c565b6001600160a01b038316301415806119ef5750601354610100900460ff16155b611a585760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d7c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac3919061418d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3a91906141a6565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610d7c9061403a565b601354610100900460ff1615611bd85760405162461bcd60e51b8152600401610d7c906141c3565b600a8110611bf85760405162461bcd60e51b8152600401610d7c90614146565b6013805462ffff0019166201010017905543600e819055611c1a9082906140ed565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611c665760405162461bcd60e51b8152600401610d7c9061420e565b6000611c7130611628565b11611ccd5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d7c565b600954611ce89030906001600160a01b03166112a782611628565b6009546001600160a01b031663f305d7194730611d0481611628565b60008030426040518863ffffffff1660e01b8152600401611d2a96959493929190614251565b60606040518083038185885af1158015611d48573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d6d919061428c565b50505050565b606060048054610cb890614000565b60606011805480602002602001604051908101604052809291908181526020018280548015610d3157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611dbc575050505050905090565b6005546001600160a01b03163314611e0d5760405162461bcd60e51b8152600401610d7c9061403a565b600a546001600160a01b0390811690831603611e915760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d7c565b611e9b82826139be565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611f015760405162461bcd60e51b8152600401610d7c9061403a565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611f925760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d7c565b611f9f33858584036129de565b5060019392505050565b6000610d48338484612b02565b6005546001600160a01b03163314611fe05760405162461bcd60e51b8152600401610d7c9061403a565b8061202d5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610d7c565b601354610100900460ff16156120555760405162461bcd60e51b8152600401610d7c906141c3565b60004711611c665760405162461bcd60e51b8152600401610d7c9061420e565b6005546001600160a01b0316331461209f5760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146121285760405162461bcd60e51b8152600401610d7c9061403a565b601e839055601f82905560208190558061214283856140ed565b61214c91906140ed565b601d819055600c10156110ca5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313225206f72206c6573730000006044820152606401610d7c565b6005546001600160a01b031633146121cb5760405162461bcd60e51b8152600401610d7c9061403a565b670de0b6b3a76400006103e86121e060025490565b6121eb9060056140b4565b6121f591906140cb565b6121ff91906140cb565b8110156122635760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610d7c565b670de0b6b3a7640000606461227760025490565b6122829060026140b4565b61228c91906140cb565b61229691906140cb565b8111156122f95760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610d7c565b61230b81670de0b6b3a76400006140b4565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611265565b6005546001600160a01b0316331461236a5760405162461bcd60e51b8152600401610d7c9061403a565b620186a061237760025490565b6123829060016140b4565b61238c91906140cb565b8110156123f95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d7c565b6103e861240560025490565b6124109060016140b4565b61241a91906140cb565b8111156124865760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d7c565b600b55565b6005546001600160a01b031633146124b55760405162461bcd60e51b8152600401610d7c9061403a565b670de0b6b3a76400006103e86124ca60025490565b6124d59060056140b4565b6124df91906140cb565b6124e991906140cb565b81101561254b5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610d7c565b670de0b6b3a7640000606461255f60025490565b61256a9060026140b4565b61257491906140cb565b61257e91906140cb565b8111156125df5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d7c565b6125f181670de0b6b3a76400006140b4565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611265565b6005546001600160a01b031633146126505760405162461bcd60e51b8152600401610d7c9061403a565b6015805460ff19169055565b6011818154811061266c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146126b05760405162461bcd60e51b8152600401610d7c9061403a565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d919061418d565b90506000811161276f5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610d7c565b600061271061277e84846140b4565b61278891906140cb565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af11580156127df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280391906141a6565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061283e9030908590600190819033904290600401614251565b60408051808303816000875af115801561285c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288091906142ba565b5050505050565b6005546001600160a01b031633146128b15760405162461bcd60e51b8152600401610d7c9061403a565b6001600160a01b0381166129165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d7c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461299c5760405162461bcd60e51b8152600401610d7c9061403a565b604051600090339047908381818185875af1925050503d8060008114611d6d576040519150601f19603f3d011682016040523d82523d6000602084013e611d6d565b6001600160a01b038316612a405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d7c565b6001600160a01b038216612aa15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d7c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b285760405162461bcd60e51b8152600401610d7c906142de565b6001600160a01b038216612b4e5760405162461bcd60e51b8152600401610d7c90614323565b60008111612b9e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d7c565b601354610100900460ff16612c31576001600160a01b03831660009081526025602052604090205460ff1680612bec57506001600160a01b03821660009081526025602052604090205460ff165b612c315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d7c565b600f544310158015612c4a5750601354610100900460ff165b15612d1a576001600160a01b03831660009081526010602052604090205460ff161580612c8457506005546001600160a01b038381169116145b80612c9957506001600160a01b03821661dead145b612d1a5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d7c565b60135460ff1615613140576005546001600160a01b03848116911614801590612d5157506005546001600160a01b03838116911614155b8015612d6857506001600160a01b03821661dead14155b8015612d8d57506001600160a01b03831660009081526025602052604090205460ff16155b8015612db257506001600160a01b03821660009081526025602052604090205460ff16155b156131405760155460ff1615612ecb576009546001600160a01b03838116911614801590612dee5750600a546001600160a01b03838116911614155b15612ecb57612dfe600243614366565b32600090815260146020526040902054108015612e3c5750612e21600243614366565b6001600160a01b038316600090815260146020526040902054105b612ea65760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d7c565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612f0c57506001600160a01b03821660009081526026602052604090205460ff16155b15612fd357600654811115612f745760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d7c565b600854612f8083611628565b612f8a90836140ed565b1115612fce5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d7c565b613140565b6001600160a01b03821660009081526027602052604090205460ff16801561301457506001600160a01b03831660009081526026602052604090205460ff16155b156130c65760245460ff166130615760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610d7c565b600754811115612fce5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d7c565b6001600160a01b03821660009081526026602052604090205460ff16613140576008546130f283611628565b6130fc90836140ed565b11156131405760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d7c565b600061314b30611628565b600b549091508110801590819061316a575060135462010000900460ff165b80156131805750600a54600160a01b900460ff16155b80156131a457506001600160a01b03841660009081526027602052604090205460ff165b156131d257600a805460ff60a01b1916600160a01b1790556131c46137b6565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061321457506001600160a01b03851660009081526025602052604090205460ff165b1561321d575060005b6000811561364d57600f544310806132635750670c7d713b49da00006006546132469190614366565b8510158015613263575043600f54600861326091906140ed565b10155b801561328757506001600160a01b03871660009081526027602052604090205460ff165b80156132ac57506001600160a01b03861660009081526027602052604090205460ff16155b80156132d157506001600160a01b03861660009081526025602052604090205460ff16155b80156132df57506000601654115b1561349657600f544310613306576001600660008282546133009190614366565b90915550505b6001600160a01b03861660009081526010602052604090205460ff166133e6576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601280549192909161335f9084906140ed565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646133f38660636140b4565b6133fd91906140cb565b90506016546018548261341091906140b4565b61341a91906140cb565b6022600082825461342b91906140ed565b909155505060165460175461344090836140b4565b61344a91906140cb565b6021600082825461345b91906140ed565b909155505060165460195461347090836140b4565b61347a91906140cb565b6023600082825461348b91906140ed565b9091555061362f9050565b6001600160a01b03861660009081526027602052604090205460ff1680156134c057506000601d54115b15613552576064601d54866134d591906140b4565b6134df91906140cb565b9050601d54601f54826134f291906140b4565b6134fc91906140cb565b6022600082825461350d91906140ed565b9091555050601d54601e5461352290836140b4565b61352c91906140cb565b6021600082825461353d91906140ed565b9091555050601d5460205461347090836140b4565b6001600160a01b03871660009081526027602052604090205460ff16801561357c57506000601654115b1561362f5760646016548661359191906140b4565b61359b91906140cb565b9050601654601854826135ae91906140b4565b6135b891906140cb565b602260008282546135c991906140ed565b90915550506016546017546135de90836140b4565b6135e891906140cb565b602160008282546135f991906140ed565b909155505060165460195461360e90836140b4565b61361891906140cb565b6023600082825461362991906140ed565b90915550505b801561364057613640873083613661565b61364a8186614366565b94505b613658878787613661565b50505050505050565b6001600160a01b0383166136875760405162461bcd60e51b8152600401610d7c906142de565b6001600160a01b0382166136ad5760405162461bcd60e51b8152600401610d7c90614323565b6001600160a01b038316600090815260208190526040902054818110156137255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d7c565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061375c9084906140ed565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137a891815260200190565b60405180910390a350505050565b60006137c130611628565b905060006023546021546022546137d891906140ed565b6137e291906140ed565b90508115806137ef575080155b156137f8575050565b600b5461380690600a6140b4565b82111561381e57600b5461381b90600a6140b4565b91505b6000806002836022548661383291906140b4565b61383c91906140cb565b61384691906140cb565b905061385a6138558286614366565b6139ec565b60225447908190600090613870906002906140cb565b61387a9087614366565b60215461388790856140b4565b61389191906140cb565b9050600060026022546138a491906140cb565b6138ae9088614366565b6023546138bb90866140b4565b6138c591906140cb565b90506138d181836140ed565b6138db9084614366565b600060228190556021819055602355925084158015906138fb5750600083115b1561390a5761390a8584613b46565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613957576040519150601f19603f3d011682016040523d82523d6000602084013e61395c565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146139ac576040519150601f19603f3d011682016040523d82523d6000602084013e6139b1565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611e9b8282613be0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a2157613a2161406f565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9e9190614379565b81600181518110613ab157613ab161406f565b6001600160a01b039283166020918202929092010152600954613ad791309116846129de565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613b10908590600090869030904290600401614396565b600060405180830381600087803b158015613b2a57600080fd5b505af1158015613b3e573d6000803e3d6000fd5b505050505050565b600954613b5e9030906001600160a01b0316846129de565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613b9d9030908790600090819061dead904290600401614251565b60606040518083038185885af1158015613bbb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612880919061428c565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613c7057858101830151858201604001528201613c54565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613ca657600080fd5b50565b60008060408385031215613cbc57600080fd5b8235613cc781613c91565b946020939093013593505050565b600060208284031215613ce757600080fd5b8135613cf281613c91565b9392505050565b600080600060608486031215613d0e57600080fd5b8335613d1981613c91565b92506020840135613d2981613c91565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613d7957613d79613d3a565b604052919050565b600067ffffffffffffffff821115613d9b57613d9b613d3a565b5060051b60200190565b600082601f830112613db657600080fd5b81356020613dcb613dc683613d81565b613d50565b82815260059290921b84018101918181019086841115613dea57600080fd5b8286015b84811015613e055780358352918301918301613dee565b509695505050505050565b60008060408385031215613e2357600080fd5b823567ffffffffffffffff80821115613e3b57600080fd5b818501915085601f830112613e4f57600080fd5b81356020613e5f613dc683613d81565b82815260059290921b84018101918181019089841115613e7e57600080fd5b948201945b83861015613ea5578535613e9681613c91565b82529482019490820190613e83565b96505086013592505080821115613ebb57600080fd5b50613ec885828601613da5565b9150509250929050565b600060208284031215613ee457600080fd5b5035919050565b8015158114613ca657600080fd5b60008060408385031215613f0c57600080fd5b8235613f1781613c91565b91506020830135613f2781613eeb565b809150509250929050565b600080600060608486031215613f4757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613f7157600080fd5b8235613f7c81613c91565b91506020830135613f2781613c91565b600081518084526020808501945080840160005b83811015613fc55781516001600160a01b031687529582019590820190600101613fa0565b509495945050505050565b602081526000613cf26020830184613f8c565b600060208284031215613ff557600080fd5b8135613cf281613eeb565b600181811c9082168061401457607f821691505b60208210810361403457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016140ad576140ad614085565b5060010190565b8082028115828204841417610d4c57610d4c614085565b6000826140e857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d4c57610d4c614085565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561419f57600080fd5b5051919050565b6000602082840312156141b857600080fd5b8151613cf281613eeb565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156142a157600080fd5b8351925060208401519150604084015190509250925092565b600080604083850312156142cd57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d4c57610d4c614085565b60006020828403121561438b57600080fd5b8151613cf281613c91565b85815284602082015260a0604082015260006143b560a0830186613f8c565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220bb5d6e02ddd5ec76a2bffdd86c35ea79751ed70c714a73de87faa127d05d111164736f6c63430008110033

Deployed Bytecode Sourcemap

10714:26111:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4181:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10862:27;;;;;;;;;;-1:-1:-1;10862:27:0;;;;-1:-1:-1;;;;;10862:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10862:27:0;567:221:1;5236:210:0;;;;;;;;;;-1:-1:-1;5236:210:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5236:210:0;1249:187:1;33296:185:0;;;;;;;;;;;;;:::i;:::-;;12395:63;;;;;;;;;;-1:-1:-1;12395:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17194:194;;;;;;;;;;-1:-1:-1;17194:194:0;;;;;:::i;:::-;;:::i;4502:108::-;;;;;;;;;;-1:-1:-1;4590:12:0;;4502:108;;;1839:25:1;;;1827:2;1812:18;4502:108:0;1693:177:1;12134:33:0;;;;;;;;;;;;;;;;5454:529;;;;;;;;;;-1:-1:-1;5454:529:0;;;;;:::i;:::-;;:::i;33489:618::-;;;;;;;;;;-1:-1:-1;33489:618:0;;;;;:::i;:::-;;:::i;17555:456::-;;;;;;;;;;-1:-1:-1;17555:456:0;;;;;:::i;:::-;;:::i;4401:93::-;;;;;;;;;;-1:-1:-1;4401:93:0;;4484:2;5150:36:1;;5138:2;5123:18;4401:93:0;5008:184:1;5991:297:0;;;;;;;;;;-1:-1:-1;5991:297:0;;;;;:::i;:::-;;:::i;10896:21::-;;;;;;;;;;-1:-1:-1;10896:21:0;;;;-1:-1:-1;;;;;10896:21:0;;;32346:313;;;;;;;;;;-1:-1:-1;32346:313:0;;;;;:::i;:::-;;:::i;31981:357::-;;;;;;;;;;-1:-1:-1;31981:357:0;;;;;:::i;:::-;;:::i;11309:33::-;;;;;;;;;;-1:-1:-1;11309:33:0;;;;;;;;11978:32;;;;;;;;;;;;;;;;32711:349;;;;;;;;;;;;;:::i;28350:121::-;;;;;;;;;;-1:-1:-1;28445:18:0;;28430:12;:33;28350:121;;11689:31;;;;;;;;;;;;;;;;17005:181;;;;;;;;;;-1:-1:-1;17005:181:0;;;;;:::i;:::-;;:::i;21502:526::-;;;;;;;;;;;;;:::i;10794:28::-;;;;;;;;;;;;;;;;11943;;;;;;;;;;;;;;;;11275:25;;;;;;;;;;;;;;;;11389:31;;;;;;;;;;-1:-1:-1;11389:31:0;;;;;;;;;;;4618:177;;;;;;;;;;-1:-1:-1;4618:177:0;;;;;:::i;:::-;;:::i;8712:150::-;;;;;;;;;;;;;:::i;33112:84::-;;;;;;;;;;;;;:::i;19684:334::-;;;;;;;;;;-1:-1:-1;19684:334:0;;;;;:::i;:::-;;:::i;20631:423::-;;;;;;;;;;-1:-1:-1;20631:423:0;;;;;:::i;:::-;;:::i;12055:29::-;;;;;;;;;;;;;;;;16421:464;;;;;;;;;;-1:-1:-1;16421:464:0;;;;;:::i;:::-;;:::i;31151:567::-;;;;;;;;;;-1:-1:-1;31151:567:0;;;;;:::i;:::-;;:::i;35657:1165::-;;;;;;;;;;-1:-1:-1;35657:1165:0;;;;;:::i;:::-;;:::i;11190:43::-;;;;;;;;;;-1:-1:-1;11190:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10760:27;;;;;;;;;;;;;;;;8498:79;;;;;;;;;;-1:-1:-1;8563:6:0;;-1:-1:-1;;;;;8563:6:0;8498:79;;4289:104;;;;;;;;;;;;;:::i;11764:28::-;;;;;;;;;;;;;;;;16893:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20026:353::-;;;;;;;;;;-1:-1:-1;20026:353:0;;;;;:::i;:::-;;:::i;33204:84::-;;;;;;;;;;;;;:::i;6296:482::-;;;;;;;;;;-1:-1:-1;6296:482:0;;;;;:::i;:::-;;:::i;11150:33::-;;;;;;;;;;;;;;;;4803:216;;;;;;;;;;-1:-1:-1;4803:216:0;;;;;:::i;:::-;;:::i;12616:57::-;;;;;;;;;;-1:-1:-1;12616:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34115:861;;;;;;;;;;-1:-1:-1;34115:861:0;;;;;:::i;:::-;;:::i;11349:33::-;;;;;;;;;;-1:-1:-1;11349:33:0;;;;;;;;;;;22036:182;;;;;;;;;;-1:-1:-1;22036:182:0;;;;;:::i;:::-;;:::i;21062:432::-;;;;;;;;;;-1:-1:-1;21062:432:0;;;;;:::i;:::-;;:::i;18488:461::-;;;;;;;;;;-1:-1:-1;18488:461:0;;;;;:::i;:::-;;:::i;11035:29::-;;;;;;;;;;-1:-1:-1;11035:29:0;;;;-1:-1:-1;;;;;11035:29:0;;;11607:39;;;;;;;;;;-1:-1:-1;11607:39:0;;;;;;;;19019:428;;;;;;;;;;-1:-1:-1;19019:428:0;;;;;:::i;:::-;;:::i;11655:27::-;;;;;;;;;;;;;;;;18019:461;;;;;;;;;;-1:-1:-1;18019:461:0;;;;;:::i;:::-;;:::i;5027:201::-;;;;;;;;;;-1:-1:-1;5027:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5193:18:0;;;5161:7;5193:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5027:201;10954:33;;;;;;;;;;;;;;;;17449:98;;;;;;;;;;;;;:::i;10996:32::-;;;;;;;;;;-1:-1:-1;10996:32:0;;;;-1:-1:-1;;;;;10996:32:0;;;11240:28;;;;;;;;;;-1:-1:-1;11240:28:0;;;;;:::i;:::-;;:::i;11073:37::-;;;;;;;;;;;;;;;;34984:665;;;;;;;;;;-1:-1:-1;34984:665:0;;;;;:::i;:::-;;:::i;11727:30::-;;;;;;;;;;;;;;;;8870:281;;;;;;;;;;-1:-1:-1;8870:281:0;;;;;:::i;:::-;;:::i;31788:185::-;;;;;;;;;;;;;:::i;12017:31::-;;;;;;;;;;;;;;;;12212:34;;;;;;;;;;-1:-1:-1;12212:34:0;;;;;;;;12174:31;;;;;;;;;;;;;;;;10829:24;;;;;;;;;;;;;;;;12093:34;;;;;;;;;;;;;;;;4181:100;4235:13;4268:5;4261:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4181:100;:::o;5236:210::-;5355:4;5377:39;331:10;5400:7;5409:6;5377:8;:39::i;:::-;-1:-1:-1;5434:4:0;5236:210;;;;;:::o;33296:185::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;;;;;;;;;33364:14:::1;::::0;::::1;;33363:15;33355:52;;;::::0;-1:-1:-1;;;33355:52:0;;8555:2:1;33355:52:0::1;::::0;::::1;8537:21:1::0;8594:2;8574:18;;;8567:30;8633:26;8613:18;;;8606:54;8677:18;;33355:52:0::1;8353:348:1::0;33355:52:0::1;33420:14;:21:::0;;-1:-1:-1;;33420:21:0::1;33437:4;33420:21;::::0;;33457:16:::1;::::0;::::1;::::0;33420:14:::1;::::0;33457:16:::1;33296:185::o:0;17194:194::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;17280:13:::1;::::0;::::1;::::0;::::1;;;17279:14;17271:68;;;::::0;-1:-1:-1;;;17271:68:0;;8908:2:1;17271:68:0::1;::::0;::::1;8890:21:1::0;8947:2;8927:18;;;8920:30;8986:34;8966:18;;;8959:62;-1:-1:-1;;;9037:18:1;;;9030:39;9086:19;;17271:68:0::1;8706:405:1::0;17271:68:0::1;17350:9;:30:::0;;-1:-1:-1;;;;;;17350:30:0::1;-1:-1:-1::0;;;;;17350:30:0;;;::::1;::::0;;;::::1;::::0;;17194:194::o;5454:529::-;5594:4;5611:36;5621:6;5629:9;5640:6;5611:9;:36::i;:::-;-1:-1:-1;;;;;5687:19:0;;5660:24;5687:19;;;:11;:19;;;;;;;;331:10;5687:33;;;;;;;;5753:26;;;;5731:116;;;;-1:-1:-1;;;5731:116:0;;9318:2:1;5731:116:0;;;9300:21:1;9357:2;9337:18;;;9330:30;9396:34;9376:18;;;9369:62;-1:-1:-1;;;9447:18:1;;;9440:38;9495:19;;5731:116:0;9116:404:1;5731:116:0;5883:57;5892:6;331:10;5933:6;5914:16;:25;5883:8;:57::i;:::-;-1:-1:-1;5971:4:0;;5454:529;-1:-1:-1;;;;5454:529:0:o;33489:618::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;33664:15:::1;:22;33646:7;:14;:40;33624:120;;;::::0;-1:-1:-1;;;33624:120:0;;9727:2:1;33624:120:0::1;::::0;::::1;9709:21:1::0;9766:2;9746:18;;;9739:30;9805:32;9785:18;;;9778:60;9855:18;;33624:120:0::1;9525:354:1::0;33624:120:0::1;33794:3;33777:7;:14;:20;33755:127;;;::::0;-1:-1:-1;;;33755:127:0;;10086:2:1;33755:127:0::1;::::0;::::1;10068:21:1::0;10125:2;10105:18;;;10098:30;10164:34;10144:18;;;10137:62;10235:27;10215:18;;;10208:55;10280:19;;33755:127:0::1;9884:421:1::0;33755:127:0::1;33898:9;33893:207;33917:7;:14;33913:1;:18;33893:207;;;33953:14;33970:7;33978:1;33970:10;;;;;;;;:::i;:::-;;;;;;;33953:27;;33995:14;34012:15;34028:1;34012:18;;;;;;;;:::i;:::-;;;;;;;33995:35;;34045:43;34061:10;34073:6;34081;34045:15;:43::i;:::-;33938:162;;33933:3;;;;;:::i;:::-;;;;33893:207;;;;33489:618:::0;;:::o;17555:456::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;17692:4:::1;17684;17663:13;4590:12:::0;;;4502:108;17663:13:::1;:17;::::0;17679:1:::1;17663:17;:::i;:::-;17662:26;;;;:::i;:::-;17661:35;;;;:::i;:::-;17651:6;:45;;17629:136;;;::::0;-1:-1:-1;;;17629:136:0;;11311:2:1;17629:136:0::1;::::0;::::1;11293:21:1::0;11350:2;11330:18;;;11323:30;11389:34;11369:18;;;11362:62;-1:-1:-1;;;11440:18:1;;;11433:39;11489:19;;17629:136:0::1;11109:405:1::0;17629:136:0::1;17838:4;17831:3;17810:13;4590:12:::0;;;4502:108;17810:13:::1;:17;::::0;17826:1:::1;17810:17;:::i;:::-;17809:25;;;;:::i;:::-;17808:34;;;;:::i;:::-;17798:6;:44;;17776:135;;;::::0;-1:-1:-1;;;17776:135:0;;11721:2:1;17776:135:0::1;::::0;::::1;11703:21:1::0;11760:2;11740:18;;;11733:30;11799:34;11779:18;;;11772:62;-1:-1:-1;;;11850:18:1;;;11843:39;11899:19;;17776:135:0::1;11519:405:1::0;17776:135:0::1;17937:17;:6:::0;17947::::1;17937:17;:::i;:::-;17922:12;:32:::0;;;17970:33:::1;::::0;1839:25:1;;;17970:33:0::1;::::0;1827:2:1;1812:18;17970:33:0::1;;;;;;;;17555:456:::0;:::o;5991:297::-;331:10;6106:4;6200:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6200:34:0;;;;;;;;;;6106:4;;6128:130;;6178:7;;6200:47;;6237:10;;6200:47;:::i;:::-;6128:8;:130::i;32346:313::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32450:29:0;::::1;32428:117;;;;-1:-1:-1::0;;;32428:117:0::1;;;;;;;:::i;:::-;32556:14;:41:::0;;-1:-1:-1;;;;;;32556:41:0::1;-1:-1:-1::0;;;;;32556:41:0;::::1;::::0;;::::1;::::0;;;32613:38:::1;::::0;::::1;::::0;-1:-1:-1;;32613:38:0::1;32346:313:::0;:::o;31981:357::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32114:32:0;::::1;32092:120;;;;-1:-1:-1::0;;;32092:120:0::1;;;;;;;:::i;:::-;32223:17;:47:::0;;-1:-1:-1;;;;;;32223:47:0::1;-1:-1:-1::0;;;;;32223:47:0;::::1;::::0;;::::1;::::0;;;32286:44:::1;::::0;::::1;::::0;-1:-1:-1;;32286:44:0::1;31981:357:::0;:::o;32711:349::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;32816:18:::1;;32788:24;32806:4;32788:9;:24::i;:::-;:46;;32766:160;;;::::0;;-1:-1:-1;;;32766:160:0;;12668:2:1;32766:160:0::1;::::0;::::1;12650:21:1::0;12687:18;;;12680:30;;;;12746:34;12726:18;;;12719:62;12817:34;12797:18;;;12790:62;12869:19;;32766:160:0::1;12466:428:1::0;32766:160:0::1;32937:8;:15:::0;;-1:-1:-1;;;;32937:15:0::1;-1:-1:-1::0;;;32937:15:0::1;::::0;;32963:10:::1;:8;:10::i;:::-;32984:8;:16:::0;;-1:-1:-1;;;;32984:16:0::1;::::0;;33016:36:::1;::::0;33036:15:::1;1839:25:1::0;;33016:36:0::1;::::0;1827:2:1;1812:18;33016:36:0::1;;;;;;;32711:349::o:0;17005:181::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17086:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17078:62;;;::::0;-1:-1:-1;;;17078:62:0;;13101:2:1;17078:62:0::1;::::0;::::1;13083:21:1::0;13140:2;13120:18;;;13113:30;13179:32;13159:18;;;13152:60;13229:18;;17078:62:0::1;12899:354:1::0;17078:62:0::1;-1:-1:-1::0;;;;;17151:19:0::1;17173:5;17151:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17151:27:0::1;::::0;;17005:181::o;21502:526::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;21575:25:::1;::::0;21556:16:::1;:44:::0;;;21629:24:::1;::::0;21611:15:::1;:42:::0;;;21680:22:::1;::::0;21664:13:::1;:38:::0;;;21680:22;21728:34:::1;::::0;21629:24;21728:34:::1;:::i;:::-;:50;;;;:::i;:::-;21713:12;:65:::0;21811:25:::1;::::0;21791:17:::1;:45:::0;;;21866:24:::1;::::0;21847:16:::1;:43:::0;;;21918:22:::1;::::0;21901:14:::1;:39:::0;;;21918:22;21967:36:::1;::::0;21866:24;21967:36:::1;:::i;:::-;:53;;;;:::i;:::-;21951:13;:69:::0;21502:526::o;4618:177::-;-1:-1:-1;;;;;4769:18:0;4737:7;4769:18;;;;;;;;;;;;4618:177::o;8712:150::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;8805:6:::1;::::0;8784:40:::1;::::0;8821:1:::1;::::0;-1:-1:-1;;;;;8805:6:0::1;::::0;8784:40:::1;::::0;8821:1;;8784:40:::1;8835:6;:19:::0;;-1:-1:-1;;;;;;8835:19:0::1;::::0;;8712:150::o;33112:84::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;33166:14:::1;:22:::0;;-1:-1:-1;;33166:22:0::1;::::0;;33112:84::o;19684:334::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;19804:4:::1;19799:155;;19861:6;::::0;-1:-1:-1;;;;;19861:6:0;;::::1;19851:16:::0;;::::1;::::0;19825:117:::1;;;::::0;-1:-1:-1;;;19825:117:0;;13460:2:1;19825:117:0::1;::::0;::::1;13442:21:1::0;13499:2;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;-1:-1:-1;;;13589:18:1;;;13582:37;13636:19;;19825:117:0::1;13258:403:1::0;19825:117:0::1;-1:-1:-1::0;;;;;19964:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19964:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19684:334::o;20631:423::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;20786:16:::1;:33:::0;;;20830:15:::1;:31:::0;;;20872:13:::1;:27:::0;;;20888:11;20925:34:::1;20848:13:::0;20805:14;20925:34:::1;:::i;:::-;:50;;;;:::i;:::-;20910:12;:65:::0;;;21010:2:::1;-1:-1:-1::0;20994:18:0::1;20986:60;;;::::0;-1:-1:-1;;;20986:60:0;;13868:2:1;20986:60:0::1;::::0;::::1;13850:21:1::0;13907:2;13887:18;;;13880:30;13946:31;13926:18;;;13919:59;13995:18;;20986:60:0::1;13666:353:1::0;16421:464:0;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;16509:13:::1;::::0;::::1;::::0;::::1;;;16508:14;16500:50;;;::::0;-1:-1:-1;;;16500:50:0;;14226:2:1;16500:50:0::1;::::0;::::1;14208:21:1::0;14265:2;14245:18;;;14238:30;14304:25;14284:18;;;14277:53;14347:18;;16500:50:0::1;14024:347:1::0;16500:50:0::1;16603:2;16583:16;:22;;16561:111;;;;-1:-1:-1::0;;;16561:111:0::1;;;;;;;:::i;:::-;16683:13;:20:::0;;-1:-1:-1;;16714:18:0;;;;;16764:12:::1;16743:18;:33:::0;;;16808:37:::1;::::0;16829:16;;16808:37:::1;:::i;:::-;16787:18;:58:::0;16861:16:::1;::::0;::::1;::::0;;;::::1;16421:464:::0;:::o;31151:567::-;8625:6;;31265:10;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31301:20:0;::::1;31293:59;;;::::0;-1:-1:-1;;;31293:59:0;;14986:2:1;31293:59:0::1;::::0;::::1;14968:21:1::0;15025:2;15005:18;;;14998:30;15064:28;15044:18;;;15037:56;15110:18;;31293:59:0::1;14784:350:1::0;31293:59:0::1;-1:-1:-1::0;;;;;31385:23:0;::::1;31403:4;31385:23;;::::0;:41:::1;;-1:-1:-1::0;31413:13:0::1;::::0;::::1;::::0;::::1;;;31412:14;31385:41;31363:143;;;::::0;-1:-1:-1;;;31363:143:0;;15341:2:1;31363:143:0::1;::::0;::::1;15323:21:1::0;15380:2;15360:18;;;15353:30;15419:34;15399:18;;;15392:62;-1:-1:-1;;;15470:18:1;;;15463:50;15530:19;;31363:143:0::1;15139:416:1::0;31363:143:0::1;31544:39;::::0;-1:-1:-1;;;31544:39:0;;31577:4:::1;31544:39;::::0;::::1;731:51:1::0;31517:24:0::1;::::0;-1:-1:-1;;;;;31544:24:0;::::1;::::0;::::1;::::0;704:18:1;;31544:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31602:46;::::0;-1:-1:-1;;;31602:46:0;;-1:-1:-1;;;;;15941:32:1;;;31602:46:0::1;::::0;::::1;15923:51:1::0;15990:18;;;15983:34;;;31517:66:0;;-1:-1:-1;31602:23:0;;::::1;::::0;::::1;::::0;15896:18:1;;31602:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31664;::::0;;-1:-1:-1;;;;;15941:32:1;;15923:51;;16005:2;15990:18;;15983:34;;;31594:54:0;;-1:-1:-1;31664:46:0::1;::::0;15896:18:1;31664:46:0::1;;;;;;;31282:436;31151:567:::0;;;;:::o;35657:1165::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;35738:13:::1;::::0;::::1;::::0;::::1;;;35737:14;35729:70;;;;-1:-1:-1::0;;;35729:70:0::1;;;;;;;:::i;:::-;35851:2;35832:16;:21;35810:110;;;;-1:-1:-1::0;;;35810:110:0::1;;;;;;;:::i;:::-;35968:13;:20:::0;;-1:-1:-1;;35999:18:0;;;;;36049:12:::1;36028:18;:33:::0;;;36093:37:::1;::::0;36114:16;;36093:37:::1;:::i;:::-;36072:18;:58:::0;36146:16:::1;::::0;::::1;::::0;;;::::1;36251:1;36227:21;:25;36205:110;;;;-1:-1:-1::0;;;36205:110:0::1;;;;;;;:::i;:::-;36375:1;36348:24;36366:4;36348:9;:24::i;:::-;:28;36326:116;;;::::0;-1:-1:-1;;;36326:116:0;;17296:2:1;36326:116:0::1;::::0;::::1;17278:21:1::0;17335:2;17315:18;;;17308:30;17374:34;17354:18;;;17347:62;-1:-1:-1;;;17425:18:1;;;17418:36;17471:19;;36326:116:0::1;17094:402:1::0;36326:116:0::1;36487:9;::::0;36455:69:::1;::::0;36472:4:::1;::::0;-1:-1:-1;;;;;36487:9:0::1;36499:24;36472:4:::0;36499:9:::1;:24::i;36455:69::-;36537:9;::::0;-1:-1:-1;;;;;36537:9:0::1;:25;36570:21;36615:4;36635:24;36615:4:::0;36635:9:::1;:24::i;:::-;36674:1;36717::::0;36768:4:::1;36788:15;36537:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35657:1165:::0;:::o;4289:104::-;4345:13;4378:7;4371:14;;;;;:::i;16893:104::-;16942:16;16978:11;16971:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16971:18:0;;;;;;;;;;;;;;;;;;;;;;16893:104;:::o;20026:353::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;20172:6:::1;::::0;-1:-1:-1;;;;;20172:6:0;;::::1;20164:14:::0;;::::1;::::0;20142:121:::1;;;::::0;-1:-1:-1;;;20142:121:0;;18626:2:1;20142:121:0::1;::::0;::::1;18608:21:1::0;18665:2;18645:18;;;18638:30;18704:34;18684:18;;;18677:62;18775:27;18755:18;;;18748:55;18820:19;;20142:121:0::1;18424:421:1::0;20142:121:0::1;20274:41;20303:4;20309:5;20274:28;:41::i;:::-;20331:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20331:40:0;::::1;::::0;::::1;::::0;;;::::1;20026:353:::0;;:::o;33204:84::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;33259:14:::1;:21:::0;;-1:-1:-1;;33259:21:0::1;33276:4;33259:21;::::0;;33204:84::o;6296:482::-;331:10;6416:4;6465:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6465:34:0;;;;;;;;;;6532:35;;;;6510:122;;;;-1:-1:-1;;;6510:122:0;;19052:2:1;6510:122:0;;;19034:21:1;19091:2;19071:18;;;19064:30;19130:34;19110:18;;;19103:62;-1:-1:-1;;;19181:18:1;;;19174:35;19226:19;;6510:122:0;18850:401:1;6510:122:0;6668:67;331:10;6691:7;6719:15;6700:16;:34;6668:8;:67::i;:::-;-1:-1:-1;6766:4:0;;6296:482;-1:-1:-1;;;6296:482:0:o;4803:216::-;4925:4;4947:42;331:10;4971:9;4982:6;4947:9;:42::i;34115:861::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;34187:12:::1;34179:56;;;::::0;-1:-1:-1;;;34179:56:0;;19458:2:1;34179:56:0::1;::::0;::::1;19440:21:1::0;19497:2;19477:18;;;19470:30;19536:33;19516:18;;;19509:61;19587:18;;34179:56:0::1;19256:355:1::0;34179:56:0::1;34255:13;::::0;::::1;::::0;::::1;;;34254:14;34246:70;;;;-1:-1:-1::0;;;34246:70:0::1;;;;;;;:::i;:::-;34405:1;34381:21;:25;34359:110;;;;-1:-1:-1::0;;;34359:110:0::1;;;;;;;:::i;22036:182::-:0;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22121:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22121:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22176:34;;1389:41:1;;;22176:34:0::1;::::0;1362:18:1;22176:34:0::1;;;;;;;22036:182:::0;;:::o;21062:432::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;21218:17:::1;:34:::0;;;21263:16:::1;:32:::0;;;21306:14:::1;:28:::0;;;21323:11;21361:36:::1;21282:13:::0;21238:14;21361:36:::1;:::i;:::-;:53;;;;:::i;:::-;21345:13;:69:::0;;;21450:2:::1;-1:-1:-1::0;21433:19:0::1;21425:61;;;::::0;-1:-1:-1;;;21425:61:0;;19818:2:1;21425:61:0::1;::::0;::::1;19800:21:1::0;19857:2;19837:18;;;19830:30;19896:31;19876:18;;;19869:59;19945:18;;21425:61:0::1;19616:353:1::0;18488:461:0;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;18628:4:::1;18620;18599:13;4590:12:::0;;;4502:108;18599:13:::1;:17;::::0;18615:1:::1;18599:17;:::i;:::-;18598:26;;;;:::i;:::-;18597:35;;;;:::i;:::-;18587:6;:45;;18565:139;;;::::0;-1:-1:-1;;;18565:139:0;;20176:2:1;18565:139:0::1;::::0;::::1;20158:21:1::0;20215:2;20195:18;;;20188:30;20254:34;20234:18;;;20227:62;-1:-1:-1;;;20305:18:1;;;20298:42;20357:19;;18565:139:0::1;19974:408:1::0;18565:139:0::1;18777:4;18770:3;18749:13;4590:12:::0;;;4502:108;18749:13:::1;:17;::::0;18765:1:::1;18749:17;:::i;:::-;18748:25;;;;:::i;:::-;18747:34;;;;:::i;:::-;18737:6;:44;;18715:137;;;::::0;-1:-1:-1;;;18715:137:0;;20589:2:1;18715:137:0::1;::::0;::::1;20571:21:1::0;20628:2;20608:18;;;20601:30;20667:34;20647:18;;;20640:62;-1:-1:-1;;;20718:18:1;;;20711:41;20769:19;;18715:137:0::1;20387:407:1::0;18715:137:0::1;18875:17;:6:::0;18885::::1;18875:17;:::i;:::-;18863:9;:29:::0;;;18908:33:::1;::::0;1839:25:1;;;18908:33:0::1;::::0;1827:2:1;1812:18;18908:33:0::1;1693:177:1::0;19019:428:0;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;19159:6:::1;19138:13;4590:12:::0;;;4502:108;19138:13:::1;:17;::::0;19154:1:::1;19138:17;:::i;:::-;19137:28;;;;:::i;:::-;19124:9;:41;;19102:144;;;::::0;-1:-1:-1;;;19102:144:0;;21001:2:1;19102:144:0::1;::::0;::::1;20983:21:1::0;21040:2;21020:18;;;21013:30;21079:34;21059:18;;;21052:62;-1:-1:-1;;;21130:18:1;;;21123:51;21191:19;;19102:144:0::1;20799:417:1::0;19102:144:0::1;19314:4;19293:13;4590:12:::0;;;4502:108;19293:13:::1;:17;::::0;19309:1:::1;19293:17;:::i;:::-;19292:26;;;;:::i;:::-;19279:9;:39;;19257:141;;;::::0;-1:-1:-1;;;19257:141:0;;21423:2:1;19257:141:0::1;::::0;::::1;21405:21:1::0;21462:2;21442:18;;;21435:30;21501:34;21481:18;;;21474:62;-1:-1:-1;;;21552:18:1;;;21545:50;21612:19;;19257:141:0::1;21221:416:1::0;19257:141:0::1;19409:18;:30:::0;19019:428::o;18019:461::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;18157:4:::1;18149;18128:13;4590:12:::0;;;4502:108;18128:13:::1;:17;::::0;18144:1:::1;18128:17;:::i;:::-;18127:26;;;;:::i;:::-;18126:35;;;;:::i;:::-;18116:6;:45;;18094:137;;;::::0;-1:-1:-1;;;18094:137:0;;21844:2:1;18094:137:0::1;::::0;::::1;21826:21:1::0;21883:2;21863:18;;;21856:30;21922:34;21902:18;;;21895:62;-1:-1:-1;;;21973:18:1;;;21966:40;22023:19;;18094:137:0::1;21642:406:1::0;18094:137:0::1;18304:4;18297:3;18276:13;4590:12:::0;;;4502:108;18276:13:::1;:17;::::0;18292:1:::1;18276:17;:::i;:::-;18275:25;;;;:::i;:::-;18274:34;;;;:::i;:::-;18264:6;:44;;18242:135;;;::::0;-1:-1:-1;;;18242:135:0;;22255:2:1;18242:135:0::1;::::0;::::1;22237:21:1::0;22294:2;22274:18;;;22267:30;22333:34;22313:18;;;22306:62;-1:-1:-1;;;22384:18:1;;;22377:39;22433:19;;18242:135:0::1;22053:405:1::0;18242:135:0::1;18404:17;:6:::0;18414::::1;18404:17;:::i;:::-;18388:13;:33:::0;;;18437:35:::1;::::0;1839:25:1;;;18437:35:0::1;::::0;1827:2:1;1812:18;18437:35:0::1;1693:177:1::0;17449:98:0;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;17511:20:::1;:28:::0;;-1:-1:-1;;17511:28:0::1;::::0;;17449:98::o;11240:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11240:28:0;;-1:-1:-1;11240:28:0;:::o;34984:665::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;35076:6:::1;::::0;35069:39:::1;::::0;-1:-1:-1;;;35069:39:0;;35102:4:::1;35069:39;::::0;::::1;731:51:1::0;35049:17:0::1;::::0;-1:-1:-1;;;;;35076:6:0::1;::::0;35069:24:::1;::::0;704:18:1;;35069:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35049:59;;35141:1;35129:9;:13;35121:50;;;::::0;-1:-1:-1;;;35121:50:0;;22665:2:1;35121:50:0::1;::::0;::::1;22647:21:1::0;22704:2;22684:18;;;22677:30;22743:26;22723:18;;;22716:54;22787:18;;35121:50:0::1;22463:348:1::0;35121:50:0::1;35184:16;35227:5;35204:19;35216:7:::0;35204:9;:19:::1;:::i;:::-;35203:29;;;;:::i;:::-;35319:6;::::0;35343:9:::1;::::0;35312:52:::1;::::0;-1:-1:-1;;;35312:52:0;;-1:-1:-1;;;;;35343:9:0;;::::1;35312:52;::::0;::::1;15923:51:1::0;15990:18;;;15983:34;;;35184:48:0;;-1:-1:-1;35319:6:0::1;::::0;35312:22:::1;::::0;15896:18:1;;35312:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35410:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;35410:231:0;;-1:-1:-1;;;;;35410:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;35461:4:::1;::::0;35481:8;;35410:9;;;;35590:10:::1;::::0;35615:15:::1;::::0;35410:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35038:611;;34984:665:::0;:::o;8870:281::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8973:22:0;::::1;8951:110;;;::::0;-1:-1:-1;;;8951:110:0;;23880:2:1;8951:110:0::1;::::0;::::1;23862:21:1::0;23919:2;23899:18;;;23892:30;23958:34;23938:18;;;23931:62;-1:-1:-1;;;24009:18:1;;;24002:36;24055:19;;8951:110:0::1;23678:402:1::0;8951:110:0::1;9098:6;::::0;9077:38:::1;::::0;-1:-1:-1;;;;;9077:38:0;;::::1;::::0;9098:6:::1;::::0;9077:38:::1;::::0;9098:6:::1;::::0;9077:38:::1;9126:6;:17:::0;;-1:-1:-1;;;;;;9126:17:0::1;-1:-1:-1::0;;;;;9126:17:0;;;::::1;::::0;;;::::1;::::0;;8870:281::o;31788:185::-;8625:6;;-1:-1:-1;;;;;8625:6:0;331:10;8625:22;8617:67;;;;-1:-1:-1;;;8617:67:0;;;;;;;:::i;:::-;31883:82:::1;::::0;31846:12:::1;::::0;31891:10:::1;::::0;31915:21:::1;::::0;31846:12;31883:82;31846:12;31883:82;31915:21;31891:10;31883:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7767:380:::0;-1:-1:-1;;;;;7903:19:0;;7895:68;;;;-1:-1:-1;;;7895:68:0;;24497:2:1;7895:68:0;;;24479:21:1;24536:2;24516:18;;;24509:30;24575:34;24555:18;;;24548:62;-1:-1:-1;;;24626:18:1;;;24619:34;24670:19;;7895:68:0;24295:400:1;7895:68:0;-1:-1:-1;;;;;7982:21:0;;7974:68;;;;-1:-1:-1;;;7974:68:0;;24902:2:1;7974:68:0;;;24884:21:1;24941:2;24921:18;;;24914:30;24980:34;24960:18;;;24953:62;-1:-1:-1;;;25031:18:1;;;25024:32;25073:19;;7974:68:0;24700:398:1;7974:68:0;-1:-1:-1;;;;;8055:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8107:32;;1839:25:1;;;8107:32:0;;1812:18:1;8107:32:0;;;;;;;7767:380;;;:::o;22226:6116::-;-1:-1:-1;;;;;22358:18:0;;22350:68;;;;-1:-1:-1;;;22350:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22437:16:0;;22429:64;;;;-1:-1:-1;;;22429:64:0;;;;;;;:::i;:::-;22521:1;22512:6;:10;22504:52;;;;-1:-1:-1;;;22504:52:0;;26115:2:1;22504:52:0;;;26097:21:1;26154:2;26134:18;;;26127:30;26193:31;26173:18;;;26166:59;26242:18;;22504:52:0;25913:353:1;22504:52:0;22574:13;;;;;;;22569:183;;-1:-1:-1;;;;;22630:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22659:23:0;;;;;;:19;:23;;;;;;;;22630:52;22604:136;;;;-1:-1:-1;;;22604:136:0;;26473:2:1;22604:136:0;;;26455:21:1;26512:2;26492:18;;;26485:30;-1:-1:-1;;;26531:18:1;;;26524:52;26593:18;;22604:136:0;26271:346:1;22604:136:0;28445:18;;28430:12;:33;22768:26;:43;;;;-1:-1:-1;22798:13:0;;;;;;;22768:43;22764:268;;;-1:-1:-1;;;;;22855:17:0;;;;;;:11;:17;;;;;;;;22854:18;;:35;;-1:-1:-1;8563:6:0;;-1:-1:-1;;;;;22876:13:0;;;8563:6;;22876:13;22854:35;:60;;;-1:-1:-1;;;;;;22893:21:0;;22907:6;22893:21;22854:60;22828:192;;;;-1:-1:-1;;;22828:192:0;;26824:2:1;22828:192:0;;;26806:21:1;26863:2;26843:18;;;26836:30;26902:34;26882:18;;;26875:62;26973:34;26953:18;;;26946:62;-1:-1:-1;;;27024:19:1;;;27017:37;27071:19;;22828:192:0;26622:474:1;22828:192:0;23048:14;;;;23044:2217;;;8563:6;;-1:-1:-1;;;;;23101:15:0;;;8563:6;;23101:15;;;;:49;;-1:-1:-1;8563:6:0;;-1:-1:-1;;;;;23137:13:0;;;8563:6;;23137:13;;23101:49;:91;;;;-1:-1:-1;;;;;;23171:21:0;;23185:6;23171:21;;23101:91;:138;;;;-1:-1:-1;;;;;;23214:25:0;;;;;;:19;:25;;;;;;;;23213:26;23101:138;:183;;;;-1:-1:-1;;;;;;23261:23:0;;;;;;:19;:23;;;;;;;;23260:24;23101:183;23079:2171;;;23323:20;;;;23319:692;;;23386:9;;-1:-1:-1;;;;;23372:24:0;;;23386:9;;23372:24;;;;:49;;-1:-1:-1;23414:6:0;;-1:-1:-1;;;;;23400:21:0;;;23414:6;;23400:21;;23372:49;23368:624;;;23563:16;23578:1;23563:12;:16;:::i;:::-;23517:9;23488:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;23684:16:0;23699:1;23684:12;:16;:::i;:::-;-1:-1:-1;;;;;23616:32:0;;;;;;:28;:32;;;;;;:84;23488:212;23450:363;;;;-1:-1:-1;;;23450:363:0;;27436:2:1;23450:363:0;;;27418:21:1;27475:2;27455:18;;;27448:30;27514:34;27494:18;;;27487:62;-1:-1:-1;;;27565:18:1;;;27558:51;27626:19;;23450:363:0;27234:417:1;23450:363:0;23869:9;23840:39;;;;:28;:39;;;;;;23882:12;23840:54;;;;-1:-1:-1;;;;;23921:32:0;;;;;;:47;23368:624;-1:-1:-1;;;;;24085:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;24142:35:0;;;;;;:31;:35;;;;;;;;24141:36;24085:92;24059:1176;;;24264:12;;24254:6;:22;;24220:148;;;;-1:-1:-1;;;24220:148:0;;27858:2:1;24220:148:0;;;27840:21:1;27897:2;27877:18;;;27870:30;27936:34;27916:18;;;27909:62;-1:-1:-1;;;27987:18:1;;;27980:38;28035:19;;24220:148:0;27656:404:1;24220:148:0;24451:9;;24434:13;24444:2;24434:9;:13::i;:::-;24425:22;;:6;:22;:::i;:::-;:35;;24391:140;;;;-1:-1:-1;;;24391:140:0;;28267:2:1;24391:140:0;;;28249:21:1;28306:2;28286:18;;;28279:30;-1:-1:-1;;;28325:18:1;;;28318:49;28384:18;;24391:140:0;28065:343:1;24391:140:0;24059:1176;;;-1:-1:-1;;;;;24629:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;24684:37:0;;;;;;:31;:37;;;;;;;;24683:38;24629:92;24603:632;;;24772:14;;;;24764:46;;;;-1:-1:-1;;;24764:46:0;;28615:2:1;24764:46:0;;;28597:21:1;28654:2;28634:18;;;28627:30;-1:-1:-1;;;28673:18:1;;;28666:49;28732:18;;24764:46:0;28413:343:1;24764:46:0;24877:13;;24867:6;:23;;24833:151;;;;-1:-1:-1;;;24833:151:0;;28963:2:1;24833:151:0;;;28945:21:1;29002:2;28982:18;;;28975:30;29041:34;29021:18;;;29014:62;-1:-1:-1;;;29092:18:1;;;29085:40;29142:19;;24833:151:0;28761:406:1;24603:632:0;-1:-1:-1;;;;;25015:35:0;;;;;;:31;:35;;;;;;;;25010:225;;25135:9;;25118:13;25128:2;25118:9;:13::i;:::-;25109:22;;:6;:22;:::i;:::-;:35;;25075:140;;;;-1:-1:-1;;;25075:140:0;;28267:2:1;25075:140:0;;;28249:21:1;28306:2;28286:18;;;28279:30;-1:-1:-1;;;28325:18:1;;;28318:49;28384:18;;25075:140:0;28065:343:1;25075:140:0;25273:28;25304:24;25322:4;25304:9;:24::i;:::-;25380:18;;25273:55;;-1:-1:-1;25356:42:0;;;;;;;25429:22;;-1:-1:-1;25440:11:0;;;;;;;25429:22;:35;;;;-1:-1:-1;25456:8:0;;-1:-1:-1;;;25456:8:0;;;;25455:9;25429:35;:68;;;;-1:-1:-1;;;;;;25468:29:0;;;;;;:25;:29;;;;;;;;25429:68;25411:196;;;25524:8;:15;;-1:-1:-1;;;;25524:15:0;-1:-1:-1;;;25524:15:0;;;25554:10;:8;:10::i;:::-;25579:8;:16;;-1:-1:-1;;;;25579:16:0;;;25411:196;-1:-1:-1;;;;;25738:25:0;;25619:12;25738:25;;;:19;:25;;;;;;25634:4;;25738:25;;;:52;;-1:-1:-1;;;;;;25767:23:0;;;;;;:19;:23;;;;;;;;25738:52;25734:100;;;-1:-1:-1;25817:5:0;25734:100;25846:12;25951:7;25947:2342;;;28445:18;;28430:12;:33;26034:152;;;;26110:8;26095:12;;:23;;;;:::i;:::-;26085:6;:33;;:100;;;;;26173:12;26147:18;;26168:1;26147:22;;;;:::i;:::-;:38;;26085:100;26033:206;;;;-1:-1:-1;;;;;;26208:31:0;;;;;;:25;:31;;;;;;;;26033:206;:257;;;;-1:-1:-1;;;;;;26261:29:0;;;;;;:25;:29;;;;;;;;26260:30;26033:257;:302;;;;-1:-1:-1;;;;;;26312:23:0;;;;;;:19;:23;;;;;;;;26311:24;26033:302;:339;;;;;26371:1;26356:12;;:16;26033:339;26011:2129;;;28445:18;;28430:12;:33;26407:332;;26718:1;26702:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26407:332:0;-1:-1:-1;;;;;26764:15:0;;;;;;:11;:15;;;;;;;;26759:216;;-1:-1:-1;;;;;26804:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;26804:22:0;26822:4;26804:22;;;;;;26849:10;:15;;26822:4;;26849:10;;:15;;26822:4;;26849:15;:::i;:::-;;;;-1:-1:-1;;26887:11:0;:20;;;;;;;-1:-1:-1;26887:20:0;;;;;;;;-1:-1:-1;;;;;;26887:20:0;-1:-1:-1;;;;;26887:20:0;;;;;;;;26935;;731:51:1;;;26935:20:0;;719:2:1;704:18;26935:20:0;;;;;;;26759:216;27018:3;27003:11;:6;27012:2;27003:11;:::i;:::-;27002:19;;;;:::i;:::-;26995:26;;27089:12;;27070:15;;27063:4;:22;;;;:::i;:::-;27062:39;;;;:::i;:::-;27040:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27171:12:0;;27151:16;;27144:23;;:4;:23;:::i;:::-;27143:40;;;;:::i;:::-;27120:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27247:12:0;;27230:13;;27223:20;;:4;:20;:::i;:::-;27222:37;;;;:::i;:::-;27202:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;26011:2129:0;;-1:-1:-1;26011:2129:0;;-1:-1:-1;;;;;27322:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27371:1;27355:13;;:17;27322:50;27318:822;;;27427:3;27410:13;;27401:6;:22;;;;:::i;:::-;27400:30;;;;:::i;:::-;27393:37;;27499:13;;27479:16;;27472:4;:23;;;;:::i;:::-;27471:41;;;;:::i;:::-;27449:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27625:13:0;;27583:17;;27576:24;;:4;:24;:::i;:::-;27575:63;;;;:::i;:::-;27531:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;27703:13:0;;27685:14;;27678:21;;:4;:21;:::i;27318:822::-;-1:-1:-1;;;;;27778:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27828:1;27813:12;;:16;27778:51;27774:366;;;27883:3;27867:12;;27858:6;:21;;;;:::i;:::-;27857:29;;;;:::i;:::-;27850:36;;27954:12;;27935:15;;27928:4;:22;;;;:::i;:::-;27927:39;;;;:::i;:::-;27905:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28036:12:0;;28016:16;;28009:23;;:4;:23;:::i;:::-;28008:40;;;;:::i;:::-;27985:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28112:12:0;;28095:13;;28088:20;;:4;:20;:::i;:::-;28087:37;;;;:::i;:::-;28067:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;27774:366:0;28160:8;;28156:91;;28189:42;28205:4;28219;28226;28189:15;:42::i;:::-;28263:14;28273:4;28263:14;;:::i;:::-;;;25947:2342;28301:33;28317:4;28323:2;28327:6;28301:15;:33::i;:::-;22339:6003;;;;22226:6116;;;:::o;6786:651::-;-1:-1:-1;;;;;6926:20:0;;6918:70;;;;-1:-1:-1;;;6918:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7007:23:0;;6999:71;;;;-1:-1:-1;;;6999:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7107:17:0;;7083:21;7107:17;;;;;;;;;;;7157:23;;;;7135:111;;;;-1:-1:-1;;;7135:111:0;;29374:2:1;7135:111:0;;;29356:21:1;29413:2;29393:18;;;29386:30;29452:34;29432:18;;;29425:62;-1:-1:-1;;;29503:18:1;;;29496:36;29549:19;;7135:111:0;29172:402:1;7135:111:0;-1:-1:-1;;;;;7282:17:0;;;:9;:17;;;;;;;;;;;7302:22;;;7282:42;;7346:20;;;;;;;;:30;;7318:6;;7282:9;7346:30;;7318:6;;7346:30;:::i;:::-;;;;;;;;7411:9;-1:-1:-1;;;;;7394:35:0;7403:6;-1:-1:-1;;;;;7394:35:0;;7422:6;7394:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7394:35:0;;;;;;;;6907:530;6786:651;;;:::o;29575:1568::-;29614:23;29640:24;29658:4;29640:9;:24::i;:::-;29614:50;;29675:25;29772:16;;29737:19;;29703:18;;:53;;;;:::i;:::-;:85;;;;:::i;:::-;29675:113;-1:-1:-1;29805:20:0;;;:46;;-1:-1:-1;29829:22:0;;29805:46;29801:85;;;29868:7;;29575:1568::o;29801:85::-;29920:18;;:23;;29941:2;29920:23;:::i;:::-;29902:15;:41;29898:115;;;29978:18;;:23;;29999:2;29978:23;:::i;:::-;29960:41;;29898:115;30025:12;30099:23;30212:1;30179:17;30144:18;;30126:15;:36;;;;:::i;:::-;30125:71;;;;:::i;:::-;:88;;;;:::i;:::-;30099:114;-1:-1:-1;30226:51:0;30243:33;30099:114;30243:15;:33;:::i;:::-;30226:16;:51::i;:::-;30491:18;;30311:21;;;;30290:18;;30491:22;;30512:1;;30491:22;:::i;:::-;30470:44;;:17;:44;:::i;:::-;30433:19;;30420:32;;:10;:32;:::i;:::-;30419:96;;;;:::i;:::-;30392:123;;30526:21;30640:1;30619:18;;:22;;;;:::i;:::-;30598:44;;:17;:44;:::i;:::-;30564:16;;30551:29;;:10;:29;:::i;:::-;30550:93;;;;:::i;:::-;30526:117;-1:-1:-1;30675:32:0;30526:117;30675:16;:32;:::i;:::-;30656:51;;;;:::i;:::-;30741:1;30720:18;:22;;;30753:19;:23;;;30787:16;:20;30656:51;-1:-1:-1;30824:19:0;;;;;:42;;;30865:1;30847:15;:19;30824:42;30820:121;;;30883:46;30896:15;30913;30883:12;:46::i;:::-;30975:14;;30967:54;;-1:-1:-1;;;;;30975:14:0;;;;31003:13;;30967:54;;;;31003:13;30975:14;30967:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31054:17:0;;31046:89;;30953:68;;-1:-1:-1;;;;;;31054:17:0;;31099:21;;31046:89;;;;31099:21;31054:17;31046:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29575:1568:0:o;20387:236::-;-1:-1:-1;;;;;20470:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20470:39:0;;;;;;;20520;20470:31;:39;20520:26;:39::i;28479:571::-;28629:16;;;28643:1;28629:16;;;;;;;;28605:21;;28629:16;;;;;;;;;;-1:-1:-1;28629:16:0;28605:40;;28674:4;28656;28661:1;28656:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28656:23:0;;;:7;;;;;;;;;;:23;;;;28700:9;;:16;;;-1:-1:-1;;;28700:16:0;;;;:9;;;;;:14;;:16;;;;;28656:7;;28700:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28690:4;28695:1;28690:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28690:26:0;;;:7;;;;;;;;;:26;28761:9;;28729:56;;28746:4;;28761:9;28773:11;28729:8;:56::i;:::-;28824:9;;:218;;-1:-1:-1;;;28824:218:0;;-1:-1:-1;;;;;28824:9:0;;;;:60;;:218;;28899:11;;28824:9;;28969:4;;28996;;29016:15;;28824:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28534:516;28479:571;:::o;29058:509::-;29238:9;;29206:56;;29223:4;;-1:-1:-1;;;;;29238:9:0;29250:11;29206:8;:56::i;:::-;29305:9;;:254;;-1:-1:-1;;;29305:254:0;;-1:-1:-1;;;;;29305:9:0;;;;:25;;29338:9;;29305:254;;29371:4;;29391:11;;29305:9;;;;29511:6;;29533:15;;29305:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19455:221::-;-1:-1:-1;;;;;19557:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19557:52:0;;;;;;;;;;19625:43;;30590:51:1;;;30657:18;;;30650:50;19625:43:0;;30563:18:1;19625:43:0;;;;;;;19455:221;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:127::-;2397:10;2392:3;2388:20;2385:1;2378:31;2428:4;2425:1;2418:15;2452:4;2449:1;2442:15;2468:275;2539:2;2533:9;2604:2;2585:13;;-1:-1:-1;;2581:27:1;2569:40;;2639:18;2624:34;;2660:22;;;2621:62;2618:88;;;2686:18;;:::i;:::-;2722:2;2715:22;2468:275;;-1:-1:-1;2468:275:1:o;2748:183::-;2808:4;2841:18;2833:6;2830:30;2827:56;;;2863:18;;:::i;:::-;-1:-1:-1;2908:1:1;2904:14;2920:4;2900:25;;2748:183::o;2936:662::-;2990:5;3043:3;3036:4;3028:6;3024:17;3020:27;3010:55;;3061:1;3058;3051:12;3010:55;3097:6;3084:20;3123:4;3147:60;3163:43;3203:2;3163:43;:::i;:::-;3147:60;:::i;:::-;3241:15;;;3327:1;3323:10;;;;3311:23;;3307:32;;;3272:12;;;;3351:15;;;3348:35;;;3379:1;3376;3369:12;3348:35;3415:2;3407:6;3403:15;3427:142;3443:6;3438:3;3435:15;3427:142;;;3509:17;;3497:30;;3547:12;;;;3460;;3427:142;;;-1:-1:-1;3587:5:1;2936:662;-1:-1:-1;;;;;;2936:662:1:o;3603:1215::-;3721:6;3729;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;3838:9;3825:23;3867:18;3908:2;3900:6;3897:14;3894:34;;;3924:1;3921;3914:12;3894:34;3962:6;3951:9;3947:22;3937:32;;4007:7;4000:4;3996:2;3992:13;3988:27;3978:55;;4029:1;4026;4019:12;3978:55;4065:2;4052:16;4087:4;4111:60;4127:43;4167:2;4127:43;:::i;4111:60::-;4205:15;;;4287:1;4283:10;;;;4275:19;;4271:28;;;4236:12;;;;4311:19;;;4308:39;;;4343:1;4340;4333:12;4308:39;4367:11;;;;4387:217;4403:6;4398:3;4395:15;4387:217;;;4483:3;4470:17;4500:31;4525:5;4500:31;:::i;:::-;4544:18;;4420:12;;;;4582;;;;4387:217;;;4623:5;-1:-1:-1;;4666:18:1;;4653:32;;-1:-1:-1;;4697:16:1;;;4694:36;;;4726:1;4723;4716:12;4694:36;;4749:63;4804:7;4793:8;4782:9;4778:24;4749:63;:::i;:::-;4739:73;;;3603:1215;;;;;:::o;4823:180::-;4882:6;4935:2;4923:9;4914:7;4910:23;4906:32;4903:52;;;4951:1;4948;4941:12;4903:52;-1:-1:-1;4974:23:1;;4823:180;-1:-1:-1;4823:180:1:o;5405:118::-;5491:5;5484:13;5477:21;5470:5;5467:32;5457:60;;5513:1;5510;5503:12;5528:382;5593:6;5601;5654:2;5642:9;5633:7;5629:23;5625:32;5622:52;;;5670:1;5667;5660:12;5622:52;5709:9;5696:23;5728:31;5753:5;5728:31;:::i;:::-;5778:5;-1:-1:-1;5835:2:1;5820:18;;5807:32;5848:30;5807:32;5848:30;:::i;:::-;5897:7;5887:17;;;5528:382;;;;;:::o;5915:316::-;5992:6;6000;6008;6061:2;6049:9;6040:7;6036:23;6032:32;6029:52;;;6077:1;6074;6067:12;6029:52;-1:-1:-1;;6100:23:1;;;6170:2;6155:18;;6142:32;;-1:-1:-1;6221:2:1;6206:18;;;6193:32;;5915:316;-1:-1:-1;5915:316:1:o;6236:388::-;6304:6;6312;6365:2;6353:9;6344:7;6340:23;6336:32;6333:52;;;6381:1;6378;6371:12;6333:52;6420:9;6407:23;6439:31;6464:5;6439:31;:::i;:::-;6489:5;-1:-1:-1;6546:2:1;6531:18;;6518:32;6559:33;6518:32;6559:33;:::i;6629:461::-;6682:3;6720:5;6714:12;6747:6;6742:3;6735:19;6773:4;6802:2;6797:3;6793:12;6786:19;;6839:2;6832:5;6828:14;6860:1;6870:195;6884:6;6881:1;6878:13;6870:195;;;6949:13;;-1:-1:-1;;;;;6945:39:1;6933:52;;7005:12;;;;7040:15;;;;6981:1;6899:9;6870:195;;;-1:-1:-1;7081:3:1;;6629:461;-1:-1:-1;;;;;6629:461:1:o;7095:261::-;7274:2;7263:9;7256:21;7237:4;7294:56;7346:2;7335:9;7331:18;7323:6;7294:56;:::i;7361:241::-;7417:6;7470:2;7458:9;7449:7;7445:23;7441:32;7438:52;;;7486:1;7483;7476:12;7438:52;7525:9;7512:23;7544:28;7566:5;7544:28;:::i;7607:380::-;7686:1;7682:12;;;;7729;;;7750:61;;7804:4;7796:6;7792:17;7782:27;;7750:61;7857:2;7849:6;7846:14;7826:18;7823:38;7820:161;;7903:10;7898:3;7894:20;7891:1;7884:31;7938:4;7935:1;7928:15;7966:4;7963:1;7956:15;7820:161;;7607:380;;;:::o;7992:356::-;8194:2;8176:21;;;8213:18;;;8206:30;8272:34;8267:2;8252:18;;8245:62;8339:2;8324:18;;7992:356::o;10310:127::-;10371:10;10366:3;10362:20;10359:1;10352:31;10402:4;10399:1;10392:15;10426:4;10423:1;10416:15;10442:127;10503:10;10498:3;10494:20;10491:1;10484:31;10534:4;10531:1;10524:15;10558:4;10555:1;10548:15;10574:135;10613:3;10634:17;;;10631:43;;10654:18;;:::i;:::-;-1:-1:-1;10701:1:1;10690:13;;10574:135::o;10714:168::-;10787:9;;;10818;;10835:15;;;10829:22;;10815:37;10805:71;;10856:18;;:::i;10887:217::-;10927:1;10953;10943:132;;10997:10;10992:3;10988:20;10985:1;10978:31;11032:4;11029:1;11022:15;11060:4;11057:1;11050:15;10943:132;-1:-1:-1;11089:9:1;;10887:217::o;11929:125::-;11994:9;;;12015:10;;;12012:36;;;12028:18;;:::i;12059:402::-;12261:2;12243:21;;;12300:2;12280:18;;;12273:30;12339:34;12334:2;12319:18;;12312:62;-1:-1:-1;;;12405:2:1;12390:18;;12383:36;12451:3;12436:19;;12059:402::o;14376:403::-;14578:2;14560:21;;;14617:2;14597:18;;;14590:30;14656:34;14651:2;14636:18;;14629:62;-1:-1:-1;;;14722:2:1;14707:18;;14700:37;14769:3;14754:19;;14376:403::o;15560:184::-;15630:6;15683:2;15671:9;15662:7;15658:23;15654:32;15651:52;;;15699:1;15696;15689:12;15651:52;-1:-1:-1;15722:16:1;;15560:184;-1:-1:-1;15560:184:1:o;16028:245::-;16095:6;16148:2;16136:9;16127:7;16123:23;16119:32;16116:52;;;16164:1;16161;16154:12;16116:52;16196:9;16190:16;16215:28;16237:5;16215:28;:::i;16278:407::-;16480:2;16462:21;;;16519:2;16499:18;;;16492:30;16558:34;16553:2;16538:18;;16531:62;-1:-1:-1;;;16624:2:1;16609:18;;16602:41;16675:3;16660:19;;16278:407::o;16690:399::-;16892:2;16874:21;;;16931:2;16911:18;;;16904:30;16970:34;16965:2;16950:18;;16943:62;-1:-1:-1;;;17036:2:1;17021:18;;17014:33;17079:3;17064:19;;16690:399::o;17501:607::-;-1:-1:-1;;;;;17860:15:1;;;17842:34;;17907:2;17892:18;;17885:34;;;;17950:2;17935:18;;17928:34;;;;17993:2;17978:18;;17971:34;;;;18042:15;;;18036:3;18021:19;;18014:44;17822:3;18074:19;;18067:35;;;;17791:3;17776:19;;17501:607::o;18113:306::-;18201:6;18209;18217;18270:2;18258:9;18249:7;18245:23;18241:32;18238:52;;;18286:1;18283;18276:12;18238:52;18315:9;18309:16;18299:26;;18365:2;18354:9;18350:18;18344:25;18334:35;;18409:2;18398:9;18394:18;18388:25;18378:35;;18113:306;;;;;:::o;23428:245::-;23507:6;23515;23568:2;23556:9;23547:7;23543:23;23539:32;23536:52;;;23584:1;23581;23574:12;23536:52;-1:-1:-1;;23607:16:1;;23663:2;23648:18;;;23642:25;23607:16;;23642:25;;-1:-1:-1;23428:245:1:o;25103:401::-;25305:2;25287:21;;;25344:2;25324:18;;;25317:30;25383:34;25378:2;25363:18;;25356:62;-1:-1:-1;;;25449:2:1;25434:18;;25427:35;25494:3;25479:19;;25103:401::o;25509:399::-;25711:2;25693:21;;;25750:2;25730:18;;;25723:30;25789:34;25784:2;25769:18;;25762:62;-1:-1:-1;;;25855:2:1;25840:18;;25833:33;25898:3;25883:19;;25509:399::o;27101:128::-;27168:9;;;27189:11;;;27186:37;;;27203:18;;:::i;29579:251::-;29649:6;29702:2;29690:9;29681:7;29677:23;29673:32;29670:52;;;29718:1;29715;29708:12;29670:52;29750:9;29744:16;29769:31;29794:5;29769:31;:::i;29835:582::-;30134:6;30123:9;30116:25;30177:6;30172:2;30161:9;30157:18;30150:34;30220:3;30215:2;30204:9;30200:18;30193:31;30097:4;30241:57;30293:3;30282:9;30278:19;30270:6;30241:57;:::i;:::-;-1:-1:-1;;;;;30334:32:1;;;;30329:2;30314:18;;30307:60;-1:-1:-1;30398:3:1;30383:19;30376:35;30233:65;29835:582;-1:-1:-1;;;29835:582:1:o

Swarm Source

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