ETH Price: $3,495.48 (+2.55%)

Token

The Alchemy Of Souls (AOS)
 

Overview

Max Total Supply

1,000,000,000 AOS

Holders

221

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,640,000.000000000020430618 AOS

Value
$0.00
0xebf843b9f555ef9dd6623ef90dbc513fca040c33
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:
TheAlchemyOfSouls

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-07
*/

/*
Telegram-  https://t.me/TheAlchemyOfSoulsPortal
Website- https://www.thealchemyofsouls.com
Medium- https://thealchemyofsouls.medium.com/the-components-of-essence-97139a56c151
*/
// SPDX-License-Identifier: MIT                                                                                                                        
pragma solidity 0.8.11;
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 IDexPair {
    function sync() external;
}
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 public _name;
    string public _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);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint 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
        );
        
}

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

contract TheAlchemyOfSouls is ERC20, Ownable {

    IDexRouter public dexRouter;
    address public lpPair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public RouterAddress;
    address public LiquidityReceiver;
    
   
    uint256 private sniperblocks;

    uint256 public tradingActiveBlock = 0;

    uint256 public maxTxnAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;


    uint256 public amountForAutoBuyBack = 0 ether;
    bool public autoBuyBackEnabled = false;
    uint256 public autoBuyBackFrequency = 0 seconds;
    uint256 public lastAutoBuyBackTime;
    
    uint256 public percentForLPMarketing = 0; // 100 = 1%
    bool public lpMarketingEnabled = false;
    uint256 public lpMarketingFrequency = 0 seconds;
    uint256 public lastLpMarketingTime;
    
    uint256 public manualMarketingFrequency = 1 hours;
    uint256 public lastManualLpMarketingTime;

    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // prevent more than 1 buy on same block this may cuz rug check bots to fail but helpful on launches 
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBuyBackFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBuyBackFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBuyBack;
    uint256 public tokensForDev;
    
    /******************/

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

    // 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 ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    event AutoNukeLP(uint256 amount);
    
    event ManualNukeLP(uint256 amount);
    
    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("The Alchemy Of Souls", "AOS") payable {
                
        uint256 _buyMarketingFee = 4;
        uint256 _buyLiquidityFee = 2;
        uint256 _buyBuyBackFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 20;
        uint256 _sellLiquidityFee = 5;
        uint256 _sellBuyBackFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1e8 * 10   * 1e18;
        
        maxTxnAmount = totalSupply * 5 / 1000; // 0.5% of supply max tx will be changed to 1%
        maxWallet = totalSupply * 5 / 1000; // 0.5% maxWallet will be changed to 3%
        swapTokensAtAmount = totalSupply * 5 / 1000; // 0.5% swap amount 

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBuyBackFee = _buyBuyBackFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuyBackFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBuyBackFee = _sellBuyBackFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuyBackFee + sellDevFee;
        
    	marketingWallet = address(owner());
        devWallet = address(owner());

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        
        _createInitialSupply(address(this), totalSupply*100/100);
    }

    receive() external payable {

    
  	}
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;
   
       
    // Toggle Transfer delay
    function ToggleTransferDelay() external onlyOwner {        
        if(transferDelayEnabled==true){
            transferDelayEnabled = false;
        }else{
            transferDelayEnabled = true;
        }
    }
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTxnAmount lower than 0.5%");//1e18 means 10**18 (18 means decimals lol)
        maxTxnAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedmaxTxnAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _MarketingFee, uint256 _liquidityFee, uint256 _buyBackFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _MarketingFee;
        buyLiquidityFee = _liquidityFee;
        buyBuyBackFee = _buyBackFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuyBackFee + buyDevFee;
        require(buyTotalFees <= 100, "Must keep fees at 100% or less");
    }
    
    function updateSellFees(uint256 _MarketingFee, uint256 _liquidityFee, uint256 _buyBackFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _MarketingFee;
        sellLiquidityFee = _liquidityFee;
        sellBuyBackFee = _buyBackFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuyBackFee + sellDevFee;
        require(sellTotalFees <= 100, "Must keep fees at 100% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatemarketingWallet(address newmarketingWallet) external onlyOwner {
        marketingWallet = newmarketingWallet;
    }

    function updateLiquidityReceiverWallet(address newWallet) external onlyOwner {       
        devWallet = newWallet;
    }
    function updateDevWallet(address newWallet) external onlyOwner {
        LiquidityReceiver = newWallet;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    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(!_isBlackListedBot[to], "You have no power here!");
      require(!_isBlackListedBot[tx.origin], "You have no power here!");

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

        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }
        
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping &&
            !_isExcludedFromFees[to] &&
            !_isExcludedFromFees[from]
        ){
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferBlock[tx.origin] < block.number - 1 && _holderLastTransferBlock[to] < block.number - 1, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTxnAmount[to]) {
                        require(amount <= maxTxnAmount, "Buy transfer amount exceeds the maxTxnAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTxnAmount[from]) {
                        require(amount <= maxTxnAmount, "Sell transfer amount exceeds the maxTxnAmount.");
                }
                else if (!_isExcludedmaxTxnAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpMarketingEnabled && block.timestamp >= lastLpMarketingTime + lpMarketingFrequency && !_isExcludedFromFees[from]){
            autoMarketingLiquidityPairTokens();
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && autoBuyBackEnabled && block.timestamp >= lastAutoBuyBackTime + autoBuyBackFrequency && !_isExcludedFromFees[from] && address(this).balance >= amountForAutoBuyBack){
            autoBuyBack(amountForAutoBuyBack);
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to Marketing wallet to allow potential refund.
            if(isSnipersFestActive() && automatedMarketMakerPairs[from]){
                fees = amount * 99 / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForBuyBack += fees * sellBuyBackFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForBuyBack += fees * sellBuyBackFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForBuyBack += fees * buyBuyBackFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        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
            LiquidityReceiver,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForBuyBack + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForBuyBack = ethBalance * tokensForBuyBack / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForBuyBack = 0;
        tokensForDev = 0;

        
        (success,) = address(devWallet).call{value: ethForDev}("");
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // keep leftover ETH for buyback
        
    }

    // 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);
    }
    
    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 amountInWei) external onlyOwner {
        require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks");

        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }

    function setAutoBuyBackSettings(uint256 _frequencyInSeconds, uint256 _buyBackAmount, bool _autoBuyBackEnabled) external onlyOwner {
        require(_frequencyInSeconds >= 30, "cannot set buyback more often than every 30 seconds");
        require(_buyBackAmount <= 2 ether && _buyBackAmount >= 0.05 ether, "Must set auto buyback amount between .05 and 2 ETH");
        autoBuyBackFrequency = _frequencyInSeconds;
        amountForAutoBuyBack = _buyBackAmount;
        autoBuyBackEnabled = _autoBuyBackEnabled;
    }
    
    function setAutoLPMarketingSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP Marketing percent between 1% and 10%");
        lpMarketingFrequency = _frequencyInSeconds;
        percentForLPMarketing = _percent;
        lpMarketingEnabled = _Enabled;
    }
    
    // automated buyback
    function autoBuyBack(uint256 amountInWei) internal {
        
        lastAutoBuyBackTime = block.timestamp;
        
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        
        emit BuyBackTriggered(amountInWei);
    }

    function isSnipersFestActive() public view returns (bool) {
        return tradingActiveBlock >= block.number - sniperblocks;
    }
    
    function autoMarketingLiquidityPairTokens() internal{
        
        lastLpMarketingTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
        
        // calculate amount to Marketing
        uint256 amountToMarketing = liquidityPairBalance * percentForLPMarketing / 10000;
        
        if (amountToMarketing > 0){
            super._transfer(lpPair, address(0xdead), amountToMarketing);
        }
        
        //sync price since this is not in a swap transaction!
        IDexPair pair = IDexPair(lpPair);
        pair.sync();
        emit AutoNukeLP(amountToMarketing);
    }

    function manualMarketingLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(block.timestamp > lastManualLpMarketingTime + manualMarketingFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpMarketingTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
        
        // calculate amount to Marketing
        uint256 amountToMarketing = liquidityPairBalance * percent / 10000;
        
        if (amountToMarketing > 0){
            super._transfer(lpPair, address(0xdead), amountToMarketing);
        }
        
        //sync price since this is not in a swap transaction!
        IDexPair pair = IDexPair(lpPair);
        pair.sync();
        emit ManualNukeLP(amountToMarketing);
    }

    function launch(uint256 _blocknumbers,address _router,address _marketingwallet,address _liquidityreceiver) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        sniperblocks = _blocknumbers;

        //setup wallets
        marketingWallet=_marketingwallet;
        LiquidityReceiver=_liquidityreceiver;
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(LiquidityReceiver, true);

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        lastLpMarketingTime = block.timestamp;

        // initialize router
        RouterAddress = _router;
        IDexRouter _dexRouter = IDexRouter(RouterAddress);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity
        require(address(this).balance > 0, "Must have ETH on contract to launch");
        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");
        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            LiquidityReceiver,
            block.timestamp
        );
    }

    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
    function isBot(address account) public view returns (bool) {
        return  _isBlackListedBot[account];
    }
    function addBotToBlackList(address account) external onlyOwner() {
        require(account != RouterAddress, 'We can not blacklist router.');
        require(account != lpPair, 'We can not blacklist pair address.');
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }
    function BulkaddBotsToBlackList(address[] memory Addresses) external onlyOwner() {
        for (uint256 i; i < Addresses.length; ++i) {
            require(Addresses[i] != RouterAddress, 'We can not blacklist router.');
            require(Addresses[i] != lpPair, 'We can not blacklist pair address.');
            _isBlackListedBot[Addresses[i]] = true;
            _blackListedBots.push(Addresses[i]);
        }
        
    }
    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }
}

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":"uint256","name":"amount","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ManualNukeLP","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":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"Addresses","type":"address[]"}],"name":"BulkaddBotsToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ToggleTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTxnAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","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":[],"name":"amountForAutoBuyBack","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":[],"name":"autoBuyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuyBackFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSnipersFestActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastAutoBuyBackTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpMarketingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpMarketingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocknumbers","type":"uint256"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_marketingwallet","type":"address"},{"internalType":"address","name":"_liquidityreceiver","type":"address"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpMarketingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpMarketingFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualMarketingFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualMarketingLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_buyBackAmount","type":"uint256"},{"internalType":"bool","name":"_autoBuyBackEnabled","type":"bool"}],"name":"setAutoBuyBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPMarketingSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"tokensForBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"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":"_MarketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityReceiverWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MarketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketingWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d81905560118190556012805460ff19908116909155601382905560158290556016805482169055601791909155610e10601955601b805461ffff19169055601d80549091166001179055601460808181527f54686520416c6368656d79204f6620536f756c7300000000000000000000000060a0908152610100604052600360c081815262414f5360e81b60e05292936200009f9290620004be565b508051620000b5906004906020840190620004be565b5050506000620000ca620002b160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600460026000806014600582806b033b2e3c9fd0803ce80000006103e86200014182866200057a565b6200014d91906200059c565b600e556103e8620001608260056200057a565b6200016c91906200059c565b6010556103e86200017f8260056200057a565b6200018b91906200059c565b600f55601f8990556020889055602187905560228690558587620001b08a8c620005bf565b620001bc9190620005bf565b620001c89190620005bf565b601e5560248590556025849055602683905560278290558183620001ed8688620005bf565b620001f99190620005bf565b620002059190620005bf565b602355600554600880546001600160a01b03199081166001600160a01b03909316928317909155600980549091168217905562000244906001620002b5565b62000251306001620002b5565b62000270620002686005546001600160a01b031690565b600162000363565b6200027d30600162000363565b620002a23060646200029084826200057a565b6200029c91906200059c565b620003d9565b50505050505050505062000617565b3390565b6005546001600160a01b03163314620003045760405162461bcd60e51b8152602060048201819052602482015260008051602062004c1783398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620003ae5760405162461bcd60e51b8152602060048201819052602482015260008051602062004c178339815191526044820152606401620002fb565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6001600160a01b038216620004315760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620002fb565b8060026000828254620004459190620005bf565b90915550506001600160a01b0382166000908152602081905260408120805483929062000474908490620005bf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620004cc90620005da565b90600052602060002090601f016020900481019282620004f057600085556200053b565b82601f106200050b57805160ff19168380011785556200053b565b828001600101855582156200053b579182015b828111156200053b5782518255916020019190600101906200051e565b50620005499291506200054d565b5090565b5b808211156200054957600081556001016200054e565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000597576200059762000564565b500290565b600082620005ba57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620005d557620005d562000564565b500190565b600181811c90821680620005ef57607f821691505b602082108114156200061157634e487b7160e01b600052602260045260246000fd5b50919050565b6145f080620006276000396000f3fe60806040526004361061048d5760003560e01c80637bce5a0411610255578063c18bc19511610144578063e2f45605116100c1578063f11a24d311610085578063f11a24d314610d6d578063f2fde38b14610d83578063f5648a4f14610da3578063f637434214610db8578063f8b45b0514610dce578063fc155d1d14610de457600080fd5b8063e2f4560514610cf5578063e513e45a14610d0b578063e7ad9fcd14610d21578063ee40166e14610d41578063ee9623b914610d5757600080fd5b8063d257b34f11610108578063d257b34f14610c44578063d28d885214610c64578063d85ba06314610c79578063db4e7f5414610c8f578063dd62ed3e14610caf57600080fd5b8063c18bc19514610bbe578063c480b4c614610bde578063c7ff080514610bfe578063c876d0b914610c14578063cf46f24c14610c2e57600080fd5b80639c3b4fdc116101d2578063b09f126611610196578063b09f126614610b1f578063b62496f514610b34578063bbc0c74214610b64578063bff7816914610b7e578063c024666814610b9e57600080fd5b80639c3b4fdc14610a9d5780639fccce3214610ab3578063a0d82dc514610ac9578063a457c2d714610adf578063a9059cbb14610aff57600080fd5b806392136913116102195780639213691314610a12578063924de9b714610a285780639509a19714610a4857806395d89b4114610a685780639a7a23d614610a7d57600080fd5b80637bce5a04146109885780637ded4d6a1461099e5780638a0de19f146109be5780638da5cb5b146109d45780638ea5220f146109f257600080fd5b8063395093511161037c57806362a7b83b116102f9578063715018a6116102bd578063715018a6146108ee57806375552ea8146109035780637571336a1461091d57806375f0a8741461093d578063764c4ce51461095d578063781e812f1461097357600080fd5b806362a7b83b14610863578063689b08ca146108795780636a486a8e146108995780636ddd1713146108af57806370a08231146108ce57600080fd5b8063452ed4f111610340578063452ed4f1146107ab5780634fbee193146107cb57806351f205e414610804578063551b4ea6146108195780635f559fba1461083357600080fd5b806339509351146106f25780633bbac579146107125780633fd16d131461074b5780634303443d1461076b57806344f530f91461078b57600080fd5b80631fe70a981161040a5780632e6ed7ef116103ce5780632e6ed7ef1461066b57806330a902e21461068b578063313ce567146106a057806331dbc932146106bc578063338f6d6c146106dc57600080fd5b80631fe70a98146105df578063203e727e146105f557806323b872dd14610615578063256bf92a1461063557806327c8f8351461065557600080fd5b806318160ddd1161045157806318160ddd146105665780631816467f1461057b5780631a221dbb1461059d5780631a8145bb146105b35780631f3fed8f146105c957600080fd5b806306fdde03146104995780630758d924146104c4578063095ea7b3146104fc5780630b166d501461052c578063161c3d931461055057600080fd5b3661049457005b600080fd5b3480156104a557600080fd5b506104ae610e04565b6040516104bb9190613f0f565b60405180910390f35b3480156104d057600080fd5b506006546104e4906001600160a01b031681565b6040516001600160a01b0390911681526020016104bb565b34801561050857600080fd5b5061051c610517366004613f87565b610e96565b60405190151581526020016104bb565b34801561053857600080fd5b50610542602a5481565b6040519081526020016104bb565b34801561055c57600080fd5b5061054260145481565b34801561057257600080fd5b50600254610542565b34801561058757600080fd5b5061059b610596366004613fb3565b610eac565b005b3480156105a957600080fd5b5061054260265481565b3480156105bf57600080fd5b5061054260295481565b3480156105d557600080fd5b5061054260285481565b3480156105eb57600080fd5b5061054260215481565b34801561060157600080fd5b5061059b610610366004613fd7565b610f01565b34801561062157600080fd5b5061051c610630366004613ff0565b610fd6565b34801561064157600080fd5b5061059b610650366004614047565b611080565b34801561066157600080fd5b506104e461dead81565b34801561067757600080fd5b5061059b61068636600461410c565b611244565b34801561069757600080fd5b5061051c6112fd565b3480156106ac57600080fd5b50604051601281526020016104bb565b3480156106c857600080fd5b5061059b6106d7366004613fd7565b611317565b3480156106e857600080fd5b5061054260135481565b3480156106fe57600080fd5b5061051c61070d366004613f87565b611554565b34801561071e57600080fd5b5061051c61072d366004613fb3565b6001600160a01b03166000908152602f602052604090205460ff1690565b34801561075757600080fd5b50600b546104e4906001600160a01b031681565b34801561077757600080fd5b5061059b610786366004613fb3565b611590565b34801561079757600080fd5b5061059b6107a6366004613fb3565b6116ac565b3480156107b757600080fd5b506007546104e4906001600160a01b031681565b3480156107d757600080fd5b5061051c6107e6366004613fb3565b6001600160a01b03166000908152602c602052604090205460ff1690565b34801561081057600080fd5b5061059b6116f8565b34801561082557600080fd5b5060165461051c9060ff1681565b34801561083f57600080fd5b5061051c61084e366004613fb3565b602d6020526000908152604090205460ff1681565b34801561086f57600080fd5b5061054260115481565b34801561088557600080fd5b5061059b61089436600461414e565b611801565b3480156108a557600080fd5b5061054260235481565b3480156108bb57600080fd5b50601b5461051c90610100900460ff1681565b3480156108da57600080fd5b506105426108e9366004613fb3565b61192f565b3480156108fa57600080fd5b5061059b61194a565b34801561090f57600080fd5b5060125461051c9060ff1681565b34801561092957600080fd5b5061059b610938366004614183565b6119be565b34801561094957600080fd5b506008546104e4906001600160a01b031681565b34801561096957600080fd5b5061054260195481565b34801561097f57600080fd5b5061059b611a13565b34801561099457600080fd5b50610542601f5481565b3480156109aa57600080fd5b5061059b6109b9366004613fb3565b611a68565b3480156109ca57600080fd5b5061054260185481565b3480156109e057600080fd5b506005546001600160a01b03166104e4565b3480156109fe57600080fd5b506009546104e4906001600160a01b031681565b348015610a1e57600080fd5b5061054260245481565b348015610a3457600080fd5b5061059b610a433660046141b8565b611c12565b348015610a5457600080fd5b5061059b610a633660046141d3565b611c56565b348015610a7457600080fd5b506104ae61207e565b348015610a8957600080fd5b5061059b610a98366004614183565b61208d565b348015610aa957600080fd5b5061054260225481565b348015610abf57600080fd5b50610542602b5481565b348015610ad557600080fd5b5061054260275481565b348015610aeb57600080fd5b5061051c610afa366004613f87565b612145565b348015610b0b57600080fd5b5061051c610b1a366004613f87565b6121de565b348015610b2b57600080fd5b506104ae6121eb565b348015610b4057600080fd5b5061051c610b4f366004613fb3565b602e6020526000908152604090205460ff1681565b348015610b7057600080fd5b50601b5461051c9060ff1681565b348015610b8a57600080fd5b5061059b610b99366004613fb3565b612279565b348015610baa57600080fd5b5061059b610bb9366004614183565b6122c5565b348015610bca57600080fd5b5061059b610bd9366004613fd7565b61234e565b348015610bea57600080fd5b50600a546104e4906001600160a01b031681565b348015610c0a57600080fd5b5061054260175481565b348015610c2057600080fd5b50601d5461051c9060ff1681565b348015610c3a57600080fd5b50610542600e5481565b348015610c5057600080fd5b5061051c610c5f366004613fd7565b61241d565b348015610c7057600080fd5b506104ae612574565b348015610c8557600080fd5b50610542601e5481565b348015610c9b57600080fd5b5061059b610caa36600461414e565b612581565b348015610cbb57600080fd5b50610542610cca366004614226565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0157600080fd5b50610542600f5481565b348015610d1757600080fd5b5061054260155481565b348015610d2d57600080fd5b5061059b610d3c36600461410c565b6126ba565b348015610d4d57600080fd5b50610542600d5481565b348015610d6357600080fd5b50610542601a5481565b348015610d7957600080fd5b5061054260205481565b348015610d8f57600080fd5b5061059b610d9e366004613fb3565b61276d565b348015610daf57600080fd5b5061059b612858565b348015610dc457600080fd5b5061054260255481565b348015610dda57600080fd5b5061054260105481565b348015610df057600080fd5b5061059b610dff366004613fd7565b61292b565b606060038054610e139061425f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3f9061425f565b8015610e8c5780601f10610e6157610100808354040283529160200191610e8c565b820191906000526020600020905b815481529060010190602001808311610e6f57829003601f168201915b5050505050905090565b6000610ea3338484612b89565b50600192915050565b6005546001600160a01b03163314610edf5760405162461bcd60e51b8152600401610ed69061429a565b60405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610ed69061429a565b670de0b6b3a76400006103e8610f4060025490565b610f4b9060056142e5565b610f559190614304565b610f5f9190614304565b811015610fbe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610ed6565b610fd081670de0b6b3a76400006142e5565b600e5550565b6000610fe3848484612cad565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110685760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ed6565b6110758533858403612b89565b506001949350505050565b6005546001600160a01b031633146110aa5760405162461bcd60e51b8152600401610ed69061429a565b60005b815181101561124057600a5482516001600160a01b03909116908390839081106110d9576110d9614326565b60200260200101516001600160a01b031614156111385760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610ed6565b60075482516001600160a01b039091169083908390811061115b5761115b614326565b60200260200101516001600160a01b0316141561118a5760405162461bcd60e51b8152600401610ed69061433c565b6001602f60008484815181106111a2576111a2614326565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060308282815181106111f5576111f5614326565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790556112398161437e565b90506110ad565b5050565b6005546001600160a01b0316331461126e5760405162461bcd60e51b8152600401610ed69061429a565b601f849055602083905560218290556022819055808261128e8587614399565b6112989190614399565b6112a29190614399565b601e819055606410156112f75760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610ed6565b50505050565b6000600c544361130d91906143b1565b600d541015905090565b6005546001600160a01b031633146113415760405162461bcd60e51b8152600401610ed69061429a565b601954601a546113519190614399565b421161139f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610ed6565b6103e88111156114045760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610ed6565b42601a556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015611453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147791906143c8565b9050600061271061148884846142e5565b6114929190614304565b905080156114b3576007546114b3906001600160a01b031661dead83613755565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156114fd57600080fd5b505af1158015611511573d6000803e3d6000fd5b505050507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d68260405161154691815260200190565b60405180910390a150505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ea391859061158b908690614399565b612b89565b6005546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610ed69061429a565b600a546001600160a01b03828116911614156116185760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610ed6565b6007546001600160a01b03828116911614156116465760405162461bcd60e51b8152600401610ed69061433c565b6001600160a01b03166000818152602f60205260408120805460ff191660019081179091556030805491820181559091527f6ff97a59c90d62cc7236ba3a37cd85351bf564556780cf8c1157a220f31f0cbb0180546001600160a01b0319169091179055565b6005546001600160a01b031633146116d65760405162461bcd60e51b8152600401610ed69061429a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117225760405162461bcd60e51b8152600401610ed69061429a565b600f5461172e3061192f565b10156117a4576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ed6565b6007805460ff60a01b1916600160a01b1790556117bf6138aa565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461182b5760405162461bcd60e51b8152600401610ed69061429a565b6102588310156118995760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610ed6565b6103e882111580156118a9575060015b6119135760405162461bcd60e51b815260206004820152603560248201527f4d75737420736574206175746f204c50204d61726b6574696e672070657263656044820152746e74206265747765656e20312520616e642031302560581b6064820152608401610ed6565b6017929092556015556016805460ff1916911515919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146119745760405162461bcd60e51b8152600401610ed69061429a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119e85760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a3d5760405162461bcd60e51b8152600401610ed69061429a565b601d5460ff16151560011415611a5957601d805460ff19169055565b601d805460ff19166001179055565b6005546001600160a01b03163314611a925760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b0381166000908152602f602052604090205460ff16611afa5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610ed6565b60005b60305481101561124057816001600160a01b031660308281548110611b2457611b24614326565b6000918252602090912001546001600160a01b03161415611c005760308054611b4f906001906143b1565b81548110611b5f57611b5f614326565b600091825260209091200154603080546001600160a01b039092169183908110611b8b57611b8b614326565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602f90915260409020805460ff191690556030805480611bda57611bda6143e1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611c0a8161437e565b915050611afd565b6005546001600160a01b03163314611c3c5760405162461bcd60e51b8152600401610ed69061429a565b601b80549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611c805760405162461bcd60e51b8152600401610ed69061429a565b601b5460ff1615611ce75760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ed6565b600c849055600880546001600160a01b038085166001600160a01b03199283168117909355600b805491851691909216179055611d259060016119be565b600b54611d3c906001600160a01b031660016119be565b601b805461ffff191661010117905543600d5542601855600a80546001600160a01b03199081166001600160a01b03861690811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde91906143f7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f91906143f7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec091906143f7565b600780546001600160a01b0319166001600160a01b03929092169182179055611eea9060016119be565b600754611f01906001600160a01b03166001613b5f565b60004711611f5d5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ed6565b6000611f683061192f565b11611fc45760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ed6565b600654611fdf9030906001600160a01b031661158b8261192f565b6006546001600160a01b031663f305d7194730611ffb8161192f565b600b546040516001600160e01b031960e087901b16815261203193929160009182916001600160a01b0316904290600401614414565b60606040518083038185885af115801561204f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612074919061444f565b5050505050505050565b606060048054610e139061425f565b6005546001600160a01b031633146120b75760405162461bcd60e51b8152600401610ed69061429a565b6007546001600160a01b038381169116141561213b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ed6565b6112408282613b5f565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156121c75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ed6565b6121d43385858403612b89565b5060019392505050565b6000610ea3338484612cad565b600480546121f89061425f565b80601f01602080910402602001604051908101604052809291908181526020018280546122249061425f565b80156122715780601f1061224657610100808354040283529160200191612271565b820191906000526020600020905b81548152906001019060200180831161225457829003601f168201915b505050505081565b6005546001600160a01b031633146122a35760405162461bcd60e51b8152600401610ed69061429a565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122ef5760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123785760405162461bcd60e51b8152600401610ed69061429a565b670de0b6b3a7640000606461238c60025490565b6123979060016142e5565b6123a19190614304565b6123ab9190614304565b8110156124055760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610ed6565b61241781670de0b6b3a76400006142e5565b60105550565b6005546000906001600160a01b0316331461244a5760405162461bcd60e51b8152600401610ed69061429a565b620186a061245760025490565b6124629060016142e5565b61246c9190614304565b8210156124d95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ed6565b6103e86124e560025490565b6124f09060056142e5565b6124fa9190614304565b8211156125665760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ed6565b50600f81905560015b919050565b600380546121f89061425f565b6005546001600160a01b031633146125ab5760405162461bcd60e51b8152600401610ed69061429a565b601e8310156126185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203330207365636f6e647360681b6064820152608401610ed6565b671bc16d674ec800008211158015612637575066b1a2bc2ec500008210155b61269e5760405162461bcd60e51b815260206004820152603260248201527f4d75737420736574206175746f206275796261636b20616d6f756e74206265746044820152710eecacadc405c606a40c2dcc84064408aa8960731b6064820152608401610ed6565b6013929092556011556012805460ff1916911515919091179055565b6005546001600160a01b031633146126e45760405162461bcd60e51b8152600401610ed69061429a565b602484905560258390556026829055602781905580826127048587614399565b61270e9190614399565b6127189190614399565b6023819055606410156112f75760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610ed6565b6005546001600160a01b031633146127975760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b0381166127fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ed6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146128825760405162461bcd60e51b8152600401610ed69061429a565b601b5460ff16156128e95760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610ed6565b604051600090339047908381818185875af1925050503d80600081146112f7576040519150601f19603f3d011682016040523d82523d6000602084013e6112f7565b6005546001600160a01b031633146129555760405162461bcd60e51b8152600401610ed69061429a565b678ac7230489e800008111156129e35760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610ed6565b600060025b604051908082528060200260200182016040528015612a11578160200160208202803683370190505b509050600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b91906143f7565b81600081518110612a9e57612a9e614326565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612ad257612ad2614326565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490612b1a90600090869061dead9042906004016144c1565b6000604051808303818588803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051612b7d91815260200190565b60405180910390a15050565b6001600160a01b038316612beb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ed6565b6001600160a01b038216612c4c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ed6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612cd35760405162461bcd60e51b8152600401610ed6906144f6565b6001600160a01b038216612cf95760405162461bcd60e51b8152600401610ed69061453b565b6001600160a01b0382166000908152602f602052604090205460ff1615612d5c5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610ed6565b326000908152602f602052604090205460ff1615612db65760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610ed6565b80612dcc57612dc783836000613755565b505050565b601b5460ff16612e5a576001600160a01b0383166000908152602c602052604090205460ff1680612e1557506001600160a01b0382166000908152602c602052604090205460ff165b612e5a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ed6565b6005546001600160a01b03848116911614801590612e8657506005546001600160a01b03838116911614155b8015612e9a57506001600160a01b03821615155b8015612eb157506001600160a01b03821661dead14155b8015612ec75750600754600160a01b900460ff16155b8015612eec57506001600160a01b0382166000908152602c602052604090205460ff16155b8015612f1157506001600160a01b0383166000908152602c602052604090205460ff16155b1561326057601d5460ff161561302a576006546001600160a01b03838116911614801590612f4d57506007546001600160a01b03838116911614155b1561302a57612f5d6001436143b1565b326000908152601c6020526040902054108015612f9b5750612f806001436143b1565b6001600160a01b0383166000908152601c6020526040902054105b6130055760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ed6565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff16801561306b57506001600160a01b0382166000908152602d602052604090205460ff16155b1561313757600e548111156130d85760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610ed6565b6010546130e48361192f565b6130ee9083614399565b11156131325760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ed6565b613260565b6001600160a01b0382166000908152602e602052604090205460ff16801561317857506001600160a01b0383166000908152602d602052604090205460ff16155b156131e657600e548111156131325760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610ed6565b6001600160a01b0382166000908152602d602052604090205460ff16613260576010546132128361192f565b61321c9083614399565b11156132605760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ed6565b600061326b3061192f565b600f54909150811080159081906132895750601b54610100900460ff165b801561329f5750600754600160a01b900460ff16155b80156132c457506001600160a01b0385166000908152602e602052604090205460ff16155b80156132e957506001600160a01b0385166000908152602c602052604090205460ff16155b801561330e57506001600160a01b0384166000908152602c602052604090205460ff16155b1561333c576007805460ff60a01b1916600160a01b17905561332e6138aa565b6007805460ff60a01b191690555b600754600160a01b900460ff1615801561336e57506001600160a01b0384166000908152602e602052604090205460ff165b801561337c575060165460ff165b801561339757506017546018546133939190614399565b4210155b80156133bc57506001600160a01b0385166000908152602c602052604090205460ff16155b156133c9576133c9613bb3565b600754600160a01b900460ff161580156133fb57506001600160a01b0384166000908152602e602052604090205460ff165b8015613409575060125460ff165b801561342457506013546014546134209190614399565b4210155b801561344957506001600160a01b0385166000908152602c602052604090205460ff16155b801561345757506011544710155b1561346757613467601154613d06565b6007546001600160a01b0386166000908152602c602052604090205460ff600160a01b9092048216159116806134b557506001600160a01b0385166000908152602c602052604090205460ff165b156134be575060005b60008115613741576134ce6112fd565b80156134f257506001600160a01b0387166000908152602e602052604090205460ff165b156135d75760646135048660636142e5565b61350e9190614304565b90506023546025548261352191906142e5565b61352b9190614304565b6029600082825461353c9190614399565b909155505060235460265461355190836142e5565b61355b9190614304565b602a600082825461356c9190614399565b909155505060235460245461358190836142e5565b61358b9190614304565b6028600082825461359c9190614399565b90915550506023546027546135b190836142e5565b6135bb9190614304565b602b60008282546135cc9190614399565b909155506137239050565b6001600160a01b0386166000908152602e602052604090205460ff16801561360157506000602354115b156136165760646023548661350491906142e5565b6001600160a01b0387166000908152602e602052604090205460ff16801561364057506000601e54115b15613723576064601e548661365591906142e5565b61365f9190614304565b9050601e546020548261367291906142e5565b61367c9190614304565b6029600082825461368d9190614399565b9091555050601e546021546136a290836142e5565b6136ac9190614304565b602a60008282546136bd9190614399565b9091555050601e54601f546136d290836142e5565b6136dc9190614304565b602860008282546136ed9190614399565b9091555050601e5460225461370290836142e5565b61370c9190614304565b602b600082825461371d9190614399565b90915550505b801561373457613734873083613755565b61373e81866143b1565b94505b61374c878787613755565b50505050505050565b6001600160a01b03831661377b5760405162461bcd60e51b8152600401610ed6906144f6565b6001600160a01b0382166137a15760405162461bcd60e51b8152600401610ed69061453b565b6001600160a01b038316600090815260208190526040902054818110156138195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ed6565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613850908490614399565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161389c91815260200190565b60405180910390a350505050565b60006138b53061192f565b90506000602b54602a546028546029546138cf9190614399565b6138d99190614399565b6138e39190614399565b905060008215806138f2575081155b156138fc57505050565b600f5461390a9060146142e5565b83111561392257600f5461391f9060146142e5565b92505b60006002836029548661393591906142e5565b61393f9190614304565b6139499190614304565b9050600061395782866143b1565b90504761396382613d13565b600061396f82476143b1565b9050600060026029546139829190614304565b61398c90886143b1565b60285461399990846142e5565b6139a39190614304565b9050600060026029546139b69190614304565b6139c090896143b1565b602a546139cd90856142e5565b6139d79190614304565b9050600060026029546139ea9190614304565b6139f4908a6143b1565b602b54613a0190866142e5565b613a0b9190614304565b905060008183613a1b86886143b1565b613a2591906143b1565b613a2f91906143b1565b600060298190556028819055602a819055602b8190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114613a91576040519150601f19603f3d011682016040523d82523d6000602084013e613a96565b606091505b5050600854604051919a506001600160a01b0316908590600081818185875af1925050503d8060008114613ae6576040519150601f19603f3d011682016040523d82523d6000602084013e613aeb565b606091505b50909950508715801590613aff5750600081115b15613b5257613b0e8882613e6d565b602954604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5050505050505050505050565b6001600160a01b0382166000818152602e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b426018556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2691906143c8565b9050600061271060155483613c3b91906142e5565b613c459190614304565b90508015613c6657600754613c66906001600160a01b031661dead83613755565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015613cb057600080fd5b505af1158015613cc4573d6000803e3d6000fd5b505050507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa168682604051613cf991815260200190565b60405180910390a1505050565b42601455600060026129e8565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d4857613d48614326565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc591906143f7565b81600181518110613dd857613dd8614326565b6001600160a01b039283166020918202929092010152600654613dfe9130911684612b89565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e3790859060009086903090429060040161457e565b600060405180830381600087803b158015613e5157600080fd5b505af1158015613e65573d6000803e3d6000fd5b505050505050565b600654613e859030906001600160a01b031684612b89565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613ec59230928992600092839216904290600401614414565b60606040518083038185885af1158015613ee3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f08919061444f565b5050505050565b600060208083528351808285015260005b81811015613f3c57858101830151858201604001528201613f20565b81811115613f4e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613f7957600080fd5b50565b803561256f81613f64565b60008060408385031215613f9a57600080fd5b8235613fa581613f64565b946020939093013593505050565b600060208284031215613fc557600080fd5b8135613fd081613f64565b9392505050565b600060208284031215613fe957600080fd5b5035919050565b60008060006060848603121561400557600080fd5b833561401081613f64565b9250602084013561402081613f64565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561405a57600080fd5b823567ffffffffffffffff8082111561407257600080fd5b818501915085601f83011261408657600080fd5b81358181111561409857614098614031565b8060051b604051601f19603f830116810181811085821117156140bd576140bd614031565b6040529182528482019250838101850191888311156140db57600080fd5b938501935b82851015614100576140f185613f7c565b845293850193928501926140e0565b98975050505050505050565b6000806000806080858703121561412257600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461256f57600080fd5b60008060006060848603121561416357600080fd5b833592506020840135915061417a6040850161413e565b90509250925092565b6000806040838503121561419657600080fd5b82356141a181613f64565b91506141af6020840161413e565b90509250929050565b6000602082840312156141ca57600080fd5b613fd08261413e565b600080600080608085870312156141e957600080fd5b8435935060208501356141fb81613f64565b9250604085013561420b81613f64565b9150606085013561421b81613f64565b939692955090935050565b6000806040838503121561423957600080fd5b823561424481613f64565b9150602083013561425481613f64565b809150509250929050565b600181811c9082168061427357607f821691505b6020821081141561429457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156142ff576142ff6142cf565b500290565b60008261432157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604082015261399760f11b606082015260800190565b6000600019821415614392576143926142cf565b5060010190565b600082198211156143ac576143ac6142cf565b500190565b6000828210156143c3576143c36142cf565b500390565b6000602082840312156143da57600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561440957600080fd5b8151613fd081613f64565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561446457600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156144b65781516001600160a01b031687529582019590820190600101614491565b509495945050505050565b8481526080602082015260006144da608083018661447d565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061459d60a083018661447d565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212201bd62860e91f115271ffbdb9f75d35a579e3802191d1af7e8519fcb17264d9fa64736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061048d5760003560e01c80637bce5a0411610255578063c18bc19511610144578063e2f45605116100c1578063f11a24d311610085578063f11a24d314610d6d578063f2fde38b14610d83578063f5648a4f14610da3578063f637434214610db8578063f8b45b0514610dce578063fc155d1d14610de457600080fd5b8063e2f4560514610cf5578063e513e45a14610d0b578063e7ad9fcd14610d21578063ee40166e14610d41578063ee9623b914610d5757600080fd5b8063d257b34f11610108578063d257b34f14610c44578063d28d885214610c64578063d85ba06314610c79578063db4e7f5414610c8f578063dd62ed3e14610caf57600080fd5b8063c18bc19514610bbe578063c480b4c614610bde578063c7ff080514610bfe578063c876d0b914610c14578063cf46f24c14610c2e57600080fd5b80639c3b4fdc116101d2578063b09f126611610196578063b09f126614610b1f578063b62496f514610b34578063bbc0c74214610b64578063bff7816914610b7e578063c024666814610b9e57600080fd5b80639c3b4fdc14610a9d5780639fccce3214610ab3578063a0d82dc514610ac9578063a457c2d714610adf578063a9059cbb14610aff57600080fd5b806392136913116102195780639213691314610a12578063924de9b714610a285780639509a19714610a4857806395d89b4114610a685780639a7a23d614610a7d57600080fd5b80637bce5a04146109885780637ded4d6a1461099e5780638a0de19f146109be5780638da5cb5b146109d45780638ea5220f146109f257600080fd5b8063395093511161037c57806362a7b83b116102f9578063715018a6116102bd578063715018a6146108ee57806375552ea8146109035780637571336a1461091d57806375f0a8741461093d578063764c4ce51461095d578063781e812f1461097357600080fd5b806362a7b83b14610863578063689b08ca146108795780636a486a8e146108995780636ddd1713146108af57806370a08231146108ce57600080fd5b8063452ed4f111610340578063452ed4f1146107ab5780634fbee193146107cb57806351f205e414610804578063551b4ea6146108195780635f559fba1461083357600080fd5b806339509351146106f25780633bbac579146107125780633fd16d131461074b5780634303443d1461076b57806344f530f91461078b57600080fd5b80631fe70a981161040a5780632e6ed7ef116103ce5780632e6ed7ef1461066b57806330a902e21461068b578063313ce567146106a057806331dbc932146106bc578063338f6d6c146106dc57600080fd5b80631fe70a98146105df578063203e727e146105f557806323b872dd14610615578063256bf92a1461063557806327c8f8351461065557600080fd5b806318160ddd1161045157806318160ddd146105665780631816467f1461057b5780631a221dbb1461059d5780631a8145bb146105b35780631f3fed8f146105c957600080fd5b806306fdde03146104995780630758d924146104c4578063095ea7b3146104fc5780630b166d501461052c578063161c3d931461055057600080fd5b3661049457005b600080fd5b3480156104a557600080fd5b506104ae610e04565b6040516104bb9190613f0f565b60405180910390f35b3480156104d057600080fd5b506006546104e4906001600160a01b031681565b6040516001600160a01b0390911681526020016104bb565b34801561050857600080fd5b5061051c610517366004613f87565b610e96565b60405190151581526020016104bb565b34801561053857600080fd5b50610542602a5481565b6040519081526020016104bb565b34801561055c57600080fd5b5061054260145481565b34801561057257600080fd5b50600254610542565b34801561058757600080fd5b5061059b610596366004613fb3565b610eac565b005b3480156105a957600080fd5b5061054260265481565b3480156105bf57600080fd5b5061054260295481565b3480156105d557600080fd5b5061054260285481565b3480156105eb57600080fd5b5061054260215481565b34801561060157600080fd5b5061059b610610366004613fd7565b610f01565b34801561062157600080fd5b5061051c610630366004613ff0565b610fd6565b34801561064157600080fd5b5061059b610650366004614047565b611080565b34801561066157600080fd5b506104e461dead81565b34801561067757600080fd5b5061059b61068636600461410c565b611244565b34801561069757600080fd5b5061051c6112fd565b3480156106ac57600080fd5b50604051601281526020016104bb565b3480156106c857600080fd5b5061059b6106d7366004613fd7565b611317565b3480156106e857600080fd5b5061054260135481565b3480156106fe57600080fd5b5061051c61070d366004613f87565b611554565b34801561071e57600080fd5b5061051c61072d366004613fb3565b6001600160a01b03166000908152602f602052604090205460ff1690565b34801561075757600080fd5b50600b546104e4906001600160a01b031681565b34801561077757600080fd5b5061059b610786366004613fb3565b611590565b34801561079757600080fd5b5061059b6107a6366004613fb3565b6116ac565b3480156107b757600080fd5b506007546104e4906001600160a01b031681565b3480156107d757600080fd5b5061051c6107e6366004613fb3565b6001600160a01b03166000908152602c602052604090205460ff1690565b34801561081057600080fd5b5061059b6116f8565b34801561082557600080fd5b5060165461051c9060ff1681565b34801561083f57600080fd5b5061051c61084e366004613fb3565b602d6020526000908152604090205460ff1681565b34801561086f57600080fd5b5061054260115481565b34801561088557600080fd5b5061059b61089436600461414e565b611801565b3480156108a557600080fd5b5061054260235481565b3480156108bb57600080fd5b50601b5461051c90610100900460ff1681565b3480156108da57600080fd5b506105426108e9366004613fb3565b61192f565b3480156108fa57600080fd5b5061059b61194a565b34801561090f57600080fd5b5060125461051c9060ff1681565b34801561092957600080fd5b5061059b610938366004614183565b6119be565b34801561094957600080fd5b506008546104e4906001600160a01b031681565b34801561096957600080fd5b5061054260195481565b34801561097f57600080fd5b5061059b611a13565b34801561099457600080fd5b50610542601f5481565b3480156109aa57600080fd5b5061059b6109b9366004613fb3565b611a68565b3480156109ca57600080fd5b5061054260185481565b3480156109e057600080fd5b506005546001600160a01b03166104e4565b3480156109fe57600080fd5b506009546104e4906001600160a01b031681565b348015610a1e57600080fd5b5061054260245481565b348015610a3457600080fd5b5061059b610a433660046141b8565b611c12565b348015610a5457600080fd5b5061059b610a633660046141d3565b611c56565b348015610a7457600080fd5b506104ae61207e565b348015610a8957600080fd5b5061059b610a98366004614183565b61208d565b348015610aa957600080fd5b5061054260225481565b348015610abf57600080fd5b50610542602b5481565b348015610ad557600080fd5b5061054260275481565b348015610aeb57600080fd5b5061051c610afa366004613f87565b612145565b348015610b0b57600080fd5b5061051c610b1a366004613f87565b6121de565b348015610b2b57600080fd5b506104ae6121eb565b348015610b4057600080fd5b5061051c610b4f366004613fb3565b602e6020526000908152604090205460ff1681565b348015610b7057600080fd5b50601b5461051c9060ff1681565b348015610b8a57600080fd5b5061059b610b99366004613fb3565b612279565b348015610baa57600080fd5b5061059b610bb9366004614183565b6122c5565b348015610bca57600080fd5b5061059b610bd9366004613fd7565b61234e565b348015610bea57600080fd5b50600a546104e4906001600160a01b031681565b348015610c0a57600080fd5b5061054260175481565b348015610c2057600080fd5b50601d5461051c9060ff1681565b348015610c3a57600080fd5b50610542600e5481565b348015610c5057600080fd5b5061051c610c5f366004613fd7565b61241d565b348015610c7057600080fd5b506104ae612574565b348015610c8557600080fd5b50610542601e5481565b348015610c9b57600080fd5b5061059b610caa36600461414e565b612581565b348015610cbb57600080fd5b50610542610cca366004614226565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0157600080fd5b50610542600f5481565b348015610d1757600080fd5b5061054260155481565b348015610d2d57600080fd5b5061059b610d3c36600461410c565b6126ba565b348015610d4d57600080fd5b50610542600d5481565b348015610d6357600080fd5b50610542601a5481565b348015610d7957600080fd5b5061054260205481565b348015610d8f57600080fd5b5061059b610d9e366004613fb3565b61276d565b348015610daf57600080fd5b5061059b612858565b348015610dc457600080fd5b5061054260255481565b348015610dda57600080fd5b5061054260105481565b348015610df057600080fd5b5061059b610dff366004613fd7565b61292b565b606060038054610e139061425f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3f9061425f565b8015610e8c5780601f10610e6157610100808354040283529160200191610e8c565b820191906000526020600020905b815481529060010190602001808311610e6f57829003601f168201915b5050505050905090565b6000610ea3338484612b89565b50600192915050565b6005546001600160a01b03163314610edf5760405162461bcd60e51b8152600401610ed69061429a565b60405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610ed69061429a565b670de0b6b3a76400006103e8610f4060025490565b610f4b9060056142e5565b610f559190614304565b610f5f9190614304565b811015610fbe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610ed6565b610fd081670de0b6b3a76400006142e5565b600e5550565b6000610fe3848484612cad565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110685760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ed6565b6110758533858403612b89565b506001949350505050565b6005546001600160a01b031633146110aa5760405162461bcd60e51b8152600401610ed69061429a565b60005b815181101561124057600a5482516001600160a01b03909116908390839081106110d9576110d9614326565b60200260200101516001600160a01b031614156111385760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610ed6565b60075482516001600160a01b039091169083908390811061115b5761115b614326565b60200260200101516001600160a01b0316141561118a5760405162461bcd60e51b8152600401610ed69061433c565b6001602f60008484815181106111a2576111a2614326565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060308282815181106111f5576111f5614326565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790556112398161437e565b90506110ad565b5050565b6005546001600160a01b0316331461126e5760405162461bcd60e51b8152600401610ed69061429a565b601f849055602083905560218290556022819055808261128e8587614399565b6112989190614399565b6112a29190614399565b601e819055606410156112f75760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610ed6565b50505050565b6000600c544361130d91906143b1565b600d541015905090565b6005546001600160a01b031633146113415760405162461bcd60e51b8152600401610ed69061429a565b601954601a546113519190614399565b421161139f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610ed6565b6103e88111156114045760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610ed6565b42601a556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015611453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147791906143c8565b9050600061271061148884846142e5565b6114929190614304565b905080156114b3576007546114b3906001600160a01b031661dead83613755565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156114fd57600080fd5b505af1158015611511573d6000803e3d6000fd5b505050507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d68260405161154691815260200190565b60405180910390a150505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ea391859061158b908690614399565b612b89565b6005546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610ed69061429a565b600a546001600160a01b03828116911614156116185760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610ed6565b6007546001600160a01b03828116911614156116465760405162461bcd60e51b8152600401610ed69061433c565b6001600160a01b03166000818152602f60205260408120805460ff191660019081179091556030805491820181559091527f6ff97a59c90d62cc7236ba3a37cd85351bf564556780cf8c1157a220f31f0cbb0180546001600160a01b0319169091179055565b6005546001600160a01b031633146116d65760405162461bcd60e51b8152600401610ed69061429a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117225760405162461bcd60e51b8152600401610ed69061429a565b600f5461172e3061192f565b10156117a4576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ed6565b6007805460ff60a01b1916600160a01b1790556117bf6138aa565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461182b5760405162461bcd60e51b8152600401610ed69061429a565b6102588310156118995760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610ed6565b6103e882111580156118a9575060015b6119135760405162461bcd60e51b815260206004820152603560248201527f4d75737420736574206175746f204c50204d61726b6574696e672070657263656044820152746e74206265747765656e20312520616e642031302560581b6064820152608401610ed6565b6017929092556015556016805460ff1916911515919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146119745760405162461bcd60e51b8152600401610ed69061429a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119e85760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a3d5760405162461bcd60e51b8152600401610ed69061429a565b601d5460ff16151560011415611a5957601d805460ff19169055565b601d805460ff19166001179055565b6005546001600160a01b03163314611a925760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b0381166000908152602f602052604090205460ff16611afa5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610ed6565b60005b60305481101561124057816001600160a01b031660308281548110611b2457611b24614326565b6000918252602090912001546001600160a01b03161415611c005760308054611b4f906001906143b1565b81548110611b5f57611b5f614326565b600091825260209091200154603080546001600160a01b039092169183908110611b8b57611b8b614326565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602f90915260409020805460ff191690556030805480611bda57611bda6143e1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611c0a8161437e565b915050611afd565b6005546001600160a01b03163314611c3c5760405162461bcd60e51b8152600401610ed69061429a565b601b80549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611c805760405162461bcd60e51b8152600401610ed69061429a565b601b5460ff1615611ce75760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ed6565b600c849055600880546001600160a01b038085166001600160a01b03199283168117909355600b805491851691909216179055611d259060016119be565b600b54611d3c906001600160a01b031660016119be565b601b805461ffff191661010117905543600d5542601855600a80546001600160a01b03199081166001600160a01b03861690811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde91906143f7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f91906143f7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec091906143f7565b600780546001600160a01b0319166001600160a01b03929092169182179055611eea9060016119be565b600754611f01906001600160a01b03166001613b5f565b60004711611f5d5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ed6565b6000611f683061192f565b11611fc45760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ed6565b600654611fdf9030906001600160a01b031661158b8261192f565b6006546001600160a01b031663f305d7194730611ffb8161192f565b600b546040516001600160e01b031960e087901b16815261203193929160009182916001600160a01b0316904290600401614414565b60606040518083038185885af115801561204f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612074919061444f565b5050505050505050565b606060048054610e139061425f565b6005546001600160a01b031633146120b75760405162461bcd60e51b8152600401610ed69061429a565b6007546001600160a01b038381169116141561213b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ed6565b6112408282613b5f565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156121c75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ed6565b6121d43385858403612b89565b5060019392505050565b6000610ea3338484612cad565b600480546121f89061425f565b80601f01602080910402602001604051908101604052809291908181526020018280546122249061425f565b80156122715780601f1061224657610100808354040283529160200191612271565b820191906000526020600020905b81548152906001019060200180831161225457829003601f168201915b505050505081565b6005546001600160a01b031633146122a35760405162461bcd60e51b8152600401610ed69061429a565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122ef5760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123785760405162461bcd60e51b8152600401610ed69061429a565b670de0b6b3a7640000606461238c60025490565b6123979060016142e5565b6123a19190614304565b6123ab9190614304565b8110156124055760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610ed6565b61241781670de0b6b3a76400006142e5565b60105550565b6005546000906001600160a01b0316331461244a5760405162461bcd60e51b8152600401610ed69061429a565b620186a061245760025490565b6124629060016142e5565b61246c9190614304565b8210156124d95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ed6565b6103e86124e560025490565b6124f09060056142e5565b6124fa9190614304565b8211156125665760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ed6565b50600f81905560015b919050565b600380546121f89061425f565b6005546001600160a01b031633146125ab5760405162461bcd60e51b8152600401610ed69061429a565b601e8310156126185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203330207365636f6e647360681b6064820152608401610ed6565b671bc16d674ec800008211158015612637575066b1a2bc2ec500008210155b61269e5760405162461bcd60e51b815260206004820152603260248201527f4d75737420736574206175746f206275796261636b20616d6f756e74206265746044820152710eecacadc405c606a40c2dcc84064408aa8960731b6064820152608401610ed6565b6013929092556011556012805460ff1916911515919091179055565b6005546001600160a01b031633146126e45760405162461bcd60e51b8152600401610ed69061429a565b602484905560258390556026829055602781905580826127048587614399565b61270e9190614399565b6127189190614399565b6023819055606410156112f75760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020666565732061742031303025206f72206c65737300006044820152606401610ed6565b6005546001600160a01b031633146127975760405162461bcd60e51b8152600401610ed69061429a565b6001600160a01b0381166127fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ed6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146128825760405162461bcd60e51b8152600401610ed69061429a565b601b5460ff16156128e95760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610ed6565b604051600090339047908381818185875af1925050503d80600081146112f7576040519150601f19603f3d011682016040523d82523d6000602084013e6112f7565b6005546001600160a01b031633146129555760405162461bcd60e51b8152600401610ed69061429a565b678ac7230489e800008111156129e35760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610ed6565b600060025b604051908082528060200260200182016040528015612a11578160200160208202803683370190505b509050600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b91906143f7565b81600081518110612a9e57612a9e614326565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612ad257612ad2614326565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490612b1a90600090869061dead9042906004016144c1565b6000604051808303818588803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051612b7d91815260200190565b60405180910390a15050565b6001600160a01b038316612beb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ed6565b6001600160a01b038216612c4c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ed6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612cd35760405162461bcd60e51b8152600401610ed6906144f6565b6001600160a01b038216612cf95760405162461bcd60e51b8152600401610ed69061453b565b6001600160a01b0382166000908152602f602052604090205460ff1615612d5c5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610ed6565b326000908152602f602052604090205460ff1615612db65760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610ed6565b80612dcc57612dc783836000613755565b505050565b601b5460ff16612e5a576001600160a01b0383166000908152602c602052604090205460ff1680612e1557506001600160a01b0382166000908152602c602052604090205460ff165b612e5a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ed6565b6005546001600160a01b03848116911614801590612e8657506005546001600160a01b03838116911614155b8015612e9a57506001600160a01b03821615155b8015612eb157506001600160a01b03821661dead14155b8015612ec75750600754600160a01b900460ff16155b8015612eec57506001600160a01b0382166000908152602c602052604090205460ff16155b8015612f1157506001600160a01b0383166000908152602c602052604090205460ff16155b1561326057601d5460ff161561302a576006546001600160a01b03838116911614801590612f4d57506007546001600160a01b03838116911614155b1561302a57612f5d6001436143b1565b326000908152601c6020526040902054108015612f9b5750612f806001436143b1565b6001600160a01b0383166000908152601c6020526040902054105b6130055760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ed6565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff16801561306b57506001600160a01b0382166000908152602d602052604090205460ff16155b1561313757600e548111156130d85760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610ed6565b6010546130e48361192f565b6130ee9083614399565b11156131325760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ed6565b613260565b6001600160a01b0382166000908152602e602052604090205460ff16801561317857506001600160a01b0383166000908152602d602052604090205460ff16155b156131e657600e548111156131325760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610ed6565b6001600160a01b0382166000908152602d602052604090205460ff16613260576010546132128361192f565b61321c9083614399565b11156132605760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ed6565b600061326b3061192f565b600f54909150811080159081906132895750601b54610100900460ff165b801561329f5750600754600160a01b900460ff16155b80156132c457506001600160a01b0385166000908152602e602052604090205460ff16155b80156132e957506001600160a01b0385166000908152602c602052604090205460ff16155b801561330e57506001600160a01b0384166000908152602c602052604090205460ff16155b1561333c576007805460ff60a01b1916600160a01b17905561332e6138aa565b6007805460ff60a01b191690555b600754600160a01b900460ff1615801561336e57506001600160a01b0384166000908152602e602052604090205460ff165b801561337c575060165460ff165b801561339757506017546018546133939190614399565b4210155b80156133bc57506001600160a01b0385166000908152602c602052604090205460ff16155b156133c9576133c9613bb3565b600754600160a01b900460ff161580156133fb57506001600160a01b0384166000908152602e602052604090205460ff165b8015613409575060125460ff165b801561342457506013546014546134209190614399565b4210155b801561344957506001600160a01b0385166000908152602c602052604090205460ff16155b801561345757506011544710155b1561346757613467601154613d06565b6007546001600160a01b0386166000908152602c602052604090205460ff600160a01b9092048216159116806134b557506001600160a01b0385166000908152602c602052604090205460ff165b156134be575060005b60008115613741576134ce6112fd565b80156134f257506001600160a01b0387166000908152602e602052604090205460ff165b156135d75760646135048660636142e5565b61350e9190614304565b90506023546025548261352191906142e5565b61352b9190614304565b6029600082825461353c9190614399565b909155505060235460265461355190836142e5565b61355b9190614304565b602a600082825461356c9190614399565b909155505060235460245461358190836142e5565b61358b9190614304565b6028600082825461359c9190614399565b90915550506023546027546135b190836142e5565b6135bb9190614304565b602b60008282546135cc9190614399565b909155506137239050565b6001600160a01b0386166000908152602e602052604090205460ff16801561360157506000602354115b156136165760646023548661350491906142e5565b6001600160a01b0387166000908152602e602052604090205460ff16801561364057506000601e54115b15613723576064601e548661365591906142e5565b61365f9190614304565b9050601e546020548261367291906142e5565b61367c9190614304565b6029600082825461368d9190614399565b9091555050601e546021546136a290836142e5565b6136ac9190614304565b602a60008282546136bd9190614399565b9091555050601e54601f546136d290836142e5565b6136dc9190614304565b602860008282546136ed9190614399565b9091555050601e5460225461370290836142e5565b61370c9190614304565b602b600082825461371d9190614399565b90915550505b801561373457613734873083613755565b61373e81866143b1565b94505b61374c878787613755565b50505050505050565b6001600160a01b03831661377b5760405162461bcd60e51b8152600401610ed6906144f6565b6001600160a01b0382166137a15760405162461bcd60e51b8152600401610ed69061453b565b6001600160a01b038316600090815260208190526040902054818110156138195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ed6565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613850908490614399565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161389c91815260200190565b60405180910390a350505050565b60006138b53061192f565b90506000602b54602a546028546029546138cf9190614399565b6138d99190614399565b6138e39190614399565b905060008215806138f2575081155b156138fc57505050565b600f5461390a9060146142e5565b83111561392257600f5461391f9060146142e5565b92505b60006002836029548661393591906142e5565b61393f9190614304565b6139499190614304565b9050600061395782866143b1565b90504761396382613d13565b600061396f82476143b1565b9050600060026029546139829190614304565b61398c90886143b1565b60285461399990846142e5565b6139a39190614304565b9050600060026029546139b69190614304565b6139c090896143b1565b602a546139cd90856142e5565b6139d79190614304565b9050600060026029546139ea9190614304565b6139f4908a6143b1565b602b54613a0190866142e5565b613a0b9190614304565b905060008183613a1b86886143b1565b613a2591906143b1565b613a2f91906143b1565b600060298190556028819055602a819055602b8190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114613a91576040519150601f19603f3d011682016040523d82523d6000602084013e613a96565b606091505b5050600854604051919a506001600160a01b0316908590600081818185875af1925050503d8060008114613ae6576040519150601f19603f3d011682016040523d82523d6000602084013e613aeb565b606091505b50909950508715801590613aff5750600081115b15613b5257613b0e8882613e6d565b602954604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5050505050505050505050565b6001600160a01b0382166000818152602e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b426018556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2691906143c8565b9050600061271060155483613c3b91906142e5565b613c459190614304565b90508015613c6657600754613c66906001600160a01b031661dead83613755565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015613cb057600080fd5b505af1158015613cc4573d6000803e3d6000fd5b505050507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa168682604051613cf991815260200190565b60405180910390a1505050565b42601455600060026129e8565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d4857613d48614326565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc591906143f7565b81600181518110613dd857613dd8614326565b6001600160a01b039283166020918202929092010152600654613dfe9130911684612b89565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e3790859060009086903090429060040161457e565b600060405180830381600087803b158015613e5157600080fd5b505af1158015613e65573d6000803e3d6000fd5b505050505050565b600654613e859030906001600160a01b031684612b89565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613ec59230928992600092839216904290600401614414565b60606040518083038185885af1158015613ee3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f08919061444f565b5050505050565b600060208083528351808285015260005b81811015613f3c57858101830151858201604001528201613f20565b81811115613f4e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613f7957600080fd5b50565b803561256f81613f64565b60008060408385031215613f9a57600080fd5b8235613fa581613f64565b946020939093013593505050565b600060208284031215613fc557600080fd5b8135613fd081613f64565b9392505050565b600060208284031215613fe957600080fd5b5035919050565b60008060006060848603121561400557600080fd5b833561401081613f64565b9250602084013561402081613f64565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561405a57600080fd5b823567ffffffffffffffff8082111561407257600080fd5b818501915085601f83011261408657600080fd5b81358181111561409857614098614031565b8060051b604051601f19603f830116810181811085821117156140bd576140bd614031565b6040529182528482019250838101850191888311156140db57600080fd5b938501935b82851015614100576140f185613f7c565b845293850193928501926140e0565b98975050505050505050565b6000806000806080858703121561412257600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461256f57600080fd5b60008060006060848603121561416357600080fd5b833592506020840135915061417a6040850161413e565b90509250925092565b6000806040838503121561419657600080fd5b82356141a181613f64565b91506141af6020840161413e565b90509250929050565b6000602082840312156141ca57600080fd5b613fd08261413e565b600080600080608085870312156141e957600080fd5b8435935060208501356141fb81613f64565b9250604085013561420b81613f64565b9150606085013561421b81613f64565b939692955090935050565b6000806040838503121561423957600080fd5b823561424481613f64565b9150602083013561425481613f64565b809150509250929050565b600181811c9082168061427357607f821691505b6020821081141561429457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156142ff576142ff6142cf565b500290565b60008261432157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604082015261399760f11b606082015260800190565b6000600019821415614392576143926142cf565b5060010190565b600082198211156143ac576143ac6142cf565b500190565b6000828210156143c3576143c36142cf565b500390565b6000602082840312156143da57600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561440957600080fd5b8151613fd081613f64565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561446457600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156144b65781516001600160a01b031687529582019590820190600101614491565b509495945050505050565b8481526080602082015260006144da608083018661447d565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061459d60a083018661447d565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212201bd62860e91f115271ffbdb9f75d35a579e3802191d1af7e8519fcb17264d9fa64736f6c634300080b0033

Deployed Bytecode Sourcemap

10626:24726:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4304:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10680:27;;;;;;;;;;-1:-1:-1;10680:27:0;;;;-1:-1:-1;;;;;10680:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10680:27:0;616:221:1;5218:169:0;;;;;;;;;;-1:-1:-1;5218:169:0;;;;;:::i;:::-;;:::i;:::-;;;1602:14:1;;1595:22;1577:41;;1565:2;1550:18;5218:169:0;1437:187:1;12491:31:0;;;;;;;;;;;;;;;;;;;1775:25:1;;;1763:2;1748:18;12491:31:0;1629:177:1;11330:34:0;;;;;;;;;;;;;;;;4625:108;;;;;;;;;;-1:-1:-1;4713:12:0;;4625:108;;18898:111;;;;;;;;;;-1:-1:-1;18898:111:0;;;;;:::i;:::-;;:::i;:::-;;12337:29;;;;;;;;;;;;;;;;12451:33;;;;;;;;;;;;;;;;12411;;;;;;;;;;;;;;;;12154:28;;;;;;;;;;;;;;;;16231:261;;;;;;;;;;-1:-1:-1;16231:261:0;;;;;:::i;:::-;;:::i;5395:492::-;;;;;;;;;;-1:-1:-1;5395:492:0;;;;;:::i;:::-;;:::i;34407:436::-;;;;;;;;;;-1:-1:-1;34407:436:0;;;;;:::i;:::-;;:::i;10742:53::-;;;;;;;;;;;;10788:6;10742:53;;17073:446;;;;;;;;;;-1:-1:-1;17073:446:0;;;;;:::i;:::-;;:::i;30295:133::-;;;;;;;;;;;;;:::i;4524:93::-;;;;;;;;;;-1:-1:-1;4524:93:0;;4607:2;4707:36:1;;4695:2;4680:18;4524:93:0;4565:184:1;31140:912:0;;;;;;;;;;-1:-1:-1;31140:912:0;;;;;:::i;:::-;;:::i;11276:47::-;;;;;;;;;;;;;;;;5895:215;;;;;;;;;;-1:-1:-1;5895:215:0;;;;;:::i;:::-;;:::i;33974:112::-;;;;;;;;;;-1:-1:-1;33974:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;34052:26:0;34027:4;34052:26;;;:17;:26;;;;;;;;;33974:112;10937:32;;;;;;;;;;-1:-1:-1;10937:32:0;;;;-1:-1:-1;;;;;10937:32:0;;;34092:309;;;;;;;;;;-1:-1:-1;34092:309:0;;;;;:::i;:::-;;:::i;18768:124::-;;;;;;;;;;-1:-1:-1;18768:124:0;;;;;:::i;:::-;;:::i;10714:21::-;;;;;;;;;;-1:-1:-1;10714:21:0;;;;-1:-1:-1;;;;;10714:21:0;;;19021:125;;;;;;;;;;-1:-1:-1;19021:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19110:28:0;19086:4;19110:28;;;:19;:28;;;;;;;;;19021:125;27639:312;;;;;;;;;;;;;:::i;11436:38::-;;;;;;;;;;-1:-1:-1;11436:38:0;;;;;;;;12710:56;;;;;;;;;;-1:-1:-1;12710:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11179:45;;;;;;;;;;;;;;;;29215:472;;;;;;;;;;-1:-1:-1;29215:472:0;;;;;:::i;:::-;;:::i;12226:28::-;;;;;;;;;;;;;;;;11727:31;;;;;;;;;;-1:-1:-1;11727:31:0;;;;;;;;;;;4741:127;;;;;;;;;;-1:-1:-1;4741:127:0;;;;;:::i;:::-;;:::i;8987:150::-;;;;;;;;;;;;;:::i;11231:38::-;;;;;;;;;;-1:-1:-1;11231:38:0;;;;;;;;16724:136;;;;;;;;;;-1:-1:-1;16724:136:0;;;;;:::i;:::-;;:::i;10834:30::-;;;;;;;;;;-1:-1:-1;10834:30:0;;;;-1:-1:-1;;;;;10834:30:0;;;11582:49;;;;;;;;;;;;;;;;15550:219;;;;;;;;;;;;;:::i;12080:30::-;;;;;;;;;;;;;;;;34849:500;;;;;;;;;;-1:-1:-1;34849:500:0;;;;;:::i;:::-;;:::i;11535:34::-;;;;;;;;;;;;;;;;8345:79;;;;;;;;;;-1:-1:-1;8410:6:0;;-1:-1:-1;;;;;8410:6:0;8345:79;;10871:24;;;;;;;;;;-1:-1:-1;10871:24:0;;;;-1:-1:-1;;;;;10871:24:0;;;12261:31;;;;;;;;;;;;;;;;16960:101;;;;;;;;;;-1:-1:-1;16960:101:0;;;;;:::i;:::-;;:::i;32060:1615::-;;;;;;;;;;-1:-1:-1;32060:1615:0;;;;;:::i;:::-;;:::i;4412:104::-;;;;;;;;;;;;;:::i;18186:237::-;;;;;;;;;;-1:-1:-1;18186:237:0;;;;;:::i;:::-;;:::i;12189:24::-;;;;;;;;;;;;;;;;12529:27;;;;;;;;;;;;;;;;12373:25;;;;;;;;;;;;;;;;6118:413;;;;;;;;;;-1:-1:-1;6118:413:0;;;;;:::i;:::-;;:::i;4876:175::-;;;;;;;;;;-1:-1:-1;4876:175:0;;;;;:::i;:::-;;:::i;4150:21::-;;;;;;;;;;;;;:::i;12924:58::-;;;;;;;;;;-1:-1:-1;12924:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11687:33;;;;;;;;;;-1:-1:-1;11687:33:0;;;;;;;;18627:133;;;;;;;;;;-1:-1:-1;18627:133:0;;;;;:::i;:::-;;:::i;17996:182::-;;;;;;;;;;-1:-1:-1;17996:182:0;;;;;:::i;:::-;;:::i;16500:212::-;;;;;;;;;;-1:-1:-1;16500:212:0;;;;;:::i;:::-;;:::i;10902:28::-;;;;;;;;;;-1:-1:-1;10902:28:0;;;;-1:-1:-1;;;;;10902:28:0;;;11481:47;;;;;;;;;;;;;;;;11998:39;;;;;;;;;;-1:-1:-1;11998:39:0;;;;;;;;11070:27;;;;;;;;;;;;;;;;15838:381;;;;;;;;;;-1:-1:-1;15838:381:0;;;;;:::i;:::-;;:::i;4124:19::-;;;;;;;;;;;;;:::i;12046:27::-;;;;;;;;;;;;;;;;28682:521;;;;;;;;;;-1:-1:-1;28682:521:0;;;;;:::i;:::-;;:::i;5059:151::-;;;;;;;;;;-1:-1:-1;5059:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5175:18:0;;;5148:7;5175:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5059:151;11104:33;;;;;;;;;;;;;;;;11377:40;;;;;;;;;;;;;;;;17531:457;;;;;;;;;;-1:-1:-1;17531:457:0;;;;;:::i;:::-;;:::i;11024:37::-;;;;;;;;;;;;;;;;11638:40;;;;;;;;;;;;;;;;12117:30;;;;;;;;;;;;;;;;9292:246;;;;;;;;;;-1:-1:-1;9292:246:0;;;;;:::i;:::-;;:::i;33727:241::-;;;;;;;;;;;;;:::i;12299:31::-;;;;;;;;;;;;;;;;11144:24;;;;;;;;;;;;;;;;28058:616;;;;;;;;;;-1:-1:-1;28058:616:0;;;;;:::i;:::-;;:::i;4304:100::-;4358:13;4391:5;4384:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4304:100;:::o;5218:169::-;5301:4;5318:39;477:10;5341:7;5350:6;5318:8;:39::i;:::-;-1:-1:-1;5375:4:0;5218:169;;;;:::o;18898:111::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;;;;;;;;;18972:17:::1;:29:::0;;-1:-1:-1;;;;;;18972:29:0::1;-1:-1:-1::0;;;;;18972:29:0;;;::::1;::::0;;;::::1;::::0;;18898:111::o;16231:261::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;16350:4:::1;16344;16324:13;4713:12:::0;;;4625:108;16324:13:::1;:17;::::0;16340:1:::1;16324:17;:::i;:::-;:24;;;;:::i;:::-;16323:31;;;;:::i;:::-;16313:6;:41;;16305:93;;;::::0;-1:-1:-1;;;16305:93:0;;8216:2:1;16305:93:0::1;::::0;::::1;8198:21:1::0;8255:2;8235:18;;;8228:30;8294:34;8274:18;;;8267:62;-1:-1:-1;;;8345:18:1;;;8338:37;8392:19;;16305:93:0::1;8014:403:1::0;16305:93:0::1;16467:17;:6:::0;16477::::1;16467:17;:::i;:::-;16452:12;:32:::0;-1:-1:-1;16231:261:0:o;5395:492::-;5535:4;5552:36;5562:6;5570:9;5581:6;5552:9;:36::i;:::-;-1:-1:-1;;;;;5628:19:0;;5601:24;5628:19;;;:11;:19;;;;;;;;477:10;5628:33;;;;;;;;5680:26;;;;5672:79;;;;-1:-1:-1;;;5672:79:0;;8624:2:1;5672:79:0;;;8606:21:1;8663:2;8643:18;;;8636:30;8702:34;8682:18;;;8675:62;-1:-1:-1;;;8753:18:1;;;8746:38;8801:19;;5672:79:0;8422:404:1;5672:79:0;5787:57;5796:6;477:10;5837:6;5818:16;:25;5787:8;:57::i;:::-;-1:-1:-1;5875:4:0;;5395:492;-1:-1:-1;;;;5395:492:0:o;34407:436::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;34504:9:::1;34499:327;34519:9;:16;34515:1;:20;34499:327;;;34581:13;::::0;34565:12;;-1:-1:-1;;;;;34581:13:0;;::::1;::::0;34565:9;;34575:1;;34565:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;34565:29:0::1;;;34557:70;;;::::0;-1:-1:-1;;;34557:70:0;;9165:2:1;34557:70:0::1;::::0;::::1;9147:21:1::0;9204:2;9184:18;;;9177:30;9243;9223:18;;;9216:58;9291:18;;34557:70:0::1;8963:352:1::0;34557:70:0::1;34666:6;::::0;34650:12;;-1:-1:-1;;;;;34666:6:0;;::::1;::::0;34650:9;;34660:1;;34650:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;34650:22:0::1;;;34642:69;;;;-1:-1:-1::0;;;34642:69:0::1;;;;;;;:::i;:::-;34760:4;34726:17;:31;34744:9;34754:1;34744:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;34726:31:0::1;-1:-1:-1::0;;;;;34726:31:0::1;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;34779:16;34801:9;34811:1;34801:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;34779:35;;::::1;::::0;::::1;::::0;;-1:-1:-1;34779:35:0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34779:35:0::1;-1:-1:-1::0;;;;;34779:35:0;;::::1;::::0;;;::::1;::::0;;34537:3:::1;::::0;::::1;:::i;:::-;;;34499:327;;;;34407:436:::0;:::o;17073:446::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;17210:15:::1;:31:::0;;;17252:15:::1;:31:::0;;;17294:13:::1;:27:::0;;;17332:9:::1;:19:::0;;;17344:7;17310:11;17377:33:::1;17270:13:::0;17228;17377:33:::1;:::i;:::-;:49;;;;:::i;:::-;:61;;;;:::i;:::-;17362:12;:76:::0;;;17473:3:::1;-1:-1:-1::0;17457:19:0::1;17449:62;;;::::0;-1:-1:-1;;;17449:62:0;;10198:2:1;17449:62:0::1;::::0;::::1;10180:21:1::0;10237:2;10217:18;;;10210:30;10276:32;10256:18;;;10249:60;10326:18;;17449:62:0::1;9996:354:1::0;17449:62:0::1;17073:446:::0;;;;:::o;30295:133::-;30347:4;30408:12;;30393;:27;;;;:::i;:::-;30371:18;;:49;;30364:56;;30295:133;:::o;31140:912::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;31285:24:::1;;31257:25;;:52;;;;:::i;:::-;31239:15;:70;31231:116;;;::::0;-1:-1:-1;;;31231:116:0;;10687:2:1;31231:116:0::1;::::0;::::1;10669:21:1::0;;;10706:18;;;10699:30;10765:34;10745:18;;;10738:62;10817:18;;31231:116:0::1;10485:356:1::0;31231:116:0::1;31377:4;31366:7;:15;;31358:70;;;::::0;-1:-1:-1;;;31358:70:0;;11048:2:1;31358:70:0::1;::::0;::::1;11030:21:1::0;11087:2;11067:18;;;11060:30;11126:34;11106:18;;;11099:62;-1:-1:-1;;;11177:18:1;;;11170:40;11227:19;;31358:70:0::1;10846:406:1::0;31358:70:0::1;31467:15;31439:25;:43:::0;31591:6:::1;::::0;31576:22:::1;::::0;-1:-1:-1;;;31576:22:0;;-1:-1:-1;;;;;31591:6:0;;::::1;31576:22;::::0;::::1;780:51:1::0;31545:28:0::1;::::0;31576:4:::1;::::0;:14:::1;::::0;753:18:1;;31576:22:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31545:53:::0;-1:-1:-1;31661:25:0::1;31722:5;31689:30;31712:7:::0;31545:53;31689:30:::1;:::i;:::-;:38;;;;:::i;:::-;31661:66:::0;-1:-1:-1;31752:21:0;;31748:112:::1;;31805:6;::::0;31789:59:::1;::::0;-1:-1:-1;;;;;31805:6:0::1;31821;31830:17:::0;31789:15:::1;:59::i;:::-;31968:6;::::0;31986:11:::1;::::0;;-1:-1:-1;;;;;;31986:11:0;;;;-1:-1:-1;;;;;31968:6:0;;::::1;::::0;;;31986:9:::1;::::0;:11:::1;::::0;;::::1;::::0;31943:13:::1;::::0;31986:11;;;;;;;31943:13;31968:6;31986:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32013:31;32026:17;32013:31;;;;1775:25:1::0;;1763:2;1748:18;;1629:177;32013:31:0::1;;;;;;;;31220:832;;;31140:912:::0;:::o;5895:215::-;477:10;5983:4;6032:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6032:34:0;;;;;;;;;;5983:4;;6000:80;;6023:7;;6032:47;;6069:10;;6032:47;:::i;:::-;6000:8;:80::i;34092:309::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;34187:13:::1;::::0;-1:-1:-1;;;;;34176:24:0;;::::1;34187:13:::0;::::1;34176:24;;34168:65;;;::::0;-1:-1:-1;;;34168:65:0;;9165:2:1;34168:65:0::1;::::0;::::1;9147:21:1::0;9204:2;9184:18;;;9177:30;9243;9223:18;;;9216:58;9291:18;;34168:65:0::1;8963:352:1::0;34168:65:0::1;34263:6;::::0;-1:-1:-1;;;;;34252:17:0;;::::1;34263:6:::0;::::1;34252:17;;34244:64;;;;-1:-1:-1::0;;;34244:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34319:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;34319:33:0::1;34348:4;34319:33:::0;;::::1;::::0;;;34363:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34363:30:0::1;::::0;;::::1;::::0;;34092:309::o;18768:124::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;18863:9:::1;:21:::0;;-1:-1:-1;;;;;;18863:21:0::1;-1:-1:-1::0;;;;;18863:21:0;;;::::1;::::0;;;::::1;::::0;;18768:124::o;27639:312::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;27730:18:::1;;27702:24;27720:4;27702:9;:24::i;:::-;:46;;27694:123;;;::::0;;-1:-1:-1;;;27694:123:0;;11648:2:1;27694:123:0::1;::::0;::::1;11630:21:1::0;11667:18;;;11660:30;;;;11726:34;11706:18;;;11699:62;11797:34;11777:18;;;11770:62;11849:19;;27694:123:0::1;11446:428:1::0;27694:123:0::1;27828:8;:15:::0;;-1:-1:-1;;;;27828:15:0::1;-1:-1:-1::0;;;27828:15:0::1;::::0;;27854:10:::1;:8;:10::i;:::-;27875:8;:16:::0;;-1:-1:-1;;;;27875:16:0::1;::::0;;27907:36:::1;::::0;27927:15:::1;1775:25:1::0;;27907:36:0::1;::::0;1763:2:1;1748:18;27907:36:0::1;;;;;;;27639:312::o:0;29215:472::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;29374:3:::1;29351:19;:26;;29343:90;;;::::0;-1:-1:-1;;;29343:90:0;;12081:2:1;29343:90:0::1;::::0;::::1;12063:21:1::0;12120:2;12100:18;;;12093:30;12159:34;12139:18;;;12132:62;-1:-1:-1;;;12210:18:1;;;12203:49;12269:19;;29343:90:0::1;11879:415:1::0;29343:90:0::1;29464:4;29452:8;:16;;:33;;;;-1:-1:-1::0;29472:13:0;29452:33:::1;29444:99;;;::::0;-1:-1:-1;;;29444:99:0;;12501:2:1;29444:99:0::1;::::0;::::1;12483:21:1::0;12540:2;12520:18;;;12513:30;12579:34;12559:18;;;12552:62;-1:-1:-1;;;12630:18:1;;;12623:51;12691:19;;29444:99:0::1;12299:417:1::0;29444:99:0::1;29554:20;:42:::0;;;;29607:21:::1;:32:::0;29650:18:::1;:29:::0;;-1:-1:-1;;29650:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29215:472::o;4741:127::-;-1:-1:-1;;;;;4842:18:0;4815:7;4842:18;;;;;;;;;;;;4741:127::o;8987:150::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;9080:6:::1;::::0;9059:40:::1;::::0;9096:1:::1;::::0;-1:-1:-1;;;;;9080:6:0::1;::::0;9059:40:::1;::::0;9096:1;;9059:40:::1;9110:6;:19:::0;;-1:-1:-1;;;;;;9110:19:0::1;::::0;;8987:150::o;16724:136::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16814:31:0;;;::::1;;::::0;;;:23:::1;:31;::::0;;;;:38;;-1:-1:-1;;16814:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16724:136::o;15550:219::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;15622:20:::1;::::0;::::1;;:26;;:20:::0;:26:::1;15619:143;;;15664:20;:28:::0;;-1:-1:-1;;15664:28:0::1;::::0;;15550:219::o;15619:143::-:1;15723:20;:27:::0;;-1:-1:-1;;15723:27:0::1;15746:4;15723:27;::::0;;15550:219::o;34849:500::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34938:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;34930:65;;;::::0;-1:-1:-1;;;34930:65:0;;12923:2:1;34930:65:0::1;::::0;::::1;12905:21:1::0;12962:2;12942:18;;;12935:30;13001:28;12981:18;;;12974:56;13047:18;;34930:65:0::1;12721:350:1::0;34930:65:0::1;35011:9;35006:336;35030:16;:23:::0;35026:27;::::1;35006:336;;;35102:7;-1:-1:-1::0;;;;;35079:30:0::1;:16;35096:1;35079:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35079:19:0::1;:30;35075:256;;;35152:16;35169:23:::0;;:27:::1;::::0;35195:1:::1;::::0;35169:27:::1;:::i;:::-;35152:45;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;35130:16:::1;:19:::0;;-1:-1:-1;;;;;35152:45:0;;::::1;::::0;35147:1;;35130:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;35130:67:0::1;-1:-1:-1::0;;;;;35130:67:0;;::::1;;::::0;;35216:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;35216:34:0::1;::::0;;35269:16:::1;:22:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35269:22:0;;;;;-1:-1:-1;;;;;;35269:22:0::1;::::0;;;;;34499:327:::1;34407:436:::0;:::o;35075:256::-:1;35055:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35006:336;;16960:101:::0;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;17032:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;17032:21:0;;::::1;::::0;;;::::1;::::0;;16960:101::o;32060:1615::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;32206:13:::1;::::0;::::1;;32205:14;32197:70;;;::::0;-1:-1:-1;;;32197:70:0;;13410:2:1;32197:70:0::1;::::0;::::1;13392:21:1::0;13449:2;13429:18;;;13422:30;13488:34;13468:18;;;13461:62;-1:-1:-1;;;13539:18:1;;;13532:41;13590:19;;32197:70:0::1;13208:407:1::0;32197:70:0::1;32280:12;:28:::0;;;32346:15:::1;:32:::0;;-1:-1:-1;;;;;32346:32:0;;::::1;-1:-1:-1::0;;;;;;32346:32:0;;::::1;::::0;::::1;::::0;;;32389:17:::1;:36:::0;;;;::::1;::::0;;;::::1;;::::0;;32436:48:::1;::::0;32346:32;32436:25:::1;:48::i;:::-;32521:17;::::0;32495:50:::1;::::0;-1:-1:-1;;;;;32521:17:0::1;::::0;32495:25:::1;:50::i;:::-;32593:13;:20:::0;;-1:-1:-1;;32624:18:0;;;;;32674:12:::1;32653:18;:33:::0;32719:15:::1;32697:19;:37:::0;32777:13:::1;:23:::0;;-1:-1:-1;;;;;;32777:23:0;;::::1;-1:-1:-1::0;;;;;32777:23:0;::::1;::::0;;::::1;::::0;;;32871:9:::1;:22:::0;;;;::::1;::::0;::::1;::::0;;32951:20:::1;::::0;;-1:-1:-1;;;32951:20:0;;;;32777:23;;32951:18:::1;::::0;-1:-1:-1;32951:20:0;;::::1;::::0;::::1;::::0;;;;;;;;32777:23;32951:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32939:44:0::1;;32992:4;32999:10;-1:-1:-1::0;;;;;32999:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32939:78;::::0;-1:-1:-1;;;;;;32939:78:0::1;::::0;;;;;;-1:-1:-1;;;;;14106:15:1;;;32939:78:0::1;::::0;::::1;14088:34:1::0;14158:15;;14138:18;;;14131:43;14023:18;;32939:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32930:6;:87:::0;;-1:-1:-1;;;;;;32930:87:0::1;-1:-1:-1::0;;;;;32930:87:0;;;::::1;::::0;;::::1;::::0;;33028:48:::1;::::0;-1:-1:-1;33028:25:0::1;:48::i;:::-;33124:6;::::0;33087:51:::1;::::0;-1:-1:-1;;;;;33124:6:0::1;::::0;33087:28:::1;:51::i;:::-;33216:1;33192:21;:25;33184:73;;;::::0;-1:-1:-1;;;33184:73:0;;14387:2:1;33184:73:0::1;::::0;::::1;14369:21:1::0;14426:2;14406:18;;;14399:30;14465:34;14445:18;;;14438:62;-1:-1:-1;;;14516:18:1;;;14509:33;14559:19;;33184:73:0::1;14185:399:1::0;33184:73:0::1;33303:1;33276:24;33294:4;33276:9;:24::i;:::-;:28;33268:79;;;::::0;-1:-1:-1;;;33268:79:0;;14791:2:1;33268:79:0::1;::::0;::::1;14773:21:1::0;14830:2;14810:18;;;14803:30;14869:34;14849:18;;;14842:62;-1:-1:-1;;;14920:18:1;;;14913:36;14966:19;;33268:79:0::1;14589:402:1::0;33268:79:0::1;33390:9;::::0;33358:69:::1;::::0;33375:4:::1;::::0;-1:-1:-1;;;;;33390:9:0::1;33402:24;33375:4:::0;33402:9:::1;:24::i;33358:69::-;33438:9;::::0;-1:-1:-1;;;;;33438:9:0::1;:25;33471:21;33516:4;33536:24;33516:4:::0;33536:9:::1;:24::i;:::-;33609:17;::::0;33438:229:::1;::::0;-1:-1:-1;;;;;;33438:229:0::1;::::0;;;;;;::::1;::::0;;;33575:1:::1;::::0;;;-1:-1:-1;;;;;33609:17:0::1;::::0;33641:15:::1;::::0;33438:229:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32186:1489;32060:1615:::0;;;;:::o;4412:104::-;4468:13;4501:7;4494:14;;;;;:::i;18186:237::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;18293:6:::1;::::0;-1:-1:-1;;;;;18285:14:0;;::::1;18293:6:::0;::::1;18285:14;;18277:84;;;::::0;-1:-1:-1;;;18277:84:0;;16121:2:1;18277:84:0::1;::::0;::::1;16103:21:1::0;16160:2;16140:18;;;16133:30;16199:34;16179:18;;;16172:62;16270:27;16250:18;;;16243:55;16315:19;;18277:84:0::1;15919:421:1::0;18277:84:0::1;18374:41;18403:4;18409:5;18374:28;:41::i;6118:413::-:0;477:10;6211:4;6255:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6255:34:0;;;;;;;;;;6308:35;;;;6300:85;;;;-1:-1:-1;;;6300:85:0;;16547:2:1;6300:85:0;;;16529:21:1;16586:2;16566:18;;;16559:30;16625:34;16605:18;;;16598:62;-1:-1:-1;;;16676:18:1;;;16669:35;16721:19;;6300:85:0;16345:401:1;6300:85:0;6421:67;477:10;6444:7;6472:15;6453:16;:34;6421:8;:67::i;:::-;-1:-1:-1;6519:4:0;;6118:413;-1:-1:-1;;;6118:413:0:o;4876:175::-;4962:4;4979:42;477:10;5003:9;5014:6;4979:9;:42::i;4150:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18627:133::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;18716:15:::1;:36:::0;;-1:-1:-1;;;;;;18716:36:0::1;-1:-1:-1::0;;;;;18716:36:0;;;::::1;::::0;;;::::1;::::0;;18627:133::o;17996:182::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18081:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18081:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18136:34;;1577:41:1;;;18136:34:0::1;::::0;1550:18:1;18136:34:0::1;;;;;;;17996:182:::0;;:::o;16500:212::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;16621:4:::1;16616:3;16596:13;4713:12:::0;;;4625:108;16596:13:::1;:17;::::0;16612:1:::1;16596:17;:::i;:::-;:23;;;;:::i;:::-;16595:30;;;;:::i;:::-;16585:6;:40;;16577:87;;;::::0;-1:-1:-1;;;16577:87:0;;16953:2:1;16577:87:0::1;::::0;::::1;16935:21:1::0;16992:2;16972:18;;;16965:30;17031:34;17011:18;;;17004:62;-1:-1:-1;;;17082:18:1;;;17075:32;17124:19;;16577:87:0::1;16751:398:1::0;16577:87:0::1;16687:17;:6:::0;16697::::1;16687:17;:::i;:::-;16675:9;:29:::0;-1:-1:-1;16500:212:0:o;15838:381::-;8557:6;;15919:4;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;15975:6:::1;15955:13;4713:12:::0;;;4625:108;15955:13:::1;:17;::::0;15971:1:::1;15955:17;:::i;:::-;:26;;;;:::i;:::-;15942:9;:39;;15934:105;;;::::0;-1:-1:-1;;;15934:105:0;;17356:2:1;15934:105:0::1;::::0;::::1;17338:21:1::0;17395:2;17375:18;;;17368:30;17434:34;17414:18;;;17407:62;-1:-1:-1;;;17485:18:1;;;17478:51;17546:19;;15934:105:0::1;17154:417:1::0;15934:105:0::1;16090:4;16070:13;4713:12:::0;;;4625:108;16070:13:::1;:17;::::0;16086:1:::1;16070:17;:::i;:::-;:24;;;;:::i;:::-;16057:9;:37;;16049:102;;;::::0;-1:-1:-1;;;16049:102:0;;17778:2:1;16049:102:0::1;::::0;::::1;17760:21:1::0;17817:2;17797:18;;;17790:30;17856:34;17836:18;;;17829:62;-1:-1:-1;;;17907:18:1;;;17900:50;17967:19;;16049:102:0::1;17576:416:1::0;16049:102:0::1;-1:-1:-1::0;16161:18:0::1;:30:::0;;;16208:4:::1;8627:1;15838:381:::0;;;:::o;4124:19::-;;;;;;;:::i;28682:521::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;28854:2:::1;28831:19;:25;;28823:89;;;::::0;-1:-1:-1;;;28823:89:0;;18199:2:1;28823:89:0::1;::::0;::::1;18181:21:1::0;18238:2;18218:18;;;18211:30;18277:34;18257:18;;;18250:62;-1:-1:-1;;;18328:18:1;;;18321:49;18387:19;;28823:89:0::1;17997:415:1::0;28823:89:0::1;28949:7;28931:14;:25;;:57;;;;;28978:10;28960:14;:28;;28931:57;28923:120;;;::::0;-1:-1:-1;;;28923:120:0;;18619:2:1;28923:120:0::1;::::0;::::1;18601:21:1::0;18658:2;18638:18;;;18631:30;18697:34;18677:18;;;18670:62;-1:-1:-1;;;18748:18:1;;;18741:48;18806:19;;28923:120:0::1;18417:414:1::0;28923:120:0::1;29054:20;:42:::0;;;;29107:20:::1;:37:::0;29155:18:::1;:40:::0;;-1:-1:-1;;29155:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28682:521::o;17531:457::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;17669:16:::1;:32:::0;;;17712:16:::1;:32:::0;;;17755:14:::1;:28:::0;;;17794:10:::1;:20:::0;;;17807:7;17772:11;17841:35:::1;17731:13:::0;17688;17841:35:::1;:::i;:::-;:52;;;;:::i;:::-;:65;;;;:::i;:::-;17825:13;:81:::0;;;17942:3:::1;-1:-1:-1::0;17925:20:0::1;17917:63;;;::::0;-1:-1:-1;;;17917:63:0;;10198:2:1;17917:63:0::1;::::0;::::1;10180:21:1::0;10237:2;10217:18;;;10210:30;10276:32;10256:18;;;10249:60;10326:18;;17917:63:0::1;9996:354:1::0;9292:246:0;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9383:22:0;::::1;9375:73;;;::::0;-1:-1:-1;;;9375:73:0;;19038:2:1;9375:73:0::1;::::0;::::1;19020:21:1::0;19077:2;19057:18;;;19050:30;19116:34;19096:18;;;19089:62;-1:-1:-1;;;19167:18:1;;;19160:36;19213:19;;9375:73:0::1;18836:402:1::0;9375:73:0::1;9485:6;::::0;9464:38:::1;::::0;-1:-1:-1;;;;;9464:38:0;;::::1;::::0;9485:6:::1;::::0;9464:38:::1;::::0;9485:6:::1;::::0;9464:38:::1;9513:6;:17:::0;;-1:-1:-1;;;;;;9513:17:0::1;-1:-1:-1::0;;;;;9513:17:0;;;::::1;::::0;;;::::1;::::0;;9292:246::o;33727:241::-;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;33794:13:::1;::::0;::::1;;33793:14;33785:70;;;::::0;-1:-1:-1;;;33785:70:0;;19445:2:1;33785:70:0::1;::::0;::::1;19427:21:1::0;19484:2;19464:18;;;19457:30;19523:34;19503:18;;;19496:62;-1:-1:-1;;;19574:18:1;;;19567:41;19625:19;;33785:70:0::1;19243:407:1::0;33785:70:0::1;33902:58;::::0;33866:12:::1;::::0;33910:10:::1;::::0;33934:21:::1;::::0;33866:12;33902:58;33866:12;33902:58;33934:21;33910:10;33902:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28058:616:::0;8557:6;;-1:-1:-1;;;;;8557:6:0;477:10;8557:22;8549:67;;;;-1:-1:-1;;;8549:67:0;;;;;;;:::i;:::-;28155:8:::1;28140:11;:23;;28132:107;;;::::0;-1:-1:-1;;;28132:107:0;;20067:2:1;28132:107:0::1;::::0;::::1;20049:21:1::0;20106:2;20086:18;;;20079:30;20145:34;20125:18;;;20118:62;20216:34;20196:18;;;20189:62;-1:-1:-1;;;20267:19:1;;;20260:38;20315:19;;28132:107:0::1;19865:475:1::0;28132:107:0::1;28252:21;28290:1;28276:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;28276:16:0::1;;28252:40;;28313:9;;;;;;;;;-1:-1:-1::0;;;;;28313:9:0::1;-1:-1:-1::0;;;;;28313:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28303:4;28308:1;28303:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;28303:26:0::1;;;-1:-1:-1::0;;;;;28303:26:0::1;;;::::0;::::1;28358:4;28340;28345:1;28340:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28340:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28402:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;28402:219:0;;:9;::::1;::::0;:60:::1;::::0;28470:11;;28402:219:::1;::::0;:9:::1;::::0;28546:4;;28573:6:::1;::::0;28595:15:::1;::::0;28402:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;28637:29;28654:11;28637:29;;;;1775:25:1::0;;1763:2;1748:18;;1629:177;28637:29:0::1;;;;;;;;28121:553;28058:616:::0;:::o;7460:380::-;-1:-1:-1;;;;;7596:19:0;;7588:68;;;;-1:-1:-1;;;7588:68:0;;21528:2:1;7588:68:0;;;21510:21:1;21567:2;21547:18;;;21540:30;21606:34;21586:18;;;21579:62;-1:-1:-1;;;21657:18:1;;;21650:34;21701:19;;7588:68:0;21326:400:1;7588:68:0;-1:-1:-1;;;;;7675:21:0;;7667:68;;;;-1:-1:-1;;;7667:68:0;;21933:2:1;7667:68:0;;;21915:21:1;21972:2;21952:18;;;21945:30;22011:34;21991:18;;;21984:62;-1:-1:-1;;;22062:18:1;;;22055:32;22104:19;;7667:68:0;21731:398:1;7667:68:0;-1:-1:-1;;;;;7748:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7800:32;;1775:25:1;;;7800:32:0;;1748:18:1;7800:32:0;;;;;;;7460:380;;;:::o;19154:5472::-;-1:-1:-1;;;;;19286:18:0;;19278:68;;;;-1:-1:-1;;;19278:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19365:16:0;;19357:64;;;;-1:-1:-1;;;19357:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19441:21:0;;;;;;:17;:21;;;;;;;;19440:22;19432:58;;;;-1:-1:-1;;;19432:58:0;;23146:2:1;19432:58:0;;;23128:21:1;23185:2;23165:18;;;23158:30;-1:-1:-1;;;23204:18:1;;;23197:53;23267:18;;19432:58:0;22944:347:1;19432:58:0;19526:9;19508:28;;;;:17;:28;;;;;;;;19507:29;19499:65;;;;-1:-1:-1;;;19499:65:0;;23146:2:1;19499:65:0;;;23128:21:1;23185:2;23165:18;;;23158:30;-1:-1:-1;;;23204:18:1;;;23197:53;23267:18;;19499:65:0;22944:347:1;19499:65:0;19581:11;19578:92;;19609:28;19625:4;19631:2;19635:1;19609:15;:28::i;:::-;19154:5472;;;:::o;19578:92::-;19686:13;;;;19682:132;;-1:-1:-1;;;;;19723:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19752:23:0;;;;;;:19;:23;;;;;;;;19723:52;19715:87;;;;-1:-1:-1;;;19715:87:0;;23498:2:1;19715:87:0;;;23480:21:1;23537:2;23517:18;;;23510:30;-1:-1:-1;;;23556:18:1;;;23549:52;23618:18;;19715:87:0;23296:346:1;19715:87:0;8410:6;;-1:-1:-1;;;;;19852:15:0;;;8410:6;;19852:15;;;;:45;;-1:-1:-1;8410:6:0;;-1:-1:-1;;;;;19884:13:0;;;8410:6;;19884:13;;19852:45;:78;;;;-1:-1:-1;;;;;;19914:16:0;;;;19852:78;:116;;;;-1:-1:-1;;;;;;19947:21:0;;19961:6;19947:21;;19852:116;:142;;;;-1:-1:-1;19986:8:0;;-1:-1:-1;;;19986:8:0;;;;19985:9;19852:142;:183;;;;-1:-1:-1;;;;;;20012:23:0;;;;;;:19;:23;;;;;;;;20011:24;19852:183;:226;;;;-1:-1:-1;;;;;;20053:25:0;;;;;;:19;:25;;;;;;;;20052:26;19852:226;19834:1697;;;20246:20;;;;20242:490;;;20308:9;;-1:-1:-1;;;;;20294:24:0;;;20308:9;;20294:24;;;;:49;;-1:-1:-1;20336:6:0;;-1:-1:-1;;;;;20322:21:0;;;20336:6;;20322:21;;20294:49;20290:423;;;20417:16;20432:1;20417:12;:16;:::i;:::-;20404:9;20379:35;;;;:24;:35;;;;;;:54;:105;;;;-1:-1:-1;20468:16:0;20483:1;20468:12;:16;:::i;:::-;-1:-1:-1;;;;;20437:28:0;;;;;;:24;:28;;;;;;:47;20379:105;20371:171;;;;-1:-1:-1;;;20371:171:0;;23849:2:1;20371:171:0;;;23831:21:1;23888:2;23868:18;;;23861:30;23927:34;23907:18;;;23900:62;-1:-1:-1;;;23978:18:1;;;23971:51;24039:19;;20371:171:0;23647:417:1;20371:171:0;20594:9;20569:35;;;;:24;:35;;;;;;20607:12;20569:50;;;;-1:-1:-1;;;;;20646:28:0;;;;;;:43;20290:423;-1:-1:-1;;;;;20801:31:0;;;;;;:25;:31;;;;;;;;:63;;;;-1:-1:-1;;;;;;20837:27:0;;;;;;:23;:27;;;;;;;;20836:28;20801:63;20797:723;;;20911:12;;20901:6;:22;;20893:80;;;;-1:-1:-1;;;20893:80:0;;24271:2:1;20893:80:0;;;24253:21:1;24310:2;24290:18;;;24283:30;24349:34;24329:18;;;24322:62;-1:-1:-1;;;24400:18:1;;;24393:43;24453:19;;20893:80:0;24069:409:1;20893:80:0;21034:9;;21017:13;21027:2;21017:9;:13::i;:::-;21008:22;;:6;:22;:::i;:::-;:35;;21000:67;;;;-1:-1:-1;;;21000:67:0;;24685:2:1;21000:67:0;;;24667:21:1;24724:2;24704:18;;;24697:30;-1:-1:-1;;;24743:18:1;;;24736:49;24802:18;;21000:67:0;24483:343:1;21000:67:0;20797:723;;;-1:-1:-1;;;;;21161:29:0;;;;;;:25;:29;;;;;;;;:63;;;;-1:-1:-1;;;;;;21195:29:0;;;;;;:23;:29;;;;;;;;21194:30;21161:63;21157:363;;;21271:12;;21261:6;:22;;21253:81;;;;-1:-1:-1;;;21253:81:0;;25033:2:1;21253:81:0;;;25015:21:1;25072:2;25052:18;;;25045:30;25111:34;25091:18;;;25084:62;-1:-1:-1;;;25162:18:1;;;25155:44;25216:19;;21253:81:0;24831:410:1;21157:363:0;-1:-1:-1;;;;;21382:27:0;;;;;;:23;:27;;;;;;;;21377:143;;21467:9;;21450:13;21460:2;21450:9;:13::i;:::-;21441:22;;:6;:22;:::i;:::-;:35;;21433:67;;;;-1:-1:-1;;;21433:67:0;;24685:2:1;21433:67:0;;;24667:21:1;24724:2;24704:18;;;24697:30;-1:-1:-1;;;24743:18:1;;;24736:49;24802:18;;21433:67:0;24483:343:1;21433:67:0;21545:28;21576:24;21594:4;21576:9;:24::i;:::-;21660:18;;21545:55;;-1:-1:-1;21636:42:0;;;;;;;21709:35;;-1:-1:-1;21733:11:0;;;;;;;21709:35;:61;;;;-1:-1:-1;21762:8:0;;-1:-1:-1;;;21762:8:0;;;;21761:9;21709:61;:110;;;;-1:-1:-1;;;;;;21788:31:0;;;;;;:25;:31;;;;;;;;21787:32;21709:110;:153;;;;-1:-1:-1;;;;;;21837:25:0;;;;;;:19;:25;;;;;;;;21836:26;21709:153;:194;;;;-1:-1:-1;;;;;;21880:23:0;;;;;;:19;:23;;;;;;;;21879:24;21709:194;21691:338;;;21930:8;:15;;-1:-1:-1;;;;21930:15:0;-1:-1:-1;;;21930:15:0;;;21974:10;:8;:10::i;:::-;22001:8;:16;;-1:-1:-1;;;;22001:16:0;;;21691:338;22053:8;;-1:-1:-1;;;22053:8:0;;;;22052:9;:42;;;;-1:-1:-1;;;;;;22065:29:0;;;;;;:25;:29;;;;;;;;22052:42;:64;;;;-1:-1:-1;22098:18:0;;;;22052:64;:129;;;;;22161:20;;22139:19;;:42;;;;:::i;:::-;22120:15;:61;;22052:129;:159;;;;-1:-1:-1;;;;;;22186:25:0;;;;;;:19;:25;;;;;;;;22185:26;22052:159;22049:224;;;22227:34;:32;:34::i;:::-;22297:8;;-1:-1:-1;;;22297:8:0;;;;22296:9;:42;;;;-1:-1:-1;;;;;;22309:29:0;;;;;;:25;:29;;;;;;;;22296:42;:64;;;;-1:-1:-1;22342:18:0;;;;22296:64;:129;;;;;22405:20;;22383:19;;:42;;;;:::i;:::-;22364:15;:61;;22296:129;:159;;;;-1:-1:-1;;;;;;22430:25:0;;;;;;:19;:25;;;;;;;;22429:26;22296:159;:208;;;;;22484:20;;22459:21;:45;;22296:208;22293:272;;;22520:33;22532:20;;22520:11;:33::i;:::-;22593:8;;-1:-1:-1;;;;;22702:25:0;;22577:12;22702:25;;;:19;:25;;;;;;22593:8;-1:-1:-1;;;22593:8:0;;;;;22592:9;;22702:25;;:52;;-1:-1:-1;;;;;;22731:23:0;;;;;;:19;:23;;;;;;;;22702:52;22699:99;;;-1:-1:-1;22781:5:0;22699:99;22818:12;22922:7;22919:1654;;;23055:21;:19;:21::i;:::-;:56;;;;-1:-1:-1;;;;;;23080:31:0;;;;;;:25;:31;;;;;;;;23055:56;23052:1352;;;23152:3;23138:11;:6;23147:2;23138:11;:::i;:::-;:17;;;;:::i;:::-;23131:24;;23222:13;;23203:16;;23196:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23174:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23298:13:0;;23281:14;;23274:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;23254:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;23378:13:0;;23359:16;;23352:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;23330:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23446:13:0;;23433:10;;23426:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;23410:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23052:1352:0;;-1:-1:-1;23052:1352:0;;-1:-1:-1;;;;;23522:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23571:1;23555:13;;:17;23522:50;23518:886;;;23624:3;23608:13;;23599:6;:22;;;;:::i;23518:886::-;-1:-1:-1;;;;;23992:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24042:1;24027:12;;:16;23992:51;23989:415;;;24092:3;24077:12;;24068:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24061:34;;24158:12;;24140:15;;24133:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24111:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24232:12:0;;24216:13;;24209:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;24189:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;24310:12:0;;24292:15;;24285:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;24263:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24376:12:0;;24364:9;;24357:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;24341:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;23989:415:0;24435:8;;24432:93;;24467:42;24483:4;24497;24504;24467:15;:42::i;:::-;24547:14;24557:4;24547:14;;:::i;:::-;;;22919:1654;24585:33;24601:4;24607:2;24611:6;24585:15;:33::i;:::-;19267:5359;;;;19154:5472;;;:::o;6539:614::-;-1:-1:-1;;;;;6679:20:0;;6671:70;;;;-1:-1:-1;;;6671:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6760:23:0;;6752:71;;;;-1:-1:-1;;;6752:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6860:17:0;;6836:21;6860:17;;;;;;;;;;;6896:23;;;;6888:74;;;;-1:-1:-1;;;6888:74:0;;25448:2:1;6888:74:0;;;25430:21:1;25487:2;25467:18;;;25460:30;25526:34;25506:18;;;25499:62;-1:-1:-1;;;25577:18:1;;;25570:36;25623:19;;6888:74:0;25246:402:1;6888:74:0;-1:-1:-1;;;;;6998:17:0;;;:9;:17;;;;;;;;;;;7018:22;;;6998:42;;7062:20;;;;;;;;:30;;7034:6;;6998:9;7062:30;;7034:6;;7062:30;:::i;:::-;;;;;;;;7127:9;-1:-1:-1;;;;;7110:35:0;7119:6;-1:-1:-1;;;;;7110:35:0;;7138:6;7110:35;;;;1775:25:1;;1763:2;1748:18;;1629:177;7110:35:0;;;;;;;;6660:493;6539:614;;;:::o;25678:1909::-;25717:23;25743:24;25761:4;25743:9;:24::i;:::-;25717:50;;25778:25;25867:12;;25848:16;;25827:18;;25806;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;:73;;;;:::i;:::-;25778:101;-1:-1:-1;25890:12:0;25926:20;;;:46;;-1:-1:-1;25950:22:0;;25926:46;25923:60;;;25975:7;;;25678:1909::o;25923:60::-;26016:18;;:23;;26037:2;26016:23;:::i;:::-;25998:15;:41;25995:113;;;26073:18;;:23;;26094:2;26073:23;:::i;:::-;26055:41;;25995:113;26177:23;26262:1;26242:17;26221:18;;26203:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26177:86;-1:-1:-1;26274:26:0;26303:33;26177:86;26303:15;:33;:::i;:::-;26274:62;-1:-1:-1;26385:21:0;26419:36;26274:62;26419:16;:36::i;:::-;26477:18;26498:41;26522:17;26498:21;:41;:::i;:::-;26477:62;;26560:23;26661:1;26642:18;;:20;;;;:::i;:::-;26621:42;;:17;:42;:::i;:::-;26599:18;;26586:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;26560:104;;26675:21;26772:1;26753:18;;:20;;;;:::i;:::-;26732:42;;:17;:42;:::i;:::-;26712:16;;26699:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;26675:100;;26786:17;26875:1;26856:18;;:20;;;;:::i;:::-;26835:42;;:17;:42;:::i;:::-;26819:12;;26806:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;26786:92;-1:-1:-1;26899:23:0;26786:92;26956:13;26925:28;26938:15;26925:10;:28;:::i;:::-;:44;;;;:::i;:::-;:56;;;;:::i;:::-;27033:1;27012:18;:22;;;27045:18;:22;;;27078:16;:20;;;27109:12;:16;;;27169:9;;27161:45;;26899:82;;-1:-1:-1;;;;;;27169:9:0;;27192;;27161:45;27033:1;27161:45;27192:9;27169;27161:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27238:15:0;;27230:57;;27148:58;;-1:-1:-1;;;;;;27238:15:0;;27267;;27230:57;;;;27267:15;27238;27230:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27217:70:0;;-1:-1:-1;;27311:19:0;;;;;:42;;;27352:1;27334:15;:19;27311:42;27308:210;;;27369:46;27382:15;27399;27369:12;:46::i;:::-;27487:18;;27435:71;;;25855:25:1;;;25911:2;25896:18;;25889:34;;;25939:18;;;25932:34;;;;27435:71:0;;;;;;25843:2:1;27435:71:0;;;27308:210;25706:1881;;;;;;;;;;;25678:1909::o;18431:188::-;-1:-1:-1;;;;;18514:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;18514:39:0;;;;;;;;;;18571:40;;18514:39;;:31;18571:40;;;18431:188;;:::o;30440:692::-;30535:15;30513:19;:37;30659:6;;30644:22;;-1:-1:-1;;;30644:22:0;;-1:-1:-1;;;;;30659:6:0;;;30644:22;;;780:51:1;30613:28:0;;30644:4;;:14;;753:18:1;;30644:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30613:53;;30729:25;30804:5;30780:21;;30757:20;:44;;;;:::i;:::-;:52;;;;:::i;:::-;30729:80;-1:-1:-1;30834:21:0;;30830:112;;30887:6;;30871:59;;-1:-1:-1;;;;;30887:6:0;30903;30912:17;30871:15;:59::i;:::-;31050:6;;31068:11;;;-1:-1:-1;;;;;;31068:11:0;;;;-1:-1:-1;;;;;31050:6:0;;;;;;31068:9;;:11;;;;;31025:13;;31068:11;;;;;;;31025:13;31050:6;31068:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31095:29;31106:17;31095:29;;;;1775:25:1;;1763:2;1748:18;;1629:177;31095:29:0;;;;;;;;30492:640;;;30440:692::o;29725:562::-;29819:15;29797:19;:37;29855:21;29893:1;29879:16;;24634:513;24726:16;;;24740:1;24726:16;;;;;;;;24702:21;;24726:16;;;;;;;;;;-1:-1:-1;24726:16:0;24702:40;;24771:4;24753;24758:1;24753:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24753:23:0;;;:7;;;;;;;;;;:23;;;;24797:9;;:16;;;-1:-1:-1;;;24797:16:0;;;;:9;;;;;:14;;:16;;;;;24753:7;;24797:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24787:4;24792:1;24787:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24787:26:0;;;:7;;;;;;;;;:26;24858:9;;24826:56;;24843:4;;24858:9;24870:11;24826:8;:56::i;:::-;24921:9;;:218;;-1:-1:-1;;;24921:218:0;;-1:-1:-1;;;;;24921:9:0;;;;:60;;:218;;24996:11;;24921:9;;25066:4;;25093;;25113:15;;24921:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24689:458;24634:513;:::o;25159:511::-;25339:9;;25307:56;;25324:4;;-1:-1:-1;;;;;25339:9:0;25351:11;25307:8;:56::i;:::-;25406:9;;25604:17;;25406:256;;-1:-1:-1;;;25406:256:0;;-1:-1:-1;;;;;25406:9:0;;;;:25;;25439:9;;25406:256;;25472:4;;25492:11;;25406:9;;;;25604:17;;25636:15;;25406:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25159:511;;:::o;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:134::-;1046:20;;1075:31;1046:20;1075:31;:::i;1117:315::-;1185:6;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1301:9;1288:23;1320:31;1345:5;1320:31;:::i;:::-;1370:5;1422:2;1407:18;;;;1394:32;;-1:-1:-1;;;1117:315:1:o;1811:247::-;1870:6;1923:2;1911:9;1902:7;1898:23;1894:32;1891:52;;;1939:1;1936;1929:12;1891:52;1978:9;1965:23;1997:31;2022:5;1997:31;:::i;:::-;2047:5;1811:247;-1:-1:-1;;;1811:247:1:o;2063:180::-;2122:6;2175:2;2163:9;2154:7;2150:23;2146:32;2143:52;;;2191:1;2188;2181:12;2143:52;-1:-1:-1;2214:23:1;;2063:180;-1:-1:-1;2063:180:1:o;2248:456::-;2325:6;2333;2341;2394:2;2382:9;2373:7;2369:23;2365:32;2362:52;;;2410:1;2407;2400:12;2362:52;2449:9;2436:23;2468:31;2493:5;2468:31;:::i;:::-;2518:5;-1:-1:-1;2575:2:1;2560:18;;2547:32;2588:33;2547:32;2588:33;:::i;:::-;2248:456;;2640:7;;-1:-1:-1;;;2694:2:1;2679:18;;;;2666:32;;2248:456::o;2709:127::-;2770:10;2765:3;2761:20;2758:1;2751:31;2801:4;2798:1;2791:15;2825:4;2822:1;2815:15;2841:1121;2925:6;2956:2;2999;2987:9;2978:7;2974:23;2970:32;2967:52;;;3015:1;3012;3005:12;2967:52;3055:9;3042:23;3084:18;3125:2;3117:6;3114:14;3111:34;;;3141:1;3138;3131:12;3111:34;3179:6;3168:9;3164:22;3154:32;;3224:7;3217:4;3213:2;3209:13;3205:27;3195:55;;3246:1;3243;3236:12;3195:55;3282:2;3269:16;3304:2;3300;3297:10;3294:36;;;3310:18;;:::i;:::-;3356:2;3353:1;3349:10;3388:2;3382:9;3451:2;3447:7;3442:2;3438;3434:11;3430:25;3422:6;3418:38;3506:6;3494:10;3491:22;3486:2;3474:10;3471:18;3468:46;3465:72;;;3517:18;;:::i;:::-;3553:2;3546:22;3603:18;;;3637:15;;;;-1:-1:-1;3679:11:1;;;3675:20;;;3707:19;;;3704:39;;;3739:1;3736;3729:12;3704:39;3763:11;;;;3783:148;3799:6;3794:3;3791:15;3783:148;;;3865:23;3884:3;3865:23;:::i;:::-;3853:36;;3816:12;;;;3909;;;;3783:148;;;3950:6;2841:1121;-1:-1:-1;;;;;;;;2841:1121:1:o;4175:385::-;4261:6;4269;4277;4285;4338:3;4326:9;4317:7;4313:23;4309:33;4306:53;;;4355:1;4352;4345:12;4306:53;-1:-1:-1;;4378:23:1;;;4448:2;4433:18;;4420:32;;-1:-1:-1;4499:2:1;4484:18;;4471:32;;4550:2;4535:18;4522:32;;-1:-1:-1;4175:385:1;-1:-1:-1;4175:385:1:o;4754:160::-;4819:20;;4875:13;;4868:21;4858:32;;4848:60;;4904:1;4901;4894:12;4919:316;4993:6;5001;5009;5062:2;5050:9;5041:7;5037:23;5033:32;5030:52;;;5078:1;5075;5068:12;5030:52;5114:9;5101:23;5091:33;;5171:2;5160:9;5156:18;5143:32;5133:42;;5194:35;5225:2;5214:9;5210:18;5194:35;:::i;:::-;5184:45;;4919:316;;;;;:::o;5240:315::-;5305:6;5313;5366:2;5354:9;5345:7;5341:23;5337:32;5334:52;;;5382:1;5379;5372:12;5334:52;5421:9;5408:23;5440:31;5465:5;5440:31;:::i;:::-;5490:5;-1:-1:-1;5514:35:1;5545:2;5530:18;;5514:35;:::i;:::-;5504:45;;5240:315;;;;;:::o;5560:180::-;5616:6;5669:2;5657:9;5648:7;5644:23;5640:32;5637:52;;;5685:1;5682;5675:12;5637:52;5708:26;5724:9;5708:26;:::i;5745:598::-;5831:6;5839;5847;5855;5908:3;5896:9;5887:7;5883:23;5879:33;5876:53;;;5925:1;5922;5915:12;5876:53;5961:9;5948:23;5938:33;;6021:2;6010:9;6006:18;5993:32;6034:31;6059:5;6034:31;:::i;:::-;6084:5;-1:-1:-1;6141:2:1;6126:18;;6113:32;6154:33;6113:32;6154:33;:::i;:::-;6206:7;-1:-1:-1;6265:2:1;6250:18;;6237:32;6278:33;6237:32;6278:33;:::i;:::-;5745:598;;;;-1:-1:-1;5745:598:1;;-1:-1:-1;;5745:598:1:o;6348:388::-;6416:6;6424;6477:2;6465:9;6456:7;6452:23;6448:32;6445:52;;;6493:1;6490;6483:12;6445:52;6532:9;6519:23;6551:31;6576:5;6551:31;:::i;:::-;6601:5;-1:-1:-1;6658:2:1;6643:18;;6630:32;6671:33;6630:32;6671:33;:::i;:::-;6723:7;6713:17;;;6348:388;;;;;:::o;6741:380::-;6820:1;6816:12;;;;6863;;;6884:61;;6938:4;6930:6;6926:17;6916:27;;6884:61;6991:2;6983:6;6980:14;6960:18;6957:38;6954:161;;;7037:10;7032:3;7028:20;7025:1;7018:31;7072:4;7069:1;7062:15;7100:4;7097:1;7090:15;6954:161;;6741:380;;;:::o;7126:356::-;7328:2;7310:21;;;7347:18;;;7340:30;7406:34;7401:2;7386:18;;7379:62;7473:2;7458:18;;7126:356::o;7487:127::-;7548:10;7543:3;7539:20;7536:1;7529:31;7579:4;7576:1;7569:15;7603:4;7600:1;7593:15;7619:168;7659:7;7725:1;7721;7717:6;7713:14;7710:1;7707:21;7702:1;7695:9;7688:17;7684:45;7681:71;;;7732:18;;:::i;:::-;-1:-1:-1;7772:9:1;;7619:168::o;7792:217::-;7832:1;7858;7848:132;;7902:10;7897:3;7893:20;7890:1;7883:31;7937:4;7934:1;7927:15;7965:4;7962:1;7955:15;7848:132;-1:-1:-1;7994:9:1;;7792:217::o;8831:127::-;8892:10;8887:3;8883:20;8880:1;8873:31;8923:4;8920:1;8913:15;8947:4;8944:1;8937:15;9320:398;9522:2;9504:21;;;9561:2;9541:18;;;9534:30;9600:34;9595:2;9580:18;;9573:62;-1:-1:-1;;;9666:2:1;9651:18;;9644:32;9708:3;9693:19;;9320:398::o;9723:135::-;9762:3;-1:-1:-1;;9783:17:1;;9780:43;;;9803:18;;:::i;:::-;-1:-1:-1;9850:1:1;9839:13;;9723:135::o;9863:128::-;9903:3;9934:1;9930:6;9927:1;9924:13;9921:39;;;9940:18;;:::i;:::-;-1:-1:-1;9976:9:1;;9863:128::o;10355:125::-;10395:4;10423:1;10420;10417:8;10414:34;;;10428:18;;:::i;:::-;-1:-1:-1;10465:9:1;;10355:125::o;11257:184::-;11327:6;11380:2;11368:9;11359:7;11355:23;11351:32;11348:52;;;11396:1;11393;11386:12;11348:52;-1:-1:-1;11419:16:1;;11257:184;-1:-1:-1;11257:184:1:o;13076:127::-;13137:10;13132:3;13128:20;13125:1;13118:31;13168:4;13165:1;13158:15;13192:4;13189:1;13182:15;13620:251;13690:6;13743:2;13731:9;13722:7;13718:23;13714:32;13711:52;;;13759:1;13756;13749:12;13711:52;13791:9;13785:16;13810:31;13835:5;13810:31;:::i;14996:607::-;-1:-1:-1;;;;;15355:15:1;;;15337:34;;15402:2;15387:18;;15380:34;;;;15445:2;15430:18;;15423:34;;;;15488:2;15473:18;;15466:34;;;;15537:15;;;15531:3;15516:19;;15509:44;15317:3;15569:19;;15562:35;;;;15286:3;15271:19;;14996:607::o;15608:306::-;15696:6;15704;15712;15765:2;15753:9;15744:7;15740:23;15736:32;15733:52;;;15781:1;15778;15771:12;15733:52;15810:9;15804:16;15794:26;;15860:2;15849:9;15845:18;15839:25;15829:35;;15904:2;15893:9;15889:18;15883:25;15873:35;;15608:306;;;;;:::o;20345:461::-;20398:3;20436:5;20430:12;20463:6;20458:3;20451:19;20489:4;20518:2;20513:3;20509:12;20502:19;;20555:2;20548:5;20544:14;20576:1;20586:195;20600:6;20597:1;20594:13;20586:195;;;20665:13;;-1:-1:-1;;;;;20661:39:1;20649:52;;20721:12;;;;20756:15;;;;20697:1;20615:9;20586:195;;;-1:-1:-1;20797:3:1;;20345:461;-1:-1:-1;;;;;20345:461:1:o;20811:510::-;21082:6;21071:9;21064:25;21125:3;21120:2;21109:9;21105:18;21098:31;21045:4;21146:57;21198:3;21187:9;21183:19;21175:6;21146:57;:::i;:::-;-1:-1:-1;;;;;21239:32:1;;;;21234:2;21219:18;;21212:60;-1:-1:-1;21303:2:1;21288:18;21281:34;21138:65;20811:510;-1:-1:-1;;20811:510:1:o;22134:401::-;22336:2;22318:21;;;22375:2;22355:18;;;22348:30;22414:34;22409:2;22394:18;;22387:62;-1:-1:-1;;;22480:2:1;22465:18;;22458:35;22525:3;22510:19;;22134:401::o;22540:399::-;22742:2;22724:21;;;22781:2;22761:18;;;22754:30;22820:34;22815:2;22800:18;;22793:62;-1:-1:-1;;;22886:2:1;22871:18;;22864:33;22929:3;22914:19;;22540:399::o;25977:582::-;26276:6;26265:9;26258:25;26319:6;26314:2;26303:9;26299:18;26292:34;26362:3;26357:2;26346:9;26342:18;26335:31;26239:4;26383:57;26435:3;26424:9;26420:19;26412:6;26383:57;:::i;:::-;-1:-1:-1;;;;;26476:32:1;;;;26471:2;26456:18;;26449:60;-1:-1:-1;26540:3:1;26525:19;26518:35;26375:65;25977:582;-1:-1:-1;;;25977:582:1:o

Swarm Source

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