ETH Price: $3,416.98 (-0.89%)
Gas: 6 Gwei

Token

GALILEO (GALI)
 

Overview

Max Total Supply

100,000,000 GALI

Holders

599

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,081.690741495144365529 GALI

Value
$0.00
0x1f671d7965e2fd39cc80c1bab0cb54aba6339d7f
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:
ASTRONOMERS

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT                                                                               

/*           _____                    _____                    _____            _____          
         /\    \                  /\    \                  /\    \          /\    \         
        /::\    \                /::\    \                /::\____\        /::\    \        
       /::::\    \              /::::\    \              /:::/    /        \:::\    \       
      /::::::\    \            /::::::\    \            /:::/    /          \:::\    \      
     /:::/\:::\    \          /:::/\:::\    \          /:::/    /            \:::\    \     
    /:::/  \:::\    \        /:::/__\:::\    \        /:::/    /              \:::\    \    
   /:::/    \:::\    \      /::::\   \:::\    \      /:::/    /               /::::\    \   
  /:::/    / \:::\    \    /::::::\   \:::\    \    /:::/    /       ____    /::::::\    \  
 /:::/    /   \:::\ ___\  /:::/\:::\   \:::\    \  /:::/    /       /\   \  /:::/\:::\    \ 
/:::/____/  ___\:::|    |/:::/  \:::\   \:::\____\/:::/____/       /::\   \/:::/  \:::\____\
\:::\    \ /\  /:::|____|\::/    \:::\  /:::/    /\:::\    \       \:::\  /:::/    \::/    /
 \:::\    /::\ \::/    /  \/____/ \:::\/:::/    /  \:::\    \       \:::\/:::/    / \/____/ 
  \:::\   \:::\ \/____/            \::::::/    /    \:::\    \       \::::::/    /          
   \:::\   \:::\____\               \::::/    /      \:::\    \       \::::/____/           
    \:::\  /:::/    /               /:::/    /        \:::\    \       \:::\    \           
     \:::\/:::/    /               /:::/    /          \:::\    \       \:::\    \          
      \::::::/    /               /:::/    /            \:::\    \       \:::\    \         
       \::::/    /               /:::/    /              \:::\____\       \:::\____\        
        \::/____/                \::/    /                \::/    /        \::/    /        
                                  \/____/                  \/____/          \/____/         
                                                                                            */



// 𝔸 ℂ𝕆𝕄𝕄𝕌ℕ𝕀𝕋𝕐 ℂ𝕆𝕀ℕ𝔼𝔻 𝔽ℝ𝕆𝕄 𝔸𝕊𝕋ℝ𝕆ℕ𝕆𝕄𝔼ℝ𝕊, 𝔼ℕ𝕋𝔼ℝ 𝕀𝔽 𝕐𝕆𝕌 ℍ𝔸𝕍𝔼 𝕋ℍ𝔼 𝕎𝕀𝕃𝕃 𝔸ℕ𝔻 ℙ𝔼ℝ𝕊𝔼𝕍𝔼ℝ𝔸ℕℂ𝔼 𝕋𝕆 𝕋ℝ𝔸𝕍𝔼ℝ𝕊𝔼 𝕋ℍ𝔼 𝕊𝕋𝔸ℝ𝕊                                                   

pragma solidity 0.8.15;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface 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);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

contract ASTRONOMERS is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public galiAddress;

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

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

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

    uint256 public buyTotalFees;
    uint256 public buyGaliFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellGaliFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForGali;
    uint256 public tokensForLiquidity;

    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 1 days;
    bool public lpWithdrawRequestPending;
    uint256 public lpPercToWithDraw;

    uint256 public percentForLPBurn = 5; // 5 = .05%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 1800 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 seconds;
    uint256 public lastManualLpBurnTime;
    
    /******************/

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

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedGaliAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

    event RequestedLPWithdraw();
    
    event WithdrewLPForMigration();

    event CanceledLpWithdrawRequest();

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

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 4){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 1 * 1e8 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 1 / 100;
        maxSellAmount = totalSupply * 1 / 100;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyGaliFee = 0;
        buyLiquidityFee = 1500;
        buyBurnFee = 500;
        buyTotalFees = buyGaliFee + buyLiquidityFee + buyBurnFee;

        sellGaliFee = 0;
        sellLiquidityFee = 1500;
        sellBurnFee = 500;
        sellTotalFees = sellGaliFee + sellLiquidityFee + sellBurnFee;

        galiAddress = address(msg.sender);

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

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

        
        _createInitialSupply(address(this), totalSupply * 80 / 100);  // update with % for LP
        _createInitialSupply(newOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 50, "Cannot make penalty blocks more than 50");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

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

    function massRemoveBoughtEarly(address[] calldata accounts) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = false;
        }
    }

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

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max wallet amount lower than %");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }
     
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

    function updateBuyFees(uint256 _galiFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        buyGaliFee = _galiFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyGaliFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 10 * FEE_DIVISOR / 100, "Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _galiFee, uint256 _liquidityFee,uint256 _burnFee) external onlyOwner {
        sellGaliFee = _galiFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellGaliFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 20 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

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

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                //enforce max sell restrictions.
                require(nextPrivateWalletSellDate[from] <= block.timestamp, "Cannot sell yet");
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
                nextPrivateWalletSellDate[from] = block.timestamp + 24 hours;
            } else if(!_isExcludedFromFees[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // 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(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                }
            }
        }

        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] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

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

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

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

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForGali += fees * buyGaliFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForGali += fees * sellGaliFee / sellTotalFees;
                tokensToBurn = fees * sellBurnFee / buyTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForGali += fees * buyGaliFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if(tokensToBurn > 0){
                    super._transfer(address(this), address(0xdead), tokensToBurn);
                }
            }
        	
        	amount -= fees;
        }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForGali;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForGali = ethBalance * tokensForGali / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForGali;
            
        tokensForLiquidity = 0;
        tokensForGali = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

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

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

    function setGaliAddress(address _galiAddress) external onlyOwner {
        require(_galiAddress != address(0), "_galiAddress address cannot be 0");
        galiAddress = payable(_galiAddress);
        emit UpdatedGaliAddress(_galiAddress);
    }

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

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (sellLiquidityFee + sellGaliFee))/100;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner{
        require(amount >= 10 && amount <= 50000, "Must set between 0.1 and 500 BNB");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 50, "Cannot make penalty blocks more than 50");

        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            privateSaleWallets[wallet] = true;
            nextPrivateWalletSellDate[wallet] = block.timestamp + 24 hours;
            uint256 amount = amountsInTokens[i] * (10 ** decimals());
            super._transfer(msg.sender, wallet, amount);
        }

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

        // 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, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function setAutoLPBurnSettings(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 burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

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

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

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <=2000, "May not burn more than 20% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

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

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

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function requestToWithdrawLP(uint256 percToWithdraw) external onlyOwner {
        require(!lpWithdrawRequestPending, "Cannot request again until first request is over.");
        require(percToWithdraw <= 100 && percToWithdraw > 0, "Need to set between 1-100%");
        lpWithdrawRequestTimestamp = block.timestamp;
        lpWithdrawRequestPending = true;
        lpPercToWithDraw = percToWithdraw;
        emit RequestedLPWithdraw();
    }

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        if(lpWithdrawRequestPending){
            return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration;
        }
        else {
            return 0;  // 0 means no open requests
        }
    }

    function withdrawRequestedLP() external onlyOwner {
        require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait.");
        lpWithdrawRequestTimestamp = 0;
        lpWithdrawRequestPending = false;

        uint256 amtToWithdraw = IERC20(address(lpPair)).balanceOf(address(this)) * lpPercToWithDraw / 100;
        
        lpPercToWithDraw = 0;

        IERC20(lpPair).transfer(msg.sender, amtToWithdraw);
    }

    function cancelLPWithdrawRequest() external onlyOwner {
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }
}

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":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"RequestedLPWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedGaliAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyGaliFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"galiAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","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":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"massRemoveBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellGaliFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":[{"internalType":"address","name":"_galiAddress","type":"address"}],"name":"setGaliAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","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":"tokensForGali","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_galiFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_galiFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805462ffffff19166001908117909155670de0b6b3a76400006015556017805460ff199081169092179055620151806023556005602655602780549091169055610708602855601e602a55600760809081526647414c494c454f60c81b60a052610100604052600460c09081526347414c4960e01b60e05260036200008c8382620007d9565b5060046200009b8282620007d9565b5050506000620000b06200044160201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062006043833981519152908290a35033600046600103620001155750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f7565b466004036200013a5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f7565b466038036200015f57507310ed43c718714eb63d5aa57b78b54704e256024e620001f7565b4660610362000184575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f7565b4661a4b103620001aa5750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001f7565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b03831617905560006200021d601290565b6200022a90600a620009ba565b6200023a906305f5e100620009d2565b905060646200024b826001620009d2565b620002579190620009f4565b600655606462000269826001620009d2565b620002759190620009f4565b600755606462000287826001620009d2565b620002939190620009f4565b600855620186a0620002a7826019620009d2565b620002b39190620009f4565b600b55600060198190556105dc601a8190556101f4601b81905591620002da919062000a17565b620002e6919062000a17565b6018556000601d8190556105dc601e8190556101f4601f819055916200030d919062000a17565b62000319919062000a17565b601c55600c80546001600160a01b031916331790556200033b83600162000445565b6200034830600162000445565b6200035761dead600162000445565b600c5462000370906001600160a01b0316600162000445565b60095462000389906001600160a01b0316600162000445565b62000396836001620004a8565b620003a3306001620004a8565b620003b261dead6001620004a8565b600c54620003cb906001600160a01b03166001620004a8565b600954620003e4906001600160a01b03166001620004a8565b6200040a306064620003f8846050620009d2565b620004049190620009f4565b62000552565b306000908152602081905260409020546200042d90849062000404908462000a32565b620004388362000637565b50505062000a4c565b3390565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620004f35760405162461bcd60e51b81526020600482018190526024820152600080516020620060238339815191526044820152606401620001ee565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005aa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001ee565b8060026000828254620005be919062000a17565b90915550506001600160a01b03821660009081526020819052604081208054839290620005ed90849062000a17565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006825760405162461bcd60e51b81526020600482018190526024820152600080516020620060238339815191526044820152606401620001ee565b6001600160a01b038116620006e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001ee565b6005546040516001600160a01b038084169216906000805160206200604383398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075f57607f821691505b6020821081036200078057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007d457600081815260208120601f850160051c81016020861015620007af5750805b601f850160051c820191505b81811015620007d057828155600101620007bb565b5050505b505050565b81516001600160401b03811115620007f557620007f562000734565b6200080d816200080684546200074a565b8462000786565b602080601f8311600181146200084557600084156200082c5750858301515b600019600386901b1c1916600185901b178555620007d0565b600085815260208120601f198616915b82811015620008765788860151825594840194600190910190840162000855565b5085821015620008955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008fc578160001904821115620008e057620008e0620008a5565b80851615620008ee57918102915b93841c9390800290620008c0565b509250929050565b6000826200091557506001620009b4565b816200092457506000620009b4565b81600181146200093d5760028114620009485762000968565b6001915050620009b4565b60ff8411156200095c576200095c620008a5565b50506001821b620009b4565b5060208310610133831016604e8410600b84101617156200098d575081810a620009b4565b620009998383620008bb565b8060001904821115620009b057620009b0620008a5565b0290505b92915050565b6000620009cb60ff84168362000904565b9392505050565b6000816000190483118215151615620009ef57620009ef620008a5565b500290565b60008262000a1257634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000a2d5762000a2d620008a5565b500190565b60008282101562000a475762000a47620008a5565b500390565b6155c78062000a5c6000396000f3fe6080604052600436106104c45760003560e01c806385ecfd2811610276578063c876d0b91161014f578063ee44b44e116100c1578063f5648a4f11610085578063f5648a4f14610e24578063f637434214610e39578063f8b45b0514610e4f578063fd361d0e14610e65578063fe72b27a14610e7f578063ff26a80014610e9f57600080fd5b8063ee44b44e14610da2578063eea362f314610db8578063ef75bd4914610dce578063f11a24d314610dee578063f2fde38b14610e0457600080fd5b8063e2f4560511610113578063e2f4560514610d0b578063e71dc3f514610d21578063e884f26014610d37578063ead010ae14610d4c578063eb472fc414610d6c578063ee40166e14610d8c57600080fd5b8063c876d0b914610c55578063d257b34f14610c6f578063d85ba06314610c8f578063dc3f0d0f14610ca5578063dd62ed3e14610cc557600080fd5b8063a9059cbb116101e8578063bbc0c742116101ac578063bbc0c74214610ba1578063bd5fb92014610bc0578063befd2fac14610be0578063c024666814610c00578063c17b5b8c14610c20578063c7c61e2c14610c4057600080fd5b8063a9059cbb14610af5578063acee28d114610b15578063adb873bd14610b2b578063afd6ce6114610b41578063b62496f514610b7157600080fd5b80639a7a23d61161023a5780639a7a23d614610a5d5780639e93ad8e14610a7d5780639ec22c0e14610a93578063a457c2d714610aa9578063a4c82a0014610ac9578063a62068ce14610adf57600080fd5b806385ecfd28146109c257806388e765ff146109f25780638da5cb5b14610a0857806395d89b4114610a265780639a5bd2dd14610a3b57600080fd5b806351f205e4116103a8578063712c29851161031a5780637571336a116102de5780637571336a14610917578063763cef4914610937578063783102eb1461094c5780638095d5641461096257806382aa7c68146109825780638366e79a146109a257600080fd5b8063712c2985146108a3578063713d0974146108b8578063715018a6146108cd578063730c1888146108e2578063751039fc1461090257600080fd5b806366d602ae1161036c57806366d602ae146108015780636a486a8e146108175780636b0a894c1461082d5780636ddd1713146108435780636fa5a6011461086357806370a082311461088357600080fd5b806351f205e41461076857806354b857461461077d57806358a6d5311461079d5780635bb988c9146107b45780635c3352d3146107d457600080fd5b80631a8145bb116104415780632e82f1a0116104055780632e82f1a0146106c25780632ea2b658146106dc578063313ce567146106f2578063395093511461070e578063452ed4f11461072e5780634a62bb651461074e57600080fd5b80631a8145bb146106365780631c499ab01461064c57806323b872dd1461066c5780632be32b611461068c5780632c3e486c146106ac57600080fd5b80631805805b116104885780631805805b146105b357806318160ddd146105d5578063184c16c5146105ea57806318e1c12314610600578063199ffc721461062057600080fd5b8063058054c9146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b31461055357806310d5de531461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e660225481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610eb5565b6040516104f09190614be5565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e366004614c52565b610f47565b60405190151581526020016104f0565b34801561058f57600080fd5b5061057361059e366004614c7e565b602d6020526000908152604090205460ff1681565b3480156105bf57600080fd5b506105d36105ce366004614c7e565b610f5e565b005b3480156105e157600080fd5b506002546104e6565b3480156105f657600080fd5b506104e6602a5481565b34801561060c57600080fd5b506105d361061b366004614ca2565b61101d565b34801561062c57600080fd5b506104e660265481565b34801561064257600080fd5b506104e660215481565b34801561065857600080fd5b506105d3610667366004614ca2565b6110f1565b34801561067857600080fd5b50610573610687366004614cbb565b6111fd565b34801561069857600080fd5b506105d36106a7366004614ca2565b6112a7565b3480156106b857600080fd5b506104e660285481565b3480156106ce57600080fd5b506027546105739060ff1681565b3480156106e857600080fd5b506104e660205481565b3480156106fe57600080fd5b50604051601281526020016104f0565b34801561071a57600080fd5b50610573610729366004614c52565b6113b4565b34801561073a57600080fd5b50600a5461053b906001600160a01b031681565b34801561075a57600080fd5b506012546105739060ff1681565b34801561077457600080fd5b506105d36113f0565b34801561078957600080fd5b506105d3610798366004614d48565b6114f9565b3480156107a957600080fd5b50600e544310610573565b3480156107c057600080fd5b506105d36107cf366004614c7e565b61159a565b3480156107e057600080fd5b506104e66107ef366004614c7e565b60146020526000908152604090205481565b34801561080d57600080fd5b506104e660075481565b34801561082357600080fd5b506104e6601c5481565b34801561083957600080fd5b506104e660115481565b34801561084f57600080fd5b506012546105739062010000900460ff1681565b34801561086f57600080fd5b506105d361087e366004614c7e565b61164d565b34801561088f57600080fd5b506104e661089e366004614c7e565b611717565b3480156108af57600080fd5b506104e6611732565b3480156108c457600080fd5b506104e661175b565b3480156108d957600080fd5b506105d3611957565b3480156108ee57600080fd5b506105d36108fd366004614d98565b6119cb565b34801561090e57600080fd5b506105d3611af4565b34801561092357600080fd5b506105d3610932366004614dd1565b611b6b565b34801561094357600080fd5b506105d3611c33565b34801561095857600080fd5b506104e660255481565b34801561096e57600080fd5b506105d361097d366004614e0a565b611dd4565b34801561098e57600080fd5b506105d361099d366004614ca2565b611e8f565b3480156109ae57600080fd5b506105736109bd366004614e36565b611f83565b3480156109ce57600080fd5b506105736109dd366004614c7e565b600f6020526000908152604090205460ff1681565b3480156109fe57600080fd5b506104e660065481565b348015610a1457600080fd5b506005546001600160a01b031661053b565b348015610a3257600080fd5b5061050e6121bd565b348015610a4757600080fd5b50610a506121cc565b6040516104f09190614ea8565b348015610a6957600080fd5b506105d3610a78366004614dd1565b61222d565b348015610a8957600080fd5b506104e661271081565b348015610a9f57600080fd5b506104e6602b5481565b348015610ab557600080fd5b50610573610ac4366004614c52565b612321565b348015610ad557600080fd5b506104e660295481565b348015610aeb57600080fd5b506104e6600e5481565b348015610b0157600080fd5b50610573610b10366004614c52565b6123ba565b348015610b2157600080fd5b506104e660155481565b348015610b3757600080fd5b506104e6601f5481565b348015610b4d57600080fd5b50610573610b5c366004614c7e565b60136020526000908152604090205460ff1681565b348015610b7d57600080fd5b50610573610b8c366004614c7e565b602e6020526000908152604090205460ff1681565b348015610bad57600080fd5b5060125461057390610100900460ff1681565b348015610bcc57600080fd5b506105d3610bdb366004614ebb565b6123c7565b348015610bec57600080fd5b506105d3610bfb366004614ca2565b6124d3565b348015610c0c57600080fd5b506105d3610c1b366004614dd1565b612609565b348015610c2c57600080fd5b506105d3610c3b366004614e0a565b612692565b348015610c4c57600080fd5b506105d361274d565b348015610c6157600080fd5b506017546105739060ff1681565b348015610c7b57600080fd5b506105d3610c8a366004614ca2565b6127b6565b348015610c9b57600080fd5b506104e660185481565b348015610cb157600080fd5b506105d3610cc0366004614ca2565b612901565b348015610cd157600080fd5b506104e6610ce0366004614e36565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d1757600080fd5b506104e6600b5481565b348015610d2d57600080fd5b506104e6601b5481565b348015610d4357600080fd5b506105d3612a0f565b348015610d5857600080fd5b506105d3610d67366004614fdd565b612a45565b348015610d7857600080fd5b5061053b610d87366004614ca2565b612ff3565b348015610d9857600080fd5b506104e6600d5481565b348015610dae57600080fd5b506104e660235481565b348015610dc457600080fd5b506104e660195481565b348015610dda57600080fd5b50600c5461053b906001600160a01b031681565b348015610dfa57600080fd5b506104e6601a5481565b348015610e1057600080fd5b506105d3610e1f366004614c7e565b61301d565b348015610e3057600080fd5b506105d3613108565b348015610e4557600080fd5b506104e6601e5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506024546105739060ff1681565b348015610e8b57600080fd5b506105d3610e9a366004614ca2565b613174565b348015610eab57600080fd5b506104e6601d5481565b606060038054610ec4906150a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef0906150a8565b8015610f3d5780601f10610f1257610100808354040283529160200191610f3d565b820191906000526020600020905b815481529060010190602001808311610f2057829003601f168201915b5050505050905090565b6000610f5433848461346e565b5060015b92915050565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f88906150e2565b60405180910390fd5b601254610100900460ff1615610ffb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f88565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610f88906150e2565b600a811015801561105a575061c3508111155b6110a65760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f88565b6110b781662386f26fc1000061512d565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610f88906150e2565b6111276012600a615230565b606461113260025490565b61113d90600161512d565b611147919061523f565b611151919061523f565b8110156111b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f88565b6111be6012600a615230565b6111c8908261512d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110e6565b600061120a848484613592565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561128f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f88565b61129c853385840361346e565b506001949350505050565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610f88906150e2565b6112dd6012600a615230565b6103e86112e960025490565b6112f490600161512d565b6112fe919061523f565b611308919061523f565b8110156113695760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f88565b6113756012600a615230565b61137f908261512d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110e6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f549185906113eb908690615261565b61346e565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610f88906150e2565b600b5461142630611717565b101561149c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f88565b600a805460ff60a01b1916600160a01b1790556114b761433f565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115235760405162461bcd60e51b8152600401610f88906150e2565b60005b81811015611595576000600f600085858581811061154657611546615279565b905060200201602081019061155b9190614c7e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061158d8161528f565b915050611526565b505050565b6005546001600160a01b031633146115c45760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0381166000908152600f602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610f88565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0381166116cd5760405162461bcd60e51b815260206004820181905260248201527f5f67616c694164647265737320616464726573732063616e6e6f7420626520306044820152606401610f88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f8c962d22cfb899100e2df3e08d272d1fcc4665cf4b4739b09451fcc5ac75e18690600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff1615611755576023546022546117509190615261565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906152a8565b8160008151811061180057611800615279565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061183457611834615279565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916118a39186906004016152c5565b600060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118e891908101906152e6565b90506064601d54601e546118fc9190615261565b8260018151811061190f5761190f615279565b6020026020010151611921919061512d565b61192b919061523f565b8160018151811061193e5761193e615279565b60200260200101516119509190615261565b9250505090565b6005546001600160a01b031633146119815760405162461bcd60e51b8152600401610f88906150e2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119f55760405162461bcd60e51b8152600401610f88906150e2565b610258831015611a635760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f88565b6103e88211158015611a73575060015b611ad85760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f88565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b03163314611b1e5760405162461bcd60e51b8152600401610f88906150e2565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611b955760405162461bcd60e51b8152600401610f88906150e2565b80611c0857600a546001600160a01b0390811690831603611c085760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f88565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c5d5760405162461bcd60e51b8152600401610f88906150e2565b611c65611732565b4210158015611c7b57506000611c79611732565b115b611cc05760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f88565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d419190615377565b611d4b919061512d565b611d55919061523f565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd09190615390565b5050565b6005546001600160a01b03163314611dfe5760405162461bcd60e51b8152600401610f88906150e2565b6019839055601a829055601b81905580611e188385615261565b611e229190615261565b6018556064611e34612710600a61512d565b611e3e919061523f565b60185411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b03163314611eb95760405162461bcd60e51b8152600401610f88906150e2565b601254610100900460ff1615611f115760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f88565b6032811115611f325760405162461bcd60e51b8152600401610f88906153ad565b6012805462ffff0019166201010017905543600d819055611f54908290615261565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611fb05760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0383166120065760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f88565b6001600160a01b038316301415806120265750601254610100900460ff16155b61208f5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f88565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fa9190615377565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561214d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121719190615390565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610ec4906150a8565b60606010805480602002602001604051908101604052809291908181526020018280548015610f3d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612206575050505050905090565b6005546001600160a01b031633146122575760405162461bcd60e51b8152600401610f88906150e2565b600a546001600160a01b03908116908316036122db5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f88565b6122e582826144a1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f88565b6123b0338585840361346e565b5060019392505050565b6000610f54338484613592565b6005546001600160a01b031633146123f15760405162461bcd60e51b8152600401610f88906150e2565b60005b828110156124cd5781602c600086868581811061241357612413615279565b90506020020160208101906124289190614c7e565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061246257612462615279565b90506020020160208101906124779190614c7e565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516124b3911515815260200190565b60405180910390a2806124c58161528f565b9150506123f4565b50505050565b6005546001600160a01b031633146124fd5760405162461bcd60e51b8152600401610f88906150e2565b60245460ff161561256a5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f88565b6064811115801561257b5750600081115b6125c75760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f88565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b031633146126335760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126bc5760405162461bcd60e51b8152600401610f88906150e2565b601d839055601e829055601f819055806126d68385615261565b6126e09190615261565b601c5560646126f2612710601461512d565b6126fc919061523f565b601c5411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b031633146127775760405162461bcd60e51b8152600401610f88906150e2565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b031633146127e05760405162461bcd60e51b8152600401610f88906150e2565b620186a06127ed60025490565b6127f890600161512d565b612802919061523f565b81101561286f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f88565b6103e861287b60025490565b61288690600161512d565b612890919061523f565b8111156128fc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f88565b600b55565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f88906150e2565b6129376012600a615230565b6103e861294360025490565b61294e90600161512d565b612958919061523f565b612962919061523f565b8110156129c45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f88565b6129d06012600a615230565b6129da908261512d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e6565b6005546001600160a01b03163314612a395760405162461bcd60e51b8152600401610f88906150e2565b6017805460ff19169055565b6005546001600160a01b03163314612a6f5760405162461bcd60e51b8152600401610f88906150e2565b601254610100900460ff1615612adb5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f88565b60328110612afb5760405162461bcd60e51b8152600401610f88906153ad565b8151835114612b4c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f88565b61012c835110612bbd5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f88565b60005b8351811015612c8a576000848281518110612bdd57612bdd615279565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612c1c4262015180615261565b6001600160a01b038216600090815260146020526040812091909155612c446012600a615230565b858481518110612c5657612c56615279565b6020026020010151612c68919061512d565b9050612c753383836144cf565b50508080612c829061528f565b915050612bc0565b506012805462ffff0019166201010017905543600d819055612cad908290615261565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5091906152a8565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd691906152a8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4791906152a8565b600a80546001600160a01b0319166001600160a01b03929092169182179055612e71906001614624565b600a54612e88906001600160a01b031660016144a1565b60004711612ee45760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f88565b6000612eef30611717565b11612f4b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f88565b600954612f669030906001600160a01b03166113eb82611717565b6009546001600160a01b031663f305d7194730612f8281611717565b60008030426040518863ffffffff1660e01b8152600401612fa8969594939291906153f4565b60606040518083038185885af1158015612fc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612feb919061542f565b505050505050565b6010818154811061300357600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146130475760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0381166130ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f88565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146131325760405162461bcd60e51b8152600401610f88906150e2565b604051600090339047908381818185875af1925050503d80600081146124cd576040519150601f19603f3d011682016040523d82523d6000602084013e6124cd565b6005546001600160a01b0316331461319e5760405162461bcd60e51b8152600401610f88906150e2565b6107d081111561320e5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f88565b602a5461321b904261545d565b602b54111561325c5760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f88565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156132a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cd9190615377565b905060006132da30611717565b905060006127106132eb858561512d565b6132f5919061523f565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561334f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133739190615390565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906133ae90309086906001908190849042906004016153f4565b60408051808303816000875af11580156133cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f09190615474565b50506000836133fe30611717565b613408919061545d565b9050801561341d5761341d3061dead836144cf565b6000613429834761545d565b9050801561343a5761343a81614687565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f88565b6001600160a01b0382166135315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f88565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166135b85760405162461bcd60e51b8152600401610f8890615498565b6001600160a01b0382166135de5760405162461bcd60e51b8152600401610f88906154dd565b6000811161362e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f88565b601254610100900460ff166136c1576001600160a01b0383166000908152602c602052604090205460ff168061367c57506001600160a01b0382166000908152602c602052604090205460ff165b6136c15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f88565b600e5443101580156136da5750601254610100900460ff165b156137aa576001600160a01b0383166000908152600f602052604090205460ff16158061371457506005546001600160a01b038381169116145b8061372957506001600160a01b03821661dead145b6137aa5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f88565b6001600160a01b03831660009081526013602052604090205460ff1615613991576001600160a01b0382166000908152602e602052604090205460ff16156138e5576001600160a01b0383166000908152601460205260409020544210156138465760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f88565b61384e61175b565b8111156138ba5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f88565b6138c74262015180615261565b6001600160a01b038416600090815260146020526040902055613991565b6001600160a01b0382166000908152602c602052604090205460ff166139915760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f88565b60125460ff1615613d8d576005546001600160a01b038481169116148015906139c857506005546001600160a01b03838116911614155b80156139dc57506001600160a01b03821615155b80156139f357506001600160a01b03821661dead14155b8015613a1857506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a3d57506001600160a01b0382166000908152602c602052604090205460ff16155b15613d8d5760175460ff1615613b56576009546001600160a01b03838116911614801590613a795750600a546001600160a01b03838116911614155b15613b5657613a8960024361545d565b32600090815260166020526040902054108015613ac75750613aac60024361545d565b6001600160a01b038316600090815260166020526040902054105b613b315760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f88565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613b9757506001600160a01b0382166000908152602d602052604090205460ff16155b15613c6357600654811115613bff5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f88565b600854613c0b83611717565b613c159083615261565b1115613c5e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b613d8d565b6001600160a01b0382166000908152602e602052604090205460ff168015613ca457506001600160a01b0383166000908152602d602052604090205460ff16155b15613d0e57600754811115613c5e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f88565b6001600160a01b0382166000908152602d602052604090205460ff16613d8d57600854613d3a83611717565b613d449083615261565b1115613d8d5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b6000613d9830611717565b600b5490915081108015908190613db7575060125462010000900460ff165b8015613dcd5750600a54600160a01b900460ff16155b8015613df257506001600160a01b0385166000908152602e602052604090205460ff16155b8015613e1757506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e3c57506001600160a01b0384166000908152602c602052604090205460ff16155b15613e6a57600a805460ff60a01b1916600160a01b179055613e5c61433f565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613e9c57506001600160a01b0384166000908152602e602052604090205460ff165b8015613eaa575060275460ff165b8015613ec55750602854602954613ec19190615261565b4210155b8015613eea57506001600160a01b0385166000908152602c602052604090205460ff16155b15613ef757613ef76147da565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f3957506001600160a01b0385166000908152602c602052604090205460ff165b15613f42575060005b600080821561432a57600e5443108015613f7457506001600160a01b0388166000908152602e602052604090205460ff165b8015613f9957506001600160a01b0387166000908152602e602052604090205460ff16155b8015613fbe57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fcc57506000601854115b1561417257600e544310613ff357600160066000828254613fed919061545d565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140d3576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161404c908490615261565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140e4919061512d565b6140ee919061523f565b9150601854601a5483614101919061512d565b61410b919061523f565b6021600082825461411c9190615261565b9091555050601854601954614131908461512d565b61413b919061523f565b6020600082825461414c9190615261565b9091555050601854601b54614161908461512d565b61416b919061523f565b90506142f9565b6001600160a01b0387166000908152602e602052604090205460ff16801561419c57506000601c54115b1561422f57612710601c54876141b2919061512d565b6141bc919061523f565b9150601c54601e54836141cf919061512d565b6141d9919061523f565b602160008282546141ea9190615261565b9091555050601c54601d546141ff908461512d565b614209919061523f565b6020600082825461421a9190615261565b9091555050601854601f54614161908461512d565b6001600160a01b0388166000908152602e602052604090205460ff16801561425957506000601854115b156142f9576127106018548761426f919061512d565b614279919061523f565b9150601854601a548361428c919061512d565b614296919061523f565b602160008282546142a79190615261565b90915550506018546019546142bc908461512d565b6142c6919061523f565b602060008282546142d79190615261565b9091555050601854601b546142ec908461512d565b6142f6919061523f565b90505b811561431d5761430a8830846144cf565b801561431d5761431d3061dead836144cf565b614327828761545d565b95505b6143358888886144cf565b5050505050505050565b600061434a30611717565b9050600060205460215461435e9190615261565b905081158061436b575080155b15614374575050565b600b5461438290600a61512d565b82111561439a57600b5461439790600a61512d565b91505b600080600283602154866143ae919061512d565b6143b8919061523f565b6143c2919061523f565b90506143d66143d1828661545d565b6149f4565b602154479081906000906143ec9060029061523f565b6143f6908761545d565b602054614403908561512d565b61440d919061523f565b9050614419818361545d565b60006021819055602055915083158015906144345750600082115b15614443576144438483614b46565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614490576040519150601f19603f3d011682016040523d82523d6000602084013e614495565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122e58282614624565b6001600160a01b0383166144f55760405162461bcd60e51b8152600401610f8890615498565b6001600160a01b03821661451b5760405162461bcd60e51b8152600401610f88906154dd565b6001600160a01b038316600090815260208190526040902054818110156145935760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f88565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145ca908490615261565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161461691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061471591906152a8565b8160008151811061472857614728615279565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061475c5761475c615279565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906147a490600090869061dead904290600401615520565b6000604051808303818588803b1580156147bd57600080fd5b505af11580156147d1573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561482c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148509190615377565b9050600061485d30611717565b9050600061271060265484614872919061512d565b61487c919061523f565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148fa9190615390565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061493590309086906001908190849042906004016153f4565b60408051808303816000875af1158015614953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149779190615474565b505060008361498530611717565b61498f919061545d565b905080156149a4576149a43061dead836144cf565b60006149b0834761545d565b905080156149c1576149c181614687565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a2957614a29615279565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa691906152a8565b81600181518110614ab957614ab9615279565b6001600160a01b039283166020918202929092010152600954614adf913091168461346e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614b18908590600090869030904290600401615555565b600060405180830381600087803b158015614b3257600080fd5b505af1158015612feb573d6000803e3d6000fd5b600954614b5e9030906001600160a01b03168461346e565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614b9b90309087906000908190849042906004016153f4565b60606040518083038185885af1158015614bb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bde919061542f565b5050505050565b600060208083528351808285015260005b81811015614c1257858101830151858201604001528201614bf6565b81811115614c24576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114614c4f57600080fd5b50565b60008060408385031215614c6557600080fd5b8235614c7081614c3a565b946020939093013593505050565b600060208284031215614c9057600080fd5b8135614c9b81614c3a565b9392505050565b600060208284031215614cb457600080fd5b5035919050565b600080600060608486031215614cd057600080fd5b8335614cdb81614c3a565b92506020840135614ceb81614c3a565b929592945050506040919091013590565b60008083601f840112614d0e57600080fd5b50813567ffffffffffffffff811115614d2657600080fd5b6020830191508360208260051b8501011115614d4157600080fd5b9250929050565b60008060208385031215614d5b57600080fd5b823567ffffffffffffffff811115614d7257600080fd5b614d7e85828601614cfc565b90969095509350505050565b8015158114614c4f57600080fd5b600080600060608486031215614dad57600080fd5b83359250602084013591506040840135614dc681614d8a565b809150509250925092565b60008060408385031215614de457600080fd5b8235614def81614c3a565b91506020830135614dff81614d8a565b809150509250929050565b600080600060608486031215614e1f57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614e4957600080fd5b8235614e5481614c3a565b91506020830135614dff81614c3a565b600081518084526020808501945080840160005b83811015614e9d5781516001600160a01b031687529582019590820190600101614e78565b509495945050505050565b602081526000614c9b6020830184614e64565b600080600060408486031215614ed057600080fd5b833567ffffffffffffffff811115614ee757600080fd5b614ef386828701614cfc565b9094509250506020840135614dc681614d8a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f4657614f46614f07565b604052919050565b600067ffffffffffffffff821115614f6857614f68614f07565b5060051b60200190565b600082601f830112614f8357600080fd5b81356020614f98614f9383614f4e565b614f1d565b82815260059290921b84018101918181019086841115614fb757600080fd5b8286015b84811015614fd25780358352918301918301614fbb565b509695505050505050565b600080600060608486031215614ff257600080fd5b833567ffffffffffffffff8082111561500a57600080fd5b818601915086601f83011261501e57600080fd5b8135602061502e614f9383614f4e565b82815260059290921b8401810191818101908a84111561504d57600080fd5b948201945b8386101561507457853561506581614c3a565b82529482019490820190615052565b9750508701359250508082111561508a57600080fd5b5061509786828701614f72565b925050604084013590509250925092565b600181811c908216806150bc57607f821691505b6020821081036150dc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561514757615147615117565b500290565b600181815b8085111561518757816000190482111561516d5761516d615117565b8085161561517a57918102915b93841c9390800290615151565b509250929050565b60008261519e57506001610f58565b816151ab57506000610f58565b81600181146151c157600281146151cb576151e7565b6001915050610f58565b60ff8411156151dc576151dc615117565b50506001821b610f58565b5060208310610133831016604e8410600b841016171561520a575081810a610f58565b615214838361514c565b806000190482111561522857615228615117565b029392505050565b6000614c9b60ff84168361518f565b60008261525c57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561527457615274615117565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016152a1576152a1615117565b5060010190565b6000602082840312156152ba57600080fd5b8151614c9b81614c3a565b8281526040602082015260006152de6040830184614e64565b949350505050565b600060208083850312156152f957600080fd5b825167ffffffffffffffff81111561531057600080fd5b8301601f8101851361532157600080fd5b805161532f614f9382614f4e565b81815260059190911b8201830190838101908783111561534e57600080fd5b928401925b8284101561536c57835182529284019290840190615353565b979650505050505050565b60006020828403121561538957600080fd5b5051919050565b6000602082840312156153a257600080fd5b8151614c9b81614d8a565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561544457600080fd5b8351925060208401519150604084015190509250925092565b60008282101561546f5761546f615117565b500390565b6000806040838503121561548757600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006155396080830186614e64565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061557460a0830186614e64565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220acd72328fdc18bbedcd2eb89d364027035fcdfbf43600ca95e34b1a150930cf164736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104c45760003560e01c806385ecfd2811610276578063c876d0b91161014f578063ee44b44e116100c1578063f5648a4f11610085578063f5648a4f14610e24578063f637434214610e39578063f8b45b0514610e4f578063fd361d0e14610e65578063fe72b27a14610e7f578063ff26a80014610e9f57600080fd5b8063ee44b44e14610da2578063eea362f314610db8578063ef75bd4914610dce578063f11a24d314610dee578063f2fde38b14610e0457600080fd5b8063e2f4560511610113578063e2f4560514610d0b578063e71dc3f514610d21578063e884f26014610d37578063ead010ae14610d4c578063eb472fc414610d6c578063ee40166e14610d8c57600080fd5b8063c876d0b914610c55578063d257b34f14610c6f578063d85ba06314610c8f578063dc3f0d0f14610ca5578063dd62ed3e14610cc557600080fd5b8063a9059cbb116101e8578063bbc0c742116101ac578063bbc0c74214610ba1578063bd5fb92014610bc0578063befd2fac14610be0578063c024666814610c00578063c17b5b8c14610c20578063c7c61e2c14610c4057600080fd5b8063a9059cbb14610af5578063acee28d114610b15578063adb873bd14610b2b578063afd6ce6114610b41578063b62496f514610b7157600080fd5b80639a7a23d61161023a5780639a7a23d614610a5d5780639e93ad8e14610a7d5780639ec22c0e14610a93578063a457c2d714610aa9578063a4c82a0014610ac9578063a62068ce14610adf57600080fd5b806385ecfd28146109c257806388e765ff146109f25780638da5cb5b14610a0857806395d89b4114610a265780639a5bd2dd14610a3b57600080fd5b806351f205e4116103a8578063712c29851161031a5780637571336a116102de5780637571336a14610917578063763cef4914610937578063783102eb1461094c5780638095d5641461096257806382aa7c68146109825780638366e79a146109a257600080fd5b8063712c2985146108a3578063713d0974146108b8578063715018a6146108cd578063730c1888146108e2578063751039fc1461090257600080fd5b806366d602ae1161036c57806366d602ae146108015780636a486a8e146108175780636b0a894c1461082d5780636ddd1713146108435780636fa5a6011461086357806370a082311461088357600080fd5b806351f205e41461076857806354b857461461077d57806358a6d5311461079d5780635bb988c9146107b45780635c3352d3146107d457600080fd5b80631a8145bb116104415780632e82f1a0116104055780632e82f1a0146106c25780632ea2b658146106dc578063313ce567146106f2578063395093511461070e578063452ed4f11461072e5780634a62bb651461074e57600080fd5b80631a8145bb146106365780631c499ab01461064c57806323b872dd1461066c5780632be32b611461068c5780632c3e486c146106ac57600080fd5b80631805805b116104885780631805805b146105b357806318160ddd146105d5578063184c16c5146105ea57806318e1c12314610600578063199ffc721461062057600080fd5b8063058054c9146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b31461055357806310d5de531461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e660225481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610eb5565b6040516104f09190614be5565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e366004614c52565b610f47565b60405190151581526020016104f0565b34801561058f57600080fd5b5061057361059e366004614c7e565b602d6020526000908152604090205460ff1681565b3480156105bf57600080fd5b506105d36105ce366004614c7e565b610f5e565b005b3480156105e157600080fd5b506002546104e6565b3480156105f657600080fd5b506104e6602a5481565b34801561060c57600080fd5b506105d361061b366004614ca2565b61101d565b34801561062c57600080fd5b506104e660265481565b34801561064257600080fd5b506104e660215481565b34801561065857600080fd5b506105d3610667366004614ca2565b6110f1565b34801561067857600080fd5b50610573610687366004614cbb565b6111fd565b34801561069857600080fd5b506105d36106a7366004614ca2565b6112a7565b3480156106b857600080fd5b506104e660285481565b3480156106ce57600080fd5b506027546105739060ff1681565b3480156106e857600080fd5b506104e660205481565b3480156106fe57600080fd5b50604051601281526020016104f0565b34801561071a57600080fd5b50610573610729366004614c52565b6113b4565b34801561073a57600080fd5b50600a5461053b906001600160a01b031681565b34801561075a57600080fd5b506012546105739060ff1681565b34801561077457600080fd5b506105d36113f0565b34801561078957600080fd5b506105d3610798366004614d48565b6114f9565b3480156107a957600080fd5b50600e544310610573565b3480156107c057600080fd5b506105d36107cf366004614c7e565b61159a565b3480156107e057600080fd5b506104e66107ef366004614c7e565b60146020526000908152604090205481565b34801561080d57600080fd5b506104e660075481565b34801561082357600080fd5b506104e6601c5481565b34801561083957600080fd5b506104e660115481565b34801561084f57600080fd5b506012546105739062010000900460ff1681565b34801561086f57600080fd5b506105d361087e366004614c7e565b61164d565b34801561088f57600080fd5b506104e661089e366004614c7e565b611717565b3480156108af57600080fd5b506104e6611732565b3480156108c457600080fd5b506104e661175b565b3480156108d957600080fd5b506105d3611957565b3480156108ee57600080fd5b506105d36108fd366004614d98565b6119cb565b34801561090e57600080fd5b506105d3611af4565b34801561092357600080fd5b506105d3610932366004614dd1565b611b6b565b34801561094357600080fd5b506105d3611c33565b34801561095857600080fd5b506104e660255481565b34801561096e57600080fd5b506105d361097d366004614e0a565b611dd4565b34801561098e57600080fd5b506105d361099d366004614ca2565b611e8f565b3480156109ae57600080fd5b506105736109bd366004614e36565b611f83565b3480156109ce57600080fd5b506105736109dd366004614c7e565b600f6020526000908152604090205460ff1681565b3480156109fe57600080fd5b506104e660065481565b348015610a1457600080fd5b506005546001600160a01b031661053b565b348015610a3257600080fd5b5061050e6121bd565b348015610a4757600080fd5b50610a506121cc565b6040516104f09190614ea8565b348015610a6957600080fd5b506105d3610a78366004614dd1565b61222d565b348015610a8957600080fd5b506104e661271081565b348015610a9f57600080fd5b506104e6602b5481565b348015610ab557600080fd5b50610573610ac4366004614c52565b612321565b348015610ad557600080fd5b506104e660295481565b348015610aeb57600080fd5b506104e6600e5481565b348015610b0157600080fd5b50610573610b10366004614c52565b6123ba565b348015610b2157600080fd5b506104e660155481565b348015610b3757600080fd5b506104e6601f5481565b348015610b4d57600080fd5b50610573610b5c366004614c7e565b60136020526000908152604090205460ff1681565b348015610b7d57600080fd5b50610573610b8c366004614c7e565b602e6020526000908152604090205460ff1681565b348015610bad57600080fd5b5060125461057390610100900460ff1681565b348015610bcc57600080fd5b506105d3610bdb366004614ebb565b6123c7565b348015610bec57600080fd5b506105d3610bfb366004614ca2565b6124d3565b348015610c0c57600080fd5b506105d3610c1b366004614dd1565b612609565b348015610c2c57600080fd5b506105d3610c3b366004614e0a565b612692565b348015610c4c57600080fd5b506105d361274d565b348015610c6157600080fd5b506017546105739060ff1681565b348015610c7b57600080fd5b506105d3610c8a366004614ca2565b6127b6565b348015610c9b57600080fd5b506104e660185481565b348015610cb157600080fd5b506105d3610cc0366004614ca2565b612901565b348015610cd157600080fd5b506104e6610ce0366004614e36565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d1757600080fd5b506104e6600b5481565b348015610d2d57600080fd5b506104e6601b5481565b348015610d4357600080fd5b506105d3612a0f565b348015610d5857600080fd5b506105d3610d67366004614fdd565b612a45565b348015610d7857600080fd5b5061053b610d87366004614ca2565b612ff3565b348015610d9857600080fd5b506104e6600d5481565b348015610dae57600080fd5b506104e660235481565b348015610dc457600080fd5b506104e660195481565b348015610dda57600080fd5b50600c5461053b906001600160a01b031681565b348015610dfa57600080fd5b506104e6601a5481565b348015610e1057600080fd5b506105d3610e1f366004614c7e565b61301d565b348015610e3057600080fd5b506105d3613108565b348015610e4557600080fd5b506104e6601e5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506024546105739060ff1681565b348015610e8b57600080fd5b506105d3610e9a366004614ca2565b613174565b348015610eab57600080fd5b506104e6601d5481565b606060038054610ec4906150a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef0906150a8565b8015610f3d5780601f10610f1257610100808354040283529160200191610f3d565b820191906000526020600020905b815481529060010190602001808311610f2057829003601f168201915b5050505050905090565b6000610f5433848461346e565b5060015b92915050565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f88906150e2565b60405180910390fd5b601254610100900460ff1615610ffb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f88565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610f88906150e2565b600a811015801561105a575061c3508111155b6110a65760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f88565b6110b781662386f26fc1000061512d565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610f88906150e2565b6111276012600a615230565b606461113260025490565b61113d90600161512d565b611147919061523f565b611151919061523f565b8110156111b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f88565b6111be6012600a615230565b6111c8908261512d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110e6565b600061120a848484613592565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561128f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f88565b61129c853385840361346e565b506001949350505050565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610f88906150e2565b6112dd6012600a615230565b6103e86112e960025490565b6112f490600161512d565b6112fe919061523f565b611308919061523f565b8110156113695760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f88565b6113756012600a615230565b61137f908261512d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110e6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f549185906113eb908690615261565b61346e565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610f88906150e2565b600b5461142630611717565b101561149c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f88565b600a805460ff60a01b1916600160a01b1790556114b761433f565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115235760405162461bcd60e51b8152600401610f88906150e2565b60005b81811015611595576000600f600085858581811061154657611546615279565b905060200201602081019061155b9190614c7e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061158d8161528f565b915050611526565b505050565b6005546001600160a01b031633146115c45760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0381166000908152600f602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610f88565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0381166116cd5760405162461bcd60e51b815260206004820181905260248201527f5f67616c694164647265737320616464726573732063616e6e6f7420626520306044820152606401610f88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f8c962d22cfb899100e2df3e08d272d1fcc4665cf4b4739b09451fcc5ac75e18690600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff1615611755576023546022546117509190615261565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906152a8565b8160008151811061180057611800615279565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061183457611834615279565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916118a39186906004016152c5565b600060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118e891908101906152e6565b90506064601d54601e546118fc9190615261565b8260018151811061190f5761190f615279565b6020026020010151611921919061512d565b61192b919061523f565b8160018151811061193e5761193e615279565b60200260200101516119509190615261565b9250505090565b6005546001600160a01b031633146119815760405162461bcd60e51b8152600401610f88906150e2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119f55760405162461bcd60e51b8152600401610f88906150e2565b610258831015611a635760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f88565b6103e88211158015611a73575060015b611ad85760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f88565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b03163314611b1e5760405162461bcd60e51b8152600401610f88906150e2565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611b955760405162461bcd60e51b8152600401610f88906150e2565b80611c0857600a546001600160a01b0390811690831603611c085760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f88565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c5d5760405162461bcd60e51b8152600401610f88906150e2565b611c65611732565b4210158015611c7b57506000611c79611732565b115b611cc05760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f88565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d419190615377565b611d4b919061512d565b611d55919061523f565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd09190615390565b5050565b6005546001600160a01b03163314611dfe5760405162461bcd60e51b8152600401610f88906150e2565b6019839055601a829055601b81905580611e188385615261565b611e229190615261565b6018556064611e34612710600a61512d565b611e3e919061523f565b60185411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b03163314611eb95760405162461bcd60e51b8152600401610f88906150e2565b601254610100900460ff1615611f115760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f88565b6032811115611f325760405162461bcd60e51b8152600401610f88906153ad565b6012805462ffff0019166201010017905543600d819055611f54908290615261565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611fb05760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0383166120065760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f88565b6001600160a01b038316301415806120265750601254610100900460ff16155b61208f5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f88565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fa9190615377565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561214d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121719190615390565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610ec4906150a8565b60606010805480602002602001604051908101604052809291908181526020018280548015610f3d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612206575050505050905090565b6005546001600160a01b031633146122575760405162461bcd60e51b8152600401610f88906150e2565b600a546001600160a01b03908116908316036122db5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f88565b6122e582826144a1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f88565b6123b0338585840361346e565b5060019392505050565b6000610f54338484613592565b6005546001600160a01b031633146123f15760405162461bcd60e51b8152600401610f88906150e2565b60005b828110156124cd5781602c600086868581811061241357612413615279565b90506020020160208101906124289190614c7e565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061246257612462615279565b90506020020160208101906124779190614c7e565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516124b3911515815260200190565b60405180910390a2806124c58161528f565b9150506123f4565b50505050565b6005546001600160a01b031633146124fd5760405162461bcd60e51b8152600401610f88906150e2565b60245460ff161561256a5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f88565b6064811115801561257b5750600081115b6125c75760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f88565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b031633146126335760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126bc5760405162461bcd60e51b8152600401610f88906150e2565b601d839055601e829055601f819055806126d68385615261565b6126e09190615261565b601c5560646126f2612710601461512d565b6126fc919061523f565b601c5411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b031633146127775760405162461bcd60e51b8152600401610f88906150e2565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b031633146127e05760405162461bcd60e51b8152600401610f88906150e2565b620186a06127ed60025490565b6127f890600161512d565b612802919061523f565b81101561286f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f88565b6103e861287b60025490565b61288690600161512d565b612890919061523f565b8111156128fc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f88565b600b55565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f88906150e2565b6129376012600a615230565b6103e861294360025490565b61294e90600161512d565b612958919061523f565b612962919061523f565b8110156129c45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f88565b6129d06012600a615230565b6129da908261512d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e6565b6005546001600160a01b03163314612a395760405162461bcd60e51b8152600401610f88906150e2565b6017805460ff19169055565b6005546001600160a01b03163314612a6f5760405162461bcd60e51b8152600401610f88906150e2565b601254610100900460ff1615612adb5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f88565b60328110612afb5760405162461bcd60e51b8152600401610f88906153ad565b8151835114612b4c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f88565b61012c835110612bbd5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f88565b60005b8351811015612c8a576000848281518110612bdd57612bdd615279565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612c1c4262015180615261565b6001600160a01b038216600090815260146020526040812091909155612c446012600a615230565b858481518110612c5657612c56615279565b6020026020010151612c68919061512d565b9050612c753383836144cf565b50508080612c829061528f565b915050612bc0565b506012805462ffff0019166201010017905543600d819055612cad908290615261565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5091906152a8565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd691906152a8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4791906152a8565b600a80546001600160a01b0319166001600160a01b03929092169182179055612e71906001614624565b600a54612e88906001600160a01b031660016144a1565b60004711612ee45760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f88565b6000612eef30611717565b11612f4b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f88565b600954612f669030906001600160a01b03166113eb82611717565b6009546001600160a01b031663f305d7194730612f8281611717565b60008030426040518863ffffffff1660e01b8152600401612fa8969594939291906153f4565b60606040518083038185885af1158015612fc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612feb919061542f565b505050505050565b6010818154811061300357600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146130475760405162461bcd60e51b8152600401610f88906150e2565b6001600160a01b0381166130ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f88565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146131325760405162461bcd60e51b8152600401610f88906150e2565b604051600090339047908381818185875af1925050503d80600081146124cd576040519150601f19603f3d011682016040523d82523d6000602084013e6124cd565b6005546001600160a01b0316331461319e5760405162461bcd60e51b8152600401610f88906150e2565b6107d081111561320e5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f88565b602a5461321b904261545d565b602b54111561325c5760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f88565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156132a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cd9190615377565b905060006132da30611717565b905060006127106132eb858561512d565b6132f5919061523f565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561334f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133739190615390565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906133ae90309086906001908190849042906004016153f4565b60408051808303816000875af11580156133cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f09190615474565b50506000836133fe30611717565b613408919061545d565b9050801561341d5761341d3061dead836144cf565b6000613429834761545d565b9050801561343a5761343a81614687565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f88565b6001600160a01b0382166135315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f88565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166135b85760405162461bcd60e51b8152600401610f8890615498565b6001600160a01b0382166135de5760405162461bcd60e51b8152600401610f88906154dd565b6000811161362e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f88565b601254610100900460ff166136c1576001600160a01b0383166000908152602c602052604090205460ff168061367c57506001600160a01b0382166000908152602c602052604090205460ff165b6136c15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f88565b600e5443101580156136da5750601254610100900460ff165b156137aa576001600160a01b0383166000908152600f602052604090205460ff16158061371457506005546001600160a01b038381169116145b8061372957506001600160a01b03821661dead145b6137aa5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f88565b6001600160a01b03831660009081526013602052604090205460ff1615613991576001600160a01b0382166000908152602e602052604090205460ff16156138e5576001600160a01b0383166000908152601460205260409020544210156138465760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f88565b61384e61175b565b8111156138ba5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f88565b6138c74262015180615261565b6001600160a01b038416600090815260146020526040902055613991565b6001600160a01b0382166000908152602c602052604090205460ff166139915760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f88565b60125460ff1615613d8d576005546001600160a01b038481169116148015906139c857506005546001600160a01b03838116911614155b80156139dc57506001600160a01b03821615155b80156139f357506001600160a01b03821661dead14155b8015613a1857506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a3d57506001600160a01b0382166000908152602c602052604090205460ff16155b15613d8d5760175460ff1615613b56576009546001600160a01b03838116911614801590613a795750600a546001600160a01b03838116911614155b15613b5657613a8960024361545d565b32600090815260166020526040902054108015613ac75750613aac60024361545d565b6001600160a01b038316600090815260166020526040902054105b613b315760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f88565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613b9757506001600160a01b0382166000908152602d602052604090205460ff16155b15613c6357600654811115613bff5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f88565b600854613c0b83611717565b613c159083615261565b1115613c5e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b613d8d565b6001600160a01b0382166000908152602e602052604090205460ff168015613ca457506001600160a01b0383166000908152602d602052604090205460ff16155b15613d0e57600754811115613c5e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f88565b6001600160a01b0382166000908152602d602052604090205460ff16613d8d57600854613d3a83611717565b613d449083615261565b1115613d8d5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b6000613d9830611717565b600b5490915081108015908190613db7575060125462010000900460ff165b8015613dcd5750600a54600160a01b900460ff16155b8015613df257506001600160a01b0385166000908152602e602052604090205460ff16155b8015613e1757506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e3c57506001600160a01b0384166000908152602c602052604090205460ff16155b15613e6a57600a805460ff60a01b1916600160a01b179055613e5c61433f565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613e9c57506001600160a01b0384166000908152602e602052604090205460ff165b8015613eaa575060275460ff165b8015613ec55750602854602954613ec19190615261565b4210155b8015613eea57506001600160a01b0385166000908152602c602052604090205460ff16155b15613ef757613ef76147da565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f3957506001600160a01b0385166000908152602c602052604090205460ff165b15613f42575060005b600080821561432a57600e5443108015613f7457506001600160a01b0388166000908152602e602052604090205460ff165b8015613f9957506001600160a01b0387166000908152602e602052604090205460ff16155b8015613fbe57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fcc57506000601854115b1561417257600e544310613ff357600160066000828254613fed919061545d565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140d3576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161404c908490615261565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140e4919061512d565b6140ee919061523f565b9150601854601a5483614101919061512d565b61410b919061523f565b6021600082825461411c9190615261565b9091555050601854601954614131908461512d565b61413b919061523f565b6020600082825461414c9190615261565b9091555050601854601b54614161908461512d565b61416b919061523f565b90506142f9565b6001600160a01b0387166000908152602e602052604090205460ff16801561419c57506000601c54115b1561422f57612710601c54876141b2919061512d565b6141bc919061523f565b9150601c54601e54836141cf919061512d565b6141d9919061523f565b602160008282546141ea9190615261565b9091555050601c54601d546141ff908461512d565b614209919061523f565b6020600082825461421a9190615261565b9091555050601854601f54614161908461512d565b6001600160a01b0388166000908152602e602052604090205460ff16801561425957506000601854115b156142f9576127106018548761426f919061512d565b614279919061523f565b9150601854601a548361428c919061512d565b614296919061523f565b602160008282546142a79190615261565b90915550506018546019546142bc908461512d565b6142c6919061523f565b602060008282546142d79190615261565b9091555050601854601b546142ec908461512d565b6142f6919061523f565b90505b811561431d5761430a8830846144cf565b801561431d5761431d3061dead836144cf565b614327828761545d565b95505b6143358888886144cf565b5050505050505050565b600061434a30611717565b9050600060205460215461435e9190615261565b905081158061436b575080155b15614374575050565b600b5461438290600a61512d565b82111561439a57600b5461439790600a61512d565b91505b600080600283602154866143ae919061512d565b6143b8919061523f565b6143c2919061523f565b90506143d66143d1828661545d565b6149f4565b602154479081906000906143ec9060029061523f565b6143f6908761545d565b602054614403908561512d565b61440d919061523f565b9050614419818361545d565b60006021819055602055915083158015906144345750600082115b15614443576144438483614b46565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614490576040519150601f19603f3d011682016040523d82523d6000602084013e614495565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122e58282614624565b6001600160a01b0383166144f55760405162461bcd60e51b8152600401610f8890615498565b6001600160a01b03821661451b5760405162461bcd60e51b8152600401610f88906154dd565b6001600160a01b038316600090815260208190526040902054818110156145935760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f88565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145ca908490615261565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161461691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061471591906152a8565b8160008151811061472857614728615279565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061475c5761475c615279565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906147a490600090869061dead904290600401615520565b6000604051808303818588803b1580156147bd57600080fd5b505af11580156147d1573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561482c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148509190615377565b9050600061485d30611717565b9050600061271060265484614872919061512d565b61487c919061523f565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148fa9190615390565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061493590309086906001908190849042906004016153f4565b60408051808303816000875af1158015614953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149779190615474565b505060008361498530611717565b61498f919061545d565b905080156149a4576149a43061dead836144cf565b60006149b0834761545d565b905080156149c1576149c181614687565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a2957614a29615279565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa691906152a8565b81600181518110614ab957614ab9615279565b6001600160a01b039283166020918202929092010152600954614adf913091168461346e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614b18908590600090869030904290600401615555565b600060405180830381600087803b158015614b3257600080fd5b505af1158015612feb573d6000803e3d6000fd5b600954614b5e9030906001600160a01b03168461346e565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614b9b90309087906000908190849042906004016153f4565b60606040518083038185885af1158015614bb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bde919061542f565b5050505050565b600060208083528351808285015260005b81811015614c1257858101830151858201604001528201614bf6565b81811115614c24576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114614c4f57600080fd5b50565b60008060408385031215614c6557600080fd5b8235614c7081614c3a565b946020939093013593505050565b600060208284031215614c9057600080fd5b8135614c9b81614c3a565b9392505050565b600060208284031215614cb457600080fd5b5035919050565b600080600060608486031215614cd057600080fd5b8335614cdb81614c3a565b92506020840135614ceb81614c3a565b929592945050506040919091013590565b60008083601f840112614d0e57600080fd5b50813567ffffffffffffffff811115614d2657600080fd5b6020830191508360208260051b8501011115614d4157600080fd5b9250929050565b60008060208385031215614d5b57600080fd5b823567ffffffffffffffff811115614d7257600080fd5b614d7e85828601614cfc565b90969095509350505050565b8015158114614c4f57600080fd5b600080600060608486031215614dad57600080fd5b83359250602084013591506040840135614dc681614d8a565b809150509250925092565b60008060408385031215614de457600080fd5b8235614def81614c3a565b91506020830135614dff81614d8a565b809150509250929050565b600080600060608486031215614e1f57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614e4957600080fd5b8235614e5481614c3a565b91506020830135614dff81614c3a565b600081518084526020808501945080840160005b83811015614e9d5781516001600160a01b031687529582019590820190600101614e78565b509495945050505050565b602081526000614c9b6020830184614e64565b600080600060408486031215614ed057600080fd5b833567ffffffffffffffff811115614ee757600080fd5b614ef386828701614cfc565b9094509250506020840135614dc681614d8a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f4657614f46614f07565b604052919050565b600067ffffffffffffffff821115614f6857614f68614f07565b5060051b60200190565b600082601f830112614f8357600080fd5b81356020614f98614f9383614f4e565b614f1d565b82815260059290921b84018101918181019086841115614fb757600080fd5b8286015b84811015614fd25780358352918301918301614fbb565b509695505050505050565b600080600060608486031215614ff257600080fd5b833567ffffffffffffffff8082111561500a57600080fd5b818601915086601f83011261501e57600080fd5b8135602061502e614f9383614f4e565b82815260059290921b8401810191818101908a84111561504d57600080fd5b948201945b8386101561507457853561506581614c3a565b82529482019490820190615052565b9750508701359250508082111561508a57600080fd5b5061509786828701614f72565b925050604084013590509250925092565b600181811c908216806150bc57607f821691505b6020821081036150dc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561514757615147615117565b500290565b600181815b8085111561518757816000190482111561516d5761516d615117565b8085161561517a57918102915b93841c9390800290615151565b509250929050565b60008261519e57506001610f58565b816151ab57506000610f58565b81600181146151c157600281146151cb576151e7565b6001915050610f58565b60ff8411156151dc576151dc615117565b50506001821b610f58565b5060208310610133831016604e8410600b841016171561520a575081810a610f58565b615214838361514c565b806000190482111561522857615228615117565b029392505050565b6000614c9b60ff84168361518f565b60008261525c57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561527457615274615117565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016152a1576152a1615117565b5060010190565b6000602082840312156152ba57600080fd5b8151614c9b81614c3a565b8281526040602082015260006152de6040830184614e64565b949350505050565b600060208083850312156152f957600080fd5b825167ffffffffffffffff81111561531057600080fd5b8301601f8101851361532157600080fd5b805161532f614f9382614f4e565b81815260059190911b8201830190838101908783111561534e57600080fd5b928401925b8284101561536c57835182529284019290840190615353565b979650505050505050565b60006020828403121561538957600080fd5b5051919050565b6000602082840312156153a257600080fd5b8151614c9b81614d8a565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561544457600080fd5b8351925060208401519150604084015190509250925092565b60008282101561546f5761546f615117565b500390565b6000806040838503121561548757600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006155396080830186614e64565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061557460a0830186614e64565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220acd72328fdc18bbedcd2eb89d364027035fcdfbf43600ca95e34b1a150930cf164736f6c634300080f0033

Deployed Bytecode Sourcemap

12096:28873:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13585:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13585:41:0;;;;;;;;6497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12246:27::-;;;;;;;;;;-1:-1:-1;12246:27:0;;;;-1:-1:-1;;;;;12246:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;12246:27:0;798:221:1;7411:169:0;;;;;;;;;;-1:-1:-1;7411:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;7411:169:0;1480:187:1;14203:64:0;;;;;;;;;;-1:-1:-1;14203:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19313:194;;;;;;;;;;-1:-1:-1;19313:194:0;;;;;:::i;:::-;;:::i;:::-;;6818:108;;;;;;;;;;-1:-1:-1;6906:12:0;;6818:108;;13960:47;;;;;;;;;;;;;;;;33711:247;;;;;;;;;;-1:-1:-1;33711:247:0;;;;;:::i;:::-;;:::i;13772:35::-;;;;;;;;;;;;;;;;13543:33;;;;;;;;;;;;;;;;20297:288;;;;;;;;;;-1:-1:-1;20297:288:0;;;;;:::i;:::-;;:::i;7588:492::-;;;;;;;;;;-1:-1:-1;7588:492:0;;;;;:::i;:::-;;:::i;19682:295::-;;;;;;;;;;-1:-1:-1;19682:295:0;;;;;:::i;:::-;;:::i;13866:45::-;;;;;;;;;;;;;;;;13826:33;;;;;;;;;;-1:-1:-1;13826:33:0;;;;;;;;13508:28;;;;;;;;;;;;;;;;6717:93;;;;;;;;;;-1:-1:-1;6717:93:0;;6800:2;2712:36:1;;2700:2;2685:18;6717:93:0;2570:184:1;8088:215:0;;;;;;;;;;-1:-1:-1;8088:215:0;;;;;:::i;:::-;;:::i;12280:21::-;;;;;;;;;;-1:-1:-1;12280:21:0;;;;-1:-1:-1;;;;;12280:21:0;;;12652:33;;;;;;;;;;-1:-1:-1;12652:33:0;;;;;;;;32978:312;;;;;;;;;;;;;:::i;18916:200::-;;;;;;;;;;-1:-1:-1;18916:200:0;;;;;:::i;:::-;;:::i;29516:120::-;;;;;;;;;;-1:-1:-1;29610:18:0;;29595:12;:33;29516:120;;19124:181;;;;;;;;;;-1:-1:-1;19124:181:0;;;;;:::i;:::-;;:::i;12830:61::-;;;;;;;;;;-1:-1:-1;12830:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;12178:28;;;;;;;;;;;;;;;;13315;;;;;;;;;;;;;;;;12618:25;;;;;;;;;;;;;;;;12732:31;;;;;;;;;;-1:-1:-1;12732:31:0;;;;;;;;;;;32677:249;;;;;;;;;;-1:-1:-1;32677:249:0;;;;;:::i;:::-;;:::i;6934:127::-;;;;;;;;;;-1:-1:-1;6934:127:0;;;;;:::i;:::-;;:::i;39962:281::-;;;;;;;;;;;;;:::i;33298:405::-;;;;;;;;;;;;;:::i;10578:150::-;;;;;;;;;;;;;:::i;35990:447::-;;;;;;;;;;-1:-1:-1;35990:447:0;;;;;:::i;:::-;;:::i;18564:233::-;;;;;;;;;;;;;:::i;21233:260::-;;;;;;;;;;-1:-1:-1;21233:260:0;;;;;:::i;:::-;;:::i;40251:487::-;;;;;;;;;;;;;:::i;13732:31::-;;;;;;;;;;;;;;;;22046:373;;;;;;;;;;-1:-1:-1;22046:373:0;;;;;:::i;:::-;;:::i;18081:427::-;;;;;;;;;;-1:-1:-1;18081:427:0;;;;;:::i;:::-;;:::i;31941:498::-;;;;;;;;;;-1:-1:-1;31941:498:0;;;;;:::i;:::-;;:::i;12532:44::-;;;;;;;;;;-1:-1:-1;12532:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12144:27;;;;;;;;;;;;;;;;10364:79;;;;;;;;;;-1:-1:-1;10429:6:0;;-1:-1:-1;;;;;10429:6:0;10364:79;;6605:104;;;;;;;;;;;;;:::i;18805:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21501:293::-;;;;;;;;;;-1:-1:-1;21501:293:0;;;;;:::i;:::-;;:::i;13456:43::-;;;;;;;;;;;;13494:5;13456:43;;14014:35;;;;;;;;;;;;;;;;8311:413;;;;;;;;;;-1:-1:-1;8311:413:0;;;;;:::i;:::-;;:::i;13918:29::-;;;;;;;;;;;;;;;;12492:33;;;;;;;;;;;;;;;;7069:175;;;;;;;;;;-1:-1:-1;7069:175:0;;;;;:::i;:::-;;:::i;12898:40::-;;;;;;;;;;;;;;;;13421:26;;;;;;;;;;;;;;;;12772:51;;;;;;;;;;-1:-1:-1;12772:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14425:58;;;;;;;;;;-1:-1:-1;14425:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12692:33;;;;;;;;;;-1:-1:-1;12692:33:0;;;;;;;;;;;22816:282;;;;;;;;;;-1:-1:-1;22816:282:0;;;;;:::i;:::-;;:::i;39505:449::-;;;;;;;;;;-1:-1:-1;39505:449:0;;;;;:::i;:::-;;:::i;23106:182::-;;;;;;;;;;-1:-1:-1;23106:182:0;;;;;:::i;:::-;;:::i;22427:381::-;;;;;;;;;;-1:-1:-1;22427:381:0;;;;;:::i;:::-;;:::i;40746:220::-;;;;;;;;;;;;;:::i;13130:39::-;;;;;;;;;;-1:-1:-1;13130:39:0;;;;;;;;20655:346;;;;;;;;;;-1:-1:-1;20655:346:0;;;;;:::i;:::-;;:::i;13178:27::-;;;;;;;;;;;;;;;;19989:300;;;;;;;;;;-1:-1:-1;19989:300:0;;;;;:::i;:::-;;:::i;7252:151::-;;;;;;;;;;-1:-1:-1;7252:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;7368:18:0;;;7341:7;7368:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7252:151;12338:33;;;;;;;;;;;;;;;;13281:25;;;;;;;;;;;;;;;;19572:98;;;;;;;;;;;;;:::i;33966:2016::-;;;;;;;;;;-1:-1:-1;33966:2016:0;;;;;:::i;:::-;;:::i;12583:28::-;;;;;;;;;;-1:-1:-1;12583:28:0;;;;;:::i;:::-;;:::i;12415:37::-;;;;;;;;;;;;;;;;13633:49;;;;;;;;;;;;;;;;13212:25;;;;;;;;;;;;;;;;12380:26;;;;;;;;;;-1:-1:-1;12380:26:0;;;;-1:-1:-1;;;;;12380:26:0;;;13244:30;;;;;;;;;;;;;;;;10736:244;;;;;;;;;;-1:-1:-1;10736:244:0;;;;;:::i;:::-;;:::i;32509:160::-;;;;;;;;;;;;;:::i;13383:31::-;;;;;;;;;;;;;;;;12213:24;;;;;;;;;;;;;;;;13689:36;;;;;;;;;;-1:-1:-1;13689:36:0;;;;;;;;37709:1398;;;;;;;;;;-1:-1:-1;37709:1398:0;;;;;:::i;:::-;;:::i;13350:26::-;;;;;;;;;;;;;;;;6497:100;6551:13;6584:5;6577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6497:100;:::o;7411:169::-;7494:4;7511:39;2726:10;7534:7;7543:6;7511:8;:39::i;:::-;-1:-1:-1;7568:4:0;7411:169;;;;;:::o;19313:194::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;;;;;;;;;19399:13:::1;::::0;::::1;::::0;::::1;;;19398:14;19390:68;;;::::0;-1:-1:-1;;;19390:68:0;;10193:2:1;19390:68:0::1;::::0;::::1;10175:21:1::0;10232:2;10212:18;;;10205:30;10271:34;10251:18;;;10244:62;-1:-1:-1;;;10322:18:1;;;10315:39;10371:19;;19390:68:0::1;9991:405:1::0;19390:68:0::1;19469:9;:30:::0;;-1:-1:-1;;;;;;19469:30:0::1;-1:-1:-1::0;;;;;19469:30:0;;;::::1;::::0;;;::::1;::::0;;19313:194::o;33711:247::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;33805:2:::1;33795:6;:12;;:31;;;;;33821:5;33811:6;:15;;33795:31;33787:76;;;::::0;-1:-1:-1;;;33787:76:0;;10603:2:1;33787:76:0::1;::::0;::::1;10585:21:1::0;;;10622:18;;;10615:30;10681:34;10661:18;;;10654:62;10733:18;;33787:76:0::1;10401:356:1::0;33787:76:0::1;33892:13;:6:::0;33901:4:::1;33892:13;:::i;:::-;33874:15;:31:::0;33921:29:::1;::::0;160:25:1;;;33921:29:0::1;::::0;148:2:1;133:18;33921:29:0::1;;;;;;;;33711:247:::0;:::o;20297:288::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;20415:16:::1;6800:2:::0;20415::::1;:16;:::i;:::-;20407:3;20387:13;6906:12:::0;;;6818:108;20387:13:::1;:17;::::0;20403:1:::1;20387:17;:::i;:::-;:23;;;;:::i;:::-;20386:46;;;;:::i;:::-;20376:6;:56;;20368:110;;;::::0;-1:-1:-1;;;20368:110:0;;12874:2:1;20368:110:0::1;::::0;::::1;12856:21:1::0;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:39;13052:19;;20368:110:0::1;12672:405:1::0;20368:110:0::1;20511:16;6800:2:::0;20511::::1;:16;:::i;:::-;20501:27;::::0;:6;:27:::1;:::i;:::-;20489:9;:39:::0;;;20544:33:::1;::::0;160:25:1;;;20544:33:0::1;::::0;148:2:1;133:18;20544:33:0::1;14:177:1::0;7588:492:0;7728:4;7745:36;7755:6;7763:9;7774:6;7745:9;:36::i;:::-;-1:-1:-1;;;;;7821:19:0;;7794:24;7821:19;;;:11;:19;;;;;;;;2726:10;7821:33;;;;;;;;7873:26;;;;7865:79;;;;-1:-1:-1;;;7865:79:0;;13284:2:1;7865:79:0;;;13266:21:1;13323:2;13303:18;;;13296:30;13362:34;13342:18;;;13335:62;-1:-1:-1;;;13413:18:1;;;13406:38;13461:19;;7865:79:0;13082:404:1;7865:79:0;7980:57;7989:6;2726:10;8030:6;8011:16;:25;7980:8;:57::i;:::-;-1:-1:-1;8068:4:0;;7588:492;-1:-1:-1;;;;7588:492:0:o;19682:295::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;19804:16:::1;6800:2:::0;19804::::1;:16;:::i;:::-;19795:4;19775:13;6906:12:::0;;;6818:108;19775:13:::1;:17;::::0;19791:1:::1;19775:17;:::i;:::-;:24;;;;:::i;:::-;19774:47;;;;:::i;:::-;19764:6;:57;;19756:111;;;::::0;-1:-1:-1;;;19756:111:0;;13693:2:1;19756:111:0::1;::::0;::::1;13675:21:1::0;13732:2;13712:18;;;13705:30;13771:34;13751:18;;;13744:62;-1:-1:-1;;;13822:18:1;;;13815:39;13871:19;;19756:111:0::1;13491:405:1::0;19756:111:0::1;19903:16;6800:2:::0;19903::::1;:16;:::i;:::-;19893:27;::::0;:6;:27:::1;:::i;:::-;19878:12;:42:::0;;;19936:33:::1;::::0;160:25:1;;;19936:33:0::1;::::0;148:2:1;133:18;19936:33:0::1;14:177:1::0;8088:215:0;2726:10;8176:4;8225:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8225:34:0;;;;;;;;;;8176:4;;8193:80;;8216:7;;8225:47;;8262:10;;8225:47;:::i;:::-;8193:8;:80::i;32978:312::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;33069:18:::1;;33041:24;33059:4;33041:9;:24::i;:::-;:46;;33033:123;;;::::0;;-1:-1:-1;;;33033:123:0;;14236:2:1;33033:123:0::1;::::0;::::1;14218:21:1::0;14255:18;;;14248:30;;;;14314:34;14294:18;;;14287:62;14385:34;14365:18;;;14358:62;14437:19;;33033:123:0::1;14034:428:1::0;33033:123:0::1;33167:8;:15:::0;;-1:-1:-1;;;;33167:15:0::1;-1:-1:-1::0;;;33167:15:0::1;::::0;;33193:10:::1;:8;:10::i;:::-;33214:8;:16:::0;;-1:-1:-1;;;;33214:16:0::1;::::0;;33246:36:::1;::::0;33266:15:::1;160:25:1::0;;33246:36:0::1;::::0;148:2:1;133:18;33246:36:0::1;;;;;;;32978:312::o:0;18916:200::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;19010:9:::1;19006:103;19025:19:::0;;::::1;19006:103;;;19092:5;19065:11;:24;19077:8;;19086:1;19077:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19065:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19065:24:0;:32;;-1:-1:-1;;19065:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19046:3;::::1;::::0;::::1;:::i;:::-;;;;19006:103;;;;18916:200:::0;;:::o;19124:181::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19205:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;19197:62;;;::::0;-1:-1:-1;;;19197:62:0;;14941:2:1;19197:62:0::1;::::0;::::1;14923:21:1::0;14980:2;14960:18;;;14953:30;15019:32;14999:18;;;14992:60;15069:18;;19197:62:0::1;14739:354:1::0;19197:62:0::1;-1:-1:-1::0;;;;;19270:19:0::1;19292:5;19270:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;19270:27:0::1;::::0;;19124:181::o;32677:249::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32761:26:0;::::1;32753:71;;;::::0;-1:-1:-1;;;32753:71:0;;15300:2:1;32753:71:0::1;::::0;::::1;15282:21:1::0;;;15319:18;;;15312:30;15378:34;15358:18;;;15351:62;15430:18;;32753:71:0::1;15098:356:1::0;32753:71:0::1;32835:11;:35:::0;;-1:-1:-1;;;;;;32835:35:0::1;-1:-1:-1::0;;;;;32835:35:0;::::1;::::0;;::::1;::::0;;;32886:32:::1;::::0;::::1;::::0;-1:-1:-1;;32886:32:0::1;32677:249:::0;:::o;6934:127::-;-1:-1:-1;;;;;7035:18:0;7008:7;7035:18;;;;;;;;;;;;6934:127::o;39962:281::-;40044:24;;40022:7;;40044:24;;40041:195;;;40120:25;;40091:26;;:54;;;;:::i;:::-;40084:61;;39962:281;:::o;40041:195::-;-1:-1:-1;40194:1:0;;39962:281::o;33298:405::-;33395:16;;;33409:1;33395:16;;;;;;;;33352:7;;;;33395:16;33409:1;33395:16;;;;;;;;-1:-1:-1;;33432:9:0;;:16;;;-1:-1:-1;;;33432:16:0;;;;33371:40;;-1:-1:-1;;;;;;33432:9:0;;;;:14;;-1:-1:-1;33432:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33422:4;33427:1;33422:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;33422:26:0;;;-1:-1:-1;;;;;33422:26:0;;;;;33477:4;33459;33464:1;33459:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33459:23:0;;;;:7;;;;;;;;;;:23;33530:16;;;33544:1;33530:16;;;;;;;;33503:24;;33530:16;;33544:1;;33530:16;;;;;;;;;-1:-1:-1;;33567:9:0;;33591:15;;33567:46;;-1:-1:-1;;;33567:46:0;;33503:43;;-1:-1:-1;;;;;;33567:9:0;;;;:23;;:46;;33608:4;;33567:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33567:46:0;;;;;;;;;;;;:::i;:::-;33557:56;;33692:3;33678:11;;33659:16;;:30;;;;:::i;:::-;33645:7;33653:1;33645:10;;;;;;;;:::i;:::-;;;;;;;:45;;;;:::i;:::-;33644:51;;;;:::i;:::-;33631:7;33639:1;33631:10;;;;;;;;:::i;:::-;;;;;;;:64;;;;:::i;:::-;33624:71;;;;33298:405;:::o;10578:150::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;10671:6:::1;::::0;10650:40:::1;::::0;10687:1:::1;::::0;-1:-1:-1;;;;;10671:6:0::1;::::0;10650:40:::1;::::0;10687:1;;10650:40:::1;10701:6;:19:::0;;-1:-1:-1;;;;;;10701:19:0::1;::::0;;10578:150::o;35990:447::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;36144:3:::1;36121:19;:26;;36113:90;;;::::0;-1:-1:-1;;;36113:90:0;;17140:2:1;36113:90:0::1;::::0;::::1;17122:21:1::0;17179:2;17159:18;;;17152:30;17218:34;17198:18;;;17191:62;-1:-1:-1;;;17269:18:1;;;17262:49;17328:19;;36113:90:0::1;16938:415:1::0;36113:90:0::1;36234:4;36222:8;:16;;:33;;;;-1:-1:-1::0;36242:13:0;36222:33:::1;36214:94;;;::::0;-1:-1:-1;;;36214:94:0;;17560:2:1;36214:94:0::1;::::0;::::1;17542:21:1::0;17599:2;17579:18;;;17572:30;17638:34;17618:18;;;17611:62;-1:-1:-1;;;17689:18:1;;;17682:46;17745:19;;36214:94:0::1;17358:412:1::0;36214:94:0::1;36319:15;:37:::0;;;;36367:16:::1;:27:::0;36405:13:::1;:24:::0;;-1:-1:-1;;36405:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35990:447::o;18564:233::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;18618:14:::1;:22:::0;;-1:-1:-1;;18618:22:0;;::::1;::::0;;;18651:20:::1;:28:::0;;;;::::1;::::0;;6906:12;;18690::::1;:28:::0;6906:12;;18729:13:::1;:29:::0;18774:15:::1;::::0;::::1;::::0;;;::::1;18564:233::o:0;21233:260::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;21329:4:::1;21325:104;;21367:6;::::0;-1:-1:-1;;;;;21367:6:0;;::::1;21357:16:::0;;::::1;::::0;21349:68:::1;;;::::0;-1:-1:-1;;;21349:68:0;;17977:2:1;21349:68:0::1;::::0;::::1;17959:21:1::0;18016:2;17996:18;;;17989:30;18055:34;18035:18;;;18028:62;-1:-1:-1;;;18106:18:1;;;18099:37;18153:19;;21349:68:0::1;17775:403:1::0;21349:68:0::1;-1:-1:-1::0;;;;;21439:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21439:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21233:260::o;40251:487::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;40339:29:::1;:27;:29::i;:::-;40320:15;:48;;:85;;;;;40404:1;40372:29;:27;:29::i;:::-;:33;40320:85;40312:120;;;::::0;-1:-1:-1;;;40312:120:0;;18385:2:1;40312:120:0::1;::::0;::::1;18367:21:1::0;18424:2;18404:18;;;18397:30;-1:-1:-1;;;18443:18:1;;;18436:52;18505:18;;40312:120:0::1;18183:346:1::0;40312:120:0::1;40472:1;40443:26;:30:::0;;;40484:24:::1;:32:::0;;-1:-1:-1;;40484:32:0::1;::::0;;40604:16:::1;::::0;40568:6:::1;::::0;40553:48:::1;::::0;-1:-1:-1;;;40553:48:0;;40595:4:::1;40553:48;::::0;::::1;962:51:1::0;40623:3:0::1;::::0;-1:-1:-1;;;;;40568:6:0;;::::1;::::0;40553:33:::1;::::0;935:18:1;40553:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;40666:1;40647:16;:20:::0;40687:6:::1;::::0;40680:50:::1;::::0;-1:-1:-1;;;40680:50:0;;40704:10:::1;40680:50;::::0;::::1;18897:51:1::0;18964:18;;;18957:34;;;40529:97:0;;-1:-1:-1;;;;;;40687:6:0::1;::::0;40680:23:::1;::::0;18870:18:1;;40680:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40301:437;40251:487::o:0;22046:373::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;22158:10:::1;:21:::0;;;22190:15:::1;:31:::0;;;22232:10:::1;:21:::0;;;22245:8;22279:28:::1;22208:13:::0;22171:8;22279:28:::1;:::i;:::-;:41;;;;:::i;:::-;22264:12;:56:::0;22374:3:::1;22355:16;13494:5;22355:2;:16;:::i;:::-;:22;;;;:::i;:::-;22339:12;;:38;;22331:80;;;::::0;-1:-1:-1;;;22331:80:0;;19454:2:1;22331:80:0::1;::::0;::::1;19436:21:1::0;19493:2;19473:18;;;19466:30;19532:31;19512:18;;;19505:59;19581:18;;22331:80:0::1;19252:353:1::0;18081:427:0;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;18169:13:::1;::::0;::::1;::::0;::::1;;;18168:14;18160:50;;;::::0;-1:-1:-1;;;18160:50:0;;19812:2:1;18160:50:0::1;::::0;::::1;19794:21:1::0;19851:2;19831:18;;;19824:30;19890:25;19870:18;;;19863:53;19933:18;;18160:50:0::1;19610:347:1::0;18160:50:0::1;18249:2;18229:16;:22;;18221:74;;;;-1:-1:-1::0;;;18221:74:0::1;;;;;;;:::i;:::-;18306:13;:20:::0;;-1:-1:-1;;18337:18:0;;;;;18387:12:::1;18366:18;:33:::0;;;18431:37:::1;::::0;18452:16;;18431:37:::1;:::i;:::-;18410:18;:58:::0;18484:16:::1;::::0;::::1;::::0;;;::::1;18081:427:::0;:::o;31941:498::-;10491:6;;32028:10;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32059:20:0;::::1;32051:59;;;::::0;-1:-1:-1;;;32051:59:0;;20572:2:1;32051:59:0::1;::::0;::::1;20554:21:1::0;20611:2;20591:18;;;20584:30;20650:28;20630:18;;;20623:56;20696:18;;32051:59:0::1;20370:350:1::0;32051:59:0::1;-1:-1:-1::0;;;;;32129:23:0;::::1;32147:4;32129:23;;::::0;:41:::1;;-1:-1:-1::0;32157:13:0::1;::::0;::::1;::::0;::::1;;;32156:14;32129:41;32121:106;;;::::0;-1:-1:-1;;;32121:106:0;;20927:2:1;32121:106:0::1;::::0;::::1;20909:21:1::0;20966:2;20946:18;;;20939:30;21005:34;20985:18;;;20978:62;-1:-1:-1;;;21056:18:1;;;21049:50;21116:19;;32121:106:0::1;20725:416:1::0;32121:106:0::1;32265:39;::::0;-1:-1:-1;;;32265:39:0;;32298:4:::1;32265:39;::::0;::::1;962:51:1::0;32238:24:0::1;::::0;-1:-1:-1;;;;;32265:24:0;::::1;::::0;::::1;::::0;935:18:1;;32265:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32323:46;::::0;-1:-1:-1;;;32323:46:0;;-1:-1:-1;;;;;18915:32:1;;;32323:46:0::1;::::0;::::1;18897:51:1::0;18964:18;;;18957:34;;;32238:66:0;;-1:-1:-1;32323:23:0;;::::1;::::0;::::1;::::0;18870:18:1;;32323:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32385;::::0;;-1:-1:-1;;;;;18915:32:1;;18897:51;;18979:2;18964:18;;18957:34;;;32315:54:0;;-1:-1:-1;32385:46:0::1;::::0;18870:18:1;32385:46:0::1;;;;;;;32040:399;31941:498:::0;;;;:::o;6605:104::-;6661:13;6694:7;6687:14;;;;;:::i;18805:103::-;18854:16;18889:11;18882:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18882:18:0;;;;;;;;;;;;;;;;;;;;;;18805:103;:::o;21501:293::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;21610:6:::1;::::0;-1:-1:-1;;;;;21610:6:0;;::::1;21602:14:::0;;::::1;::::0;21594:84:::1;;;::::0;-1:-1:-1;;;21594:84:0;;21348:2:1;21594:84:0::1;::::0;::::1;21330:21:1::0;21387:2;21367:18;;;21360:30;21426:34;21406:18;;;21399:62;21497:27;21477:18;;;21470:55;21542:19;;21594:84:0::1;21146:421:1::0;21594:84:0::1;21689:41;21718:4;21724:5;21689:28;:41::i;:::-;21746:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21746:40:0;::::1;::::0;::::1;::::0;;;::::1;21501:293:::0;;:::o;8311:413::-;2726:10;8404:4;8448:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8448:34:0;;;;;;;;;;8501:35;;;;8493:85;;;;-1:-1:-1;;;8493:85:0;;21774:2:1;8493:85:0;;;21756:21:1;21813:2;21793:18;;;21786:30;21852:34;21832:18;;;21825:62;-1:-1:-1;;;21903:18:1;;;21896:35;21948:19;;8493:85:0;21572:401:1;8493:85:0;8614:67;2726:10;8637:7;8665:15;8646:16;:34;8614:8;:67::i;:::-;-1:-1:-1;8712:4:0;;8311:413;-1:-1:-1;;;8311:413:0:o;7069:175::-;7155:4;7172:42;2726:10;7196:9;7207:6;7172:9;:42::i;22816:282::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;22923:9:::1;22919:172;22938:19:::0;;::::1;22919:172;;;23013:8;22978:19;:32;22998:8;;23007:1;22998:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22978:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22978:32:0;:43;;-1:-1:-1;;22978:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23057:8;;23066:1;23057:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23041:38:0::1;;23070:8;23041:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;23041:38:0::1;;;;;;;;22959:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22919:172;;;;22816:282:::0;;;:::o;39505:449::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;39597:24:::1;::::0;::::1;;39596:25;39588:87;;;::::0;-1:-1:-1;;;39588:87:0;;22180:2:1;39588:87:0::1;::::0;::::1;22162:21:1::0;22219:2;22199:18;;;22192:30;22258:34;22238:18;;;22231:62;-1:-1:-1;;;22309:18:1;;;22302:47;22366:19;;39588:87:0::1;21978:413:1::0;39588:87:0::1;39712:3;39694:14;:21;;:43;;;;;39736:1;39719:14;:18;39694:43;39686:82;;;::::0;-1:-1:-1;;;39686:82:0;;22598:2:1;39686:82:0::1;::::0;::::1;22580:21:1::0;22637:2;22617:18;;;22610:30;22676:28;22656:18;;;22649:56;22722:18;;39686:82:0::1;22396:350:1::0;39686:82:0::1;39808:15;39779:26;:44:::0;39834:24:::1;:31:::0;;-1:-1:-1;;39834:31:0::1;39861:4;39834:31;::::0;;39876:16:::1;:33:::0;;;39925:21:::1;::::0;::::1;::::0;39834:24:::1;::::0;39925:21:::1;39505:449:::0;:::o;23106:182::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23191:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23191:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23246:34;;1620:41:1;;;23246:34:0::1;::::0;1593:18:1;23246:34:0::1;;;;;;;23106:182:::0;;:::o;22427:381::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;22539:11:::1;:22:::0;;;22572:16:::1;:32:::0;;;22615:11:::1;:22:::0;;;22629:8;22664:30:::1;22591:13:::0;22553:8;22664:30:::1;:::i;:::-;:44;;;;:::i;:::-;22648:13;:60:::0;22763:3:::1;22744:16;13494:5;22744:2;:16;:::i;:::-;:22;;;;:::i;:::-;22727:13;;:39;;22719:81;;;::::0;-1:-1:-1;;;22719:81:0;;22953:2:1;22719:81:0::1;::::0;::::1;22935:21:1::0;22992:2;22972:18;;;22965:30;23031:31;23011:18;;;23004:59;23080:18;;22719:81:0::1;22751:353:1::0;40746:220:0;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;40811:24:::1;:32:::0;;-1:-1:-1;;40811:32:0::1;::::0;;40838:5:::1;40854:16;:20:::0;;;40885:26:::1;:30:::0;;;40931:27:::1;::::0;::::1;::::0;40838:5;40931:27:::1;40746:220::o:0;20655:346::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;20778:6:::1;20758:13;6906:12:::0;;;6818:108;20758:13:::1;:17;::::0;20774:1:::1;20758:17;:::i;:::-;:26;;;;:::i;:::-;20745:9;:39;;20737:105;;;::::0;-1:-1:-1;;;20737:105:0;;23311:2:1;20737:105:0::1;::::0;::::1;23293:21:1::0;23350:2;23330:18;;;23323:30;23389:34;23369:18;;;23362:62;-1:-1:-1;;;23440:18:1;;;23433:51;23501:19;;20737:105:0::1;23109:417:1::0;20737:105:0::1;20893:4;20873:13;6906:12:::0;;;6818:108;20873:13:::1;:17;::::0;20889:1:::1;20873:17;:::i;:::-;:24;;;;:::i;:::-;20860:9;:37;;20852:102;;;::::0;-1:-1:-1;;;20852:102:0;;23733:2:1;20852:102:0::1;::::0;::::1;23715:21:1::0;23772:2;23752:18;;;23745:30;23811:34;23791:18;;;23784:62;-1:-1:-1;;;23862:18:1;;;23855:50;23922:19;;20852:102:0::1;23531:416:1::0;20852:102:0::1;20964:18;:30:::0;20655:346::o;19989:300::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;20112:16:::1;6800:2:::0;20112::::1;:16;:::i;:::-;20103:4;20083:13;6906:12:::0;;;6818:108;20083:13:::1;:17;::::0;20099:1:::1;20083:17;:::i;:::-;:24;;;;:::i;:::-;20082:47;;;;:::i;:::-;20072:6;:57;;20064:112;;;::::0;-1:-1:-1;;;20064:112:0;;24154:2:1;20064:112:0::1;::::0;::::1;24136:21:1::0;24193:2;24173:18;;;24166:30;24232:34;24212:18;;;24205:62;-1:-1:-1;;;24283:18:1;;;24276:40;24333:19;;20064:112:0::1;23952:406:1::0;20064:112:0::1;20213:16;6800:2:::0;20213::::1;:16;:::i;:::-;20203:27;::::0;:6;:27:::1;:::i;:::-;20187:13;:43:::0;;;20246:35:::1;::::0;160:25:1;;;20246:35:0::1;::::0;148:2:1;133:18;20246:35:0::1;14:177:1::0;19572:98:0;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;19634:20:::1;:28:::0;;-1:-1:-1;;19634:28:0::1;::::0;;19572:98::o;33966:2016::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;34107:13:::1;::::0;::::1;::::0;::::1;;;34106:14;34098:70;;;::::0;-1:-1:-1;;;34098:70:0;;24565:2:1;34098:70:0::1;::::0;::::1;24547:21:1::0;24604:2;24584:18;;;24577:30;24643:34;24623:18;;;24616:62;-1:-1:-1;;;24694:18:1;;;24687:41;24745:19;;34098:70:0::1;24363:407:1::0;34098:70:0::1;34206:2;34187:16;:21;34179:73;;;;-1:-1:-1::0;;;34179:73:0::1;;;;;;;:::i;:::-;34291:15;:22;34273:7;:14;:40;34265:83;;;::::0;-1:-1:-1;;;34265:83:0;;24977:2:1;34265:83:0::1;::::0;::::1;24959:21:1::0;25016:2;24996:18;;;24989:30;25055:32;25035:18;;;25028:60;25105:18;;34265:83:0::1;24775:354:1::0;34265:83:0::1;34384:3;34367:7;:14;:20;34359:87;;;::::0;-1:-1:-1;;;34359:87:0;;25336:2:1;34359:87:0::1;::::0;::::1;25318:21:1::0;25375:2;25355:18;;;25348:30;25414:34;25394:18;;;25387:62;-1:-1:-1;;;25465:18:1;;;25458:52;25527:19;;34359:87:0::1;25134:418:1::0;34359:87:0::1;34559:9;34555:351;34578:7;:14;34574:1;:18;34555:351;;;34613:14;34630:7;34638:1;34630:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;34655:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;34655:33:0::1;34684:4;34655:33;::::0;;34630:10;-1:-1:-1;34739:26:0::1;:15;34757:8;34739:26;:::i;:::-;-1:-1:-1::0;;;;;34703:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;34819:16:::1;6800:2:::0;34819::::1;:16;:::i;:::-;34797:15;34813:1;34797:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;34780:56;;34851:43;34867:10;34879:6;34887;34851:15;:43::i;:::-;34598:308;;34594:3;;;;;:::i;:::-;;;;34555:351;;;-1:-1:-1::0;34953:13:0::1;:20:::0;;-1:-1:-1;;34984:18:0;;;;;35034:12:::1;35013:18;:33:::0;;;35078:37:::1;::::0;35099:16;;35078:37:::1;:::i;:::-;35057:18;:58:::0;35131:16:::1;::::0;::::1;::::0;;;::::1;35205:9;;;;;;;;;-1:-1:-1::0;;;;;35205:9:0::1;-1:-1:-1::0;;;;;35205:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35193:43:0::1;;35245:4;35252:9;;;;;;;;;-1:-1:-1::0;;;;;35252:9:0::1;-1:-1:-1::0;;;;;35252:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35193:76;::::0;-1:-1:-1;;;;;;35193:76:0::1;::::0;;;;;;-1:-1:-1;;;;;25787:15:1;;;35193:76:0::1;::::0;::::1;25769:34:1::0;25839:15;;25819:18;;;25812:43;25704:18;;35193:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35184:6;:85:::0;;-1:-1:-1;;;;;;35184:85:0::1;-1:-1:-1::0;;;;;35184:85:0;;;::::1;::::0;;::::1;::::0;;35280:49:::1;::::0;-1:-1:-1;35280:26:0::1;:49::i;:::-;35377:6;::::0;35340:51:::1;::::0;-1:-1:-1;;;;;35377:6:0::1;::::0;35340:28:::1;:51::i;:::-;35471:1;35447:21;:25;35439:73;;;::::0;-1:-1:-1;;;35439:73:0;;26068:2:1;35439:73:0::1;::::0;::::1;26050:21:1::0;26107:2;26087:18;;;26080:30;26146:34;26126:18;;;26119:62;-1:-1:-1;;;26197:18:1;;;26190:33;26240:19;;35439:73:0::1;25866:399:1::0;35439:73:0::1;35560:1;35533:24;35551:4;35533:9;:24::i;:::-;:28;35525:79;;;::::0;-1:-1:-1;;;35525:79:0;;26472:2:1;35525:79:0::1;::::0;::::1;26454:21:1::0;26511:2;26491:18;;;26484:30;26550:34;26530:18;;;26523:62;-1:-1:-1;;;26601:18:1;;;26594:36;26647:19;;35525:79:0::1;26270:402:1::0;35525:79:0::1;35649:9;::::0;35617:69:::1;::::0;35634:4:::1;::::0;-1:-1:-1;;;;;35649:9:0::1;35661:24;35634:4:::0;35661:9:::1;:24::i;35617:69::-;35697:9;::::0;-1:-1:-1;;;;;35697:9:0::1;:25;35730:21;35775:4;35795:24;35775:4:::0;35795:9:::1;:24::i;:::-;35834:1;35877::::0;35928:4:::1;35948:15;35697:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33966:2016:::0;;;:::o;12583:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12583:28:0;;-1:-1:-1;12583:28:0;:::o;10736:244::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10825:22:0;::::1;10817:73;;;::::0;-1:-1:-1;;;10817:73:0;;27802:2:1;10817:73:0::1;::::0;::::1;27784:21:1::0;27841:2;27821:18;;;27814:30;27880:34;27860:18;;;27853:62;-1:-1:-1;;;27931:18:1;;;27924:36;27977:19;;10817:73:0::1;27600:402:1::0;10817:73:0::1;10927:6;::::0;10906:38:::1;::::0;-1:-1:-1;;;;;10906:38:0;;::::1;::::0;10927:6:::1;::::0;10906:38:::1;::::0;10927:6:::1;::::0;10906:38:::1;10955:6;:17:::0;;-1:-1:-1;;;;;;10955:17:0::1;-1:-1:-1::0;;;;;10955:17:0;;;::::1;::::0;;;::::1;::::0;;10736:244::o;32509:160::-;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;32603:58:::1;::::0;32567:12:::1;::::0;32611:10:::1;::::0;32635:21:::1;::::0;32567:12;32603:58;32567:12;32603:58;32635:21;32611:10;32603:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37709:1398:::0;10491:6;;-1:-1:-1;;;;;10491:6:0;2726:10;10491:22;10483:67;;;;-1:-1:-1;;;10483:67:0;;;;;;;:::i;:::-;37813:4:::1;37803:7;:14;;37795:80;;;::::0;-1:-1:-1;;;37795:80:0;;28419:2:1;37795:80:0::1;::::0;::::1;28401:21:1::0;28458:2;28438:18;;;28431:30;28497:34;28477:18;;;28470:62;-1:-1:-1;;;28548:18:1;;;28541:51;28609:19;;37795:80:0::1;28217:417:1::0;37795:80:0::1;37936:19;::::0;37918:37:::1;::::0;:15:::1;:37;:::i;:::-;37894:20;;:61;;37886:87;;;::::0;-1:-1:-1;;;37886:87:0;;28971:2:1;37886:87:0::1;::::0;::::1;28953:21:1::0;29010:2;28990:18;;;28983:30;-1:-1:-1;;;29029:18:1;;;29022:43;29082:18;;37886:87:0::1;28769:337:1::0;37886:87:0::1;38007:15;37984:20;:38:::0;38060:6:::1;::::0;38053:39:::1;::::0;-1:-1:-1;;;38053:39:0;;38086:4:::1;38053:39;::::0;::::1;962:51:1::0;38033:17:0::1;::::0;-1:-1:-1;;;;;38060:6:0::1;::::0;38053:24:::1;::::0;935:18:1;;38053:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38033:59;;38103:20;38126:24;38144:4;38126:9;:24::i;:::-;38103:47:::0;-1:-1:-1;38161:16:0::1;38202:5;38180:19;38192:7:::0;38180:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;38354:6;::::0;38378:9:::1;::::0;38347:52:::1;::::0;-1:-1:-1;;;38347:52:0;;-1:-1:-1;;;;;38378:9:0;;::::1;38347:52;::::0;::::1;18897:51:1::0;18964:18;;;18957:34;;;38161:46:0;;-1:-1:-1;38246:21:0::1;::::0;38354:6;::::1;::::0;38347:22:::1;::::0;18870:18:1;;38347:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;38445:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;38445:234:0;;-1:-1:-1;;;;;38445:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;38496:4:::1;::::0;38516:8;;38445:9;;;;38496:4;;38653:15:::1;::::0;38445:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38692:25;38747:12;38720:24;38738:4;38720:9;:24::i;:::-;:39;;;;:::i;:::-;38692:67:::0;-1:-1:-1;38773:21:0;;38770:118:::1;;38810:66;38834:4;38849:6;38858:17;38810:15;:66::i;:::-;38900:23;38926:41;38950:17:::0;38926:21:::1;:41;:::i;:::-;38900:67:::0;-1:-1:-1;38983:19:0;;38980:80:::1;;39018:30;39032:15;39018:13;:30::i;:::-;39077:22;::::0;39090:8;;39077:22:::1;::::0;;;::::1;37784:1323;;;;;;37709:1398:::0;:::o;9653:380::-;-1:-1:-1;;;;;9789:19:0;;9781:68;;;;-1:-1:-1;;;9781:68:0;;30175:2:1;9781:68:0;;;30157:21:1;30214:2;30194:18;;;30187:30;30253:34;30233:18;;;30226:62;-1:-1:-1;;;30304:18:1;;;30297:34;30348:19;;9781:68:0;29973:400:1;9781:68:0;-1:-1:-1;;;;;9868:21:0;;9860:68;;;;-1:-1:-1;;;9860:68:0;;30580:2:1;9860:68:0;;;30562:21:1;30619:2;30599:18;;;30592:30;30658:34;30638:18;;;30631:62;-1:-1:-1;;;30709:18:1;;;30702:32;30751:19;;9860:68:0;30378:398:1;9860:68:0;-1:-1:-1;;;;;9941:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9993:32;;160:25:1;;;9993:32:0;;133:18:1;9993:32:0;;;;;;;9653:380;;;:::o;23296:6212::-;-1:-1:-1;;;;;23396:18:0;;23388:68;;;;-1:-1:-1;;;23388:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23475:16:0;;23467:64;;;;-1:-1:-1;;;23467:64:0;;;;;;;:::i;:::-;23559:1;23550:6;:10;23542:52;;;;-1:-1:-1;;;23542:52:0;;31793:2:1;23542:52:0;;;31775:21:1;31832:2;31812:18;;;31805:30;31871:31;31851:18;;;31844:59;31920:18;;23542:52:0;31591:353:1;23542:52:0;23619:13;;;;;;;23615:132;;-1:-1:-1;;;;;23656:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23685:23:0;;;;;;:19;:23;;;;;;;;23656:52;23648:87;;;;-1:-1:-1;;;23648:87:0;;32151:2:1;23648:87:0;;;32133:21:1;32190:2;32170:18;;;32163:30;-1:-1:-1;;;32209:18:1;;;32202:52;32271:18;;23648:87:0;31949:346:1;23648:87:0;29610:18;;29595:12;:33;23762:26;:43;;;;-1:-1:-1;23792:13:0;;;;;;;23762:43;23759:217;;;-1:-1:-1;;;;;23830:17:0;;;;;;:11;:17;;;;;;;;23829:18;;:35;;-1:-1:-1;10429:6:0;;-1:-1:-1;;;;;23851:13:0;;;10429:6;;23851:13;23829:35;:60;;;-1:-1:-1;;;;;;23868:21:0;;23882:6;23868:21;23829:60;23821:143;;;;-1:-1:-1;;;23821:143:0;;32502:2:1;23821:143:0;;;32484:21:1;32541:2;32521:18;;;32514:30;32580:34;32560:18;;;32553:62;32651:34;32631:18;;;32624:62;-1:-1:-1;;;32702:19:1;;;32695:37;32749:19;;23821:143:0;32300:474:1;23821:143:0;-1:-1:-1;;;;;23991:24:0;;;;;;:18;:24;;;;;;;;23988:610;;;-1:-1:-1;;;;;24034:29:0;;;;;;:25;:29;;;;;;;;24031:556;;;-1:-1:-1;;;;;24141:31:0;;;;;;:25;:31;;;;;;24176:15;-1:-1:-1;24141:50:0;24133:78;;;;-1:-1:-1;;;24133:78:0;;32981:2:1;24133:78:0;;;32963:21:1;33020:2;33000:18;;;32993:30;-1:-1:-1;;;33039:18:1;;;33032:45;33094:18;;24133:78:0;32779:339:1;24133:78:0;24248:23;:21;:23::i;:::-;24238:6;:33;;24230:98;;;;-1:-1:-1;;;24230:98:0;;33325:2:1;24230:98:0;;;33307:21:1;33364:2;33344:18;;;33337:30;33403:34;33383:18;;;33376:62;-1:-1:-1;;;33454:18:1;;;33447:50;33514:19;;24230:98:0;33123:416:1;24230:98:0;24381:26;:15;24399:8;24381:26;:::i;:::-;-1:-1:-1;;;;;24347:31:0;;;;;;:25;:31;;;;;:60;24031:556;;;-1:-1:-1;;;;;24433:23:0;;;;;;:19;:23;;;;;;;;24429:158;;24476:95;;-1:-1:-1;;;24476:95:0;;33746:2:1;24476:95:0;;;33728:21:1;33785:2;33765:18;;;33758:30;33824:34;33804:18;;;33797:62;33895:34;33875:18;;;33868:62;-1:-1:-1;;;33946:19:1;;;33939:52;34008:19;;24476:95:0;33544:489:1;24429:158:0;24621:14;;;;24618:1662;;;10429:6;;-1:-1:-1;;;;;24655:15:0;;;10429:6;;24655:15;;;;:32;;-1:-1:-1;10429:6:0;;-1:-1:-1;;;;;24674:13:0;;;10429:6;;24674:13;;24655:32;:52;;;;-1:-1:-1;;;;;;24691:16:0;;;;24655:52;:77;;;;-1:-1:-1;;;;;;24711:21:0;;24725:6;24711:21;;24655:77;:107;;;;-1:-1:-1;;;;;;24737:25:0;;;;;;:19;:25;;;;;;;;24736:26;24655:107;:135;;;;-1:-1:-1;;;;;;24767:23:0;;;;;;:19;:23;;;;;;;;24766:24;24655:135;24651:1618;;;24966:20;;;;24962:506;;;25028:9;;-1:-1:-1;;;;;25014:24:0;;;25028:9;;25014:24;;;;:49;;-1:-1:-1;25056:6:0;;-1:-1:-1;;;;;25042:21:0;;;25056:6;;25042:21;;25014:49;25010:439;;;25141:16;25156:1;25141:12;:16;:::i;:::-;25128:9;25099:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;25196:16:0;25211:1;25196:12;:16;:::i;:::-;-1:-1:-1;;;;;25161:32:0;;;;;;:28;:32;;;;;;:51;25099:113;25091:179;;;;-1:-1:-1;;;25091:179:0;;34240:2:1;25091:179:0;;;34222:21:1;34279:2;34259:18;;;34252:30;34318:34;34298:18;;;34291:62;-1:-1:-1;;;34369:18:1;;;34362:51;34430:19;;25091:179:0;34038:417:1;25091:179:0;25326:9;25297:39;;;;:28;:39;;;;;;25339:12;25297:54;;;;-1:-1:-1;;;;;25378:32:0;;;;;;:47;25010:439;-1:-1:-1;;;;;25537:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;25573:35:0;;;;;;:31;:35;;;;;;;;25572:36;25537:71;25533:721;;;25651:12;;25641:6;:22;;25633:75;;;;-1:-1:-1;;;25633:75:0;;34662:2:1;25633:75:0;;;34644:21:1;34701:2;34681:18;;;34674:30;34740:34;34720:18;;;34713:62;-1:-1:-1;;;34791:18:1;;;34784:38;34839:19;;25633:75:0;34460:404:1;25633:75:0;25765:9;;25748:13;25758:2;25748:9;:13::i;:::-;25739:22;;:6;:22;:::i;:::-;:35;;25731:72;;;;-1:-1:-1;;;25731:72:0;;35071:2:1;25731:72:0;;;35053:21:1;35110:2;35090:18;;;35083:30;-1:-1:-1;;;35129:18:1;;;35122:54;35193:18;;25731:72:0;34869:348:1;25731:72:0;25533:721;;;-1:-1:-1;;;;;25880:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;25914:37:0;;;;;;:31;:37;;;;;;;;25913:38;25880:71;25876:378;;;25994:13;;25984:6;:23;;25976:78;;;;-1:-1:-1;;;25976:78:0;;35424:2:1;25976:78:0;;;35406:21:1;35463:2;35443:18;;;35436:30;35502:34;35482:18;;;35475:62;-1:-1:-1;;;35553:18:1;;;35546:40;35603:19;;25976:78:0;35222:406:1;25876:378:0;-1:-1:-1;;;;;26102:35:0;;;;;;:31;:35;;;;;;;;26097:157;;26196:9;;26179:13;26189:2;26179:9;:13::i;:::-;26170:22;;:6;:22;:::i;:::-;:35;;26162:72;;;;-1:-1:-1;;;26162:72:0;;35071:2:1;26162:72:0;;;35053:21:1;35110:2;35090:18;;;35083:30;-1:-1:-1;;;35129:18:1;;;35122:54;35193:18;;26162:72:0;34869:348:1;26162:72:0;26292:28;26323:24;26341:4;26323:9;:24::i;:::-;26407:18;;26292:55;;-1:-1:-1;26383:42:0;;;;;;;26441:22;;-1:-1:-1;26452:11:0;;;;;;;26441:22;:35;;;;-1:-1:-1;26468:8:0;;-1:-1:-1;;;26468:8:0;;;;26467:9;26441:35;:71;;;;-1:-1:-1;;;;;;26481:31:0;;;;;;:25;:31;;;;;;;;26480:32;26441:71;:101;;;;-1:-1:-1;;;;;;26517:25:0;;;;;;:19;:25;;;;;;;;26516:26;26441:101;:129;;;;-1:-1:-1;;;;;;26547:23:0;;;;;;:19;:23;;;;;;;;26546:24;26441:129;26438:232;;;26587:8;:15;;-1:-1:-1;;;;26587:15:0;-1:-1:-1;;;26587:15:0;;;26617:10;:8;:10::i;:::-;26642:8;:16;;-1:-1:-1;;;;26642:16:0;;;26438:232;26686:8;;-1:-1:-1;;;26686:8:0;;;;26685:9;:42;;;;-1:-1:-1;;;;;;26698:29:0;;;;;;:25;:29;;;;;;;;26685:42;:59;;;;-1:-1:-1;26731:13:0;;;;26685:59;:114;;;;;26784:15;;26767:14;;:32;;;;:::i;:::-;26748:15;:51;;26685:114;:144;;;;-1:-1:-1;;;;;;26804:25:0;;;;;;:19;:25;;;;;;;;26803:26;26685:144;26682:204;;;26845:29;:27;:29::i;:::-;-1:-1:-1;;;;;27016:25:0;;26898:12;27016:25;;;:19;:25;;;;;;26913:4;;27016:25;;;:52;;-1:-1:-1;;;;;;27045:23:0;;;;;;:19;:23;;;;;;;;27016:52;27013:99;;;-1:-1:-1;27095:5:0;27013:99;27132:12;27159:20;27273:7;27270:2185;;;29610:18;;29595:12;:33;27335:60;;;;-1:-1:-1;;;;;;27364:31:0;;;;;;:25;:31;;;;;;;;27335:60;:94;;;;-1:-1:-1;;;;;;27400:29:0;;;;;;:25;:29;;;;;;;;27399:30;27335:94;:122;;;;-1:-1:-1;;;;;;27434:23:0;;;;;;:19;:23;;;;;;;;27433:24;27335:122;:142;;;;;27476:1;27461:12;;:16;27335:142;27332:1812;;;29610:18;;29595:12;:33;27515:330;;27824:1;27808:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;27515:330:0;-1:-1:-1;;;;;27869:15:0;;;;;;:11;:15;;;;;;;;27865:214;;-1:-1:-1;;;;;27908:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;27908:22:0;27926:4;27908:22;;;;;;27953:10;:15;;27926:4;;27953:10;;:15;;27926:4;;27953:15;:::i;:::-;;;;-1:-1:-1;;27991:11:0;:20;;;;;;;-1:-1:-1;27991:20:0;;;;;;;;-1:-1:-1;;;;;;27991:20:0;-1:-1:-1;;;;;27991:20:0;;;;;;;;28039;;962:51:1;;;28039:20:0;;950:2:1;935:18;28039:20:0;;;;;;;27865:214;13494:5;28115:12;;28106:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28099:42;;28204:12;;28186:15;;28179:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28157:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28272:12:0;;28259:10;;28252:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;28235:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;28338:12:0;;28325:10;;28318:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;28303:47;;27332:1812;;;-1:-1:-1;;;;;28415:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28464:1;28448:13;;:17;28415:50;28411:733;;;13494:5;28501:13;;28492:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;28485:43;;28595:13;;28576:16;;28569:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;28547:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28665:13:0;;28651:11;;28644:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;28627:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;28733:12:0;;28719:11;;28712:18;;:4;:18;:::i;28411:733::-;-1:-1:-1;;;;;28808:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28858:1;28843:12;;:16;28808:51;28805:339;;;13494:5;28893:12;;28884:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28877:42;;28982:12;;28964:15;;28957:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28935:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29050:12:0;;29037:10;;29030:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29013:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;29116:12:0;;29103:10;;29096:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29081:47;;28805:339;29175:8;;29172:235;;29207:42;29223:4;29237;29244;29207:15;:42::i;:::-;29271:16;;29268:124;;29311:61;29335:4;29350:6;29359:12;29311:15;:61::i;:::-;29429:14;29439:4;29429:14;;:::i;:::-;;;27270:2185;29467:33;29483:4;29489:2;29493:6;29467:15;:33::i;:::-;23375:6133;;;;;23296:6212;;;:::o;30744:1189::-;30785:23;30811:24;30829:4;30811:9;:24::i;:::-;30785:50;;30846:25;30895:13;;30874:18;;:34;;;;:::i;:::-;30846:62;-1:-1:-1;30932:20:0;;;:46;;-1:-1:-1;30956:22:0;;30932:46;30929:60;;;30981:7;;30744:1189::o;30929:60::-;31022:18;;:23;;31043:2;31022:23;:::i;:::-;31004:15;:41;31001:113;;;31079:18;;:23;;31100:2;31079:23;:::i;:::-;31061:41;;31001:113;31126:12;31208:23;31293:1;31273:17;31252:18;;31234:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;31208:86;-1:-1:-1;31315:51:0;31332:33;31208:86;31332:15;:33;:::i;:::-;31315:16;:51::i;:::-;31562:18;;31409:21;;;;31388:18;;31562:20;;31581:1;;31562:20;:::i;:::-;31541:42;;:17;:42;:::i;:::-;31524:13;;31511:26;;:10;:26;:::i;:::-;:73;;;;:::i;:::-;31490:94;-1:-1:-1;31597:29:0;31490:94;31597:29;;:::i;:::-;31672:1;31651:18;:22;;;31684:13;:17;31597:29;-1:-1:-1;31725:19:0;;;;;:42;;;31766:1;31748:15;:19;31725:42;31722:119;;;31783:46;31796:15;31813;31783:12;:46::i;:::-;31874:11;;31866:59;;-1:-1:-1;;;;;31874:11:0;;;;31899:21;;31866:59;;;;31899:21;31874:11;31866:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;30744:1189:0:o;21802:236::-;-1:-1:-1;;;;;21885:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21885:39:0;;;;;;;21935;21885:31;:39;21935:26;:39::i;8732:614::-;-1:-1:-1;;;;;8872:20:0;;8864:70;;;;-1:-1:-1;;;8864:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8953:23:0;;8945:71;;;;-1:-1:-1;;;8945:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9053:17:0;;9029:21;9053:17;;;;;;;;;;;9089:23;;;;9081:74;;;;-1:-1:-1;;;9081:74:0;;35835:2:1;9081:74:0;;;35817:21:1;35874:2;35854:18;;;35847:30;35913:34;35893:18;;;35886:62;-1:-1:-1;;;35964:18:1;;;35957:36;36010:19;;9081:74:0;35633:402:1;9081:74:0;-1:-1:-1;;;;;9191:17:0;;;:9;:17;;;;;;;;;;;9211:22;;;9191:42;;9255:20;;;;;;;;:30;;9227:6;;9191:9;9255:30;;9227:6;;9255:30;:::i;:::-;;;;;;;;9320:9;-1:-1:-1;;;;;9303:35:0;9312:6;-1:-1:-1;;;;;9303:35:0;;9331:6;9303:35;;;;160:25:1;;148:2;133:18;;14:177;9303:35:0;;;;;;;;8853:493;8732:614;;;:::o;21013:207::-;-1:-1:-1;;;;;21101:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21101:52:0;;;;;;;;;;21169:43;;36208:51:1;;;36275:18;;;36268:50;21169:43:0;;36181:18:1;21169:43:0;;;;;;;21013:207;;:::o;39115:382::-;39203:16;;;39217:1;39203:16;;;;;;;;39179:21;;39203:16;;;;;;;;-1:-1:-1;;39240:9:0;;:16;;;-1:-1:-1;;;39240:16:0;;;;39179:40;;-1:-1:-1;;;;;;39240:9:0;;;;:14;;-1:-1:-1;39240:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39230:4;39235:1;39230:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;39230:26:0;;;-1:-1:-1;;;;;39230:26:0;;;;;39285:4;39267;39272:1;39267:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39267:23:0;;;:7;;;;;;;;;:23;39303:9;;:186;;-1:-1:-1;;;39303:186:0;;:9;;;:60;;39371:11;;39303:186;;:9;;39414:4;;39441:6;;39463:15;;39303:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39168:329;39115:382;:::o;36449:1252::-;36535:15;36518:14;:32;;;36571:20;:38;36647:6;;36640:39;;-1:-1:-1;;;36640:39:0;;36673:4;36640:39;;;962:51:1;-1:-1:-1;;;;;;;36647:6:0;;36640:24;;935:18:1;;36640:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36620:59;;36690:20;36713:24;36731:4;36713:9;:24::i;:::-;36690:47;;36748:16;36798:5;36779:16;;36767:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;36950:6;;36974:9;;36943:52;;-1:-1:-1;;;36943:52:0;;-1:-1:-1;;;;;36974:9:0;;;36943:52;;;18897:51:1;18964:18;;;18957:34;;;36748:55:0;;-1:-1:-1;36842:21:0;;36950:6;;;36943:22;;18870:18:1;;36943:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;37041:9:0;;:234;;-1:-1:-1;;;37041:234:0;;-1:-1:-1;;;;;37041:9:0;;;;:28;;:234;;37092:4;;37112:8;;37041:9;;;;37092:4;;37249:15;;37041:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37288:25;37343:12;37316:24;37334:4;37316:9;:24::i;:::-;:39;;;;:::i;:::-;37288:67;-1:-1:-1;37369:21:0;;37366:118;;37406:66;37430:4;37445:6;37454:17;37406:15;:66::i;:::-;37496:23;37522:41;37546:17;37522:21;:41;:::i;:::-;37496:67;-1:-1:-1;37579:19:0;;37576:80;;37614:30;37628:15;37614:13;:30::i;:::-;37673:20;;37684:8;;37673:20;;;;;36497:1204;;;;;;36449:1252::o;29644:573::-;29796:16;;;29810:1;29796:16;;;;;;;;29772:21;;29796:16;;;;;;;;;;-1:-1:-1;29796:16:0;29772:40;;29841:4;29823;29828:1;29823:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29823:23:0;;;:7;;;;;;;;;;:23;;;;29867:9;;:16;;;-1:-1:-1;;;29867:16:0;;;;:9;;;;;:14;;:16;;;;;29823:7;;29867:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29857:4;29862:1;29857:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29857:26:0;;;:7;;;;;;;;;:26;29928:9;;29896:56;;29913:4;;29928:9;29940:11;29896:8;:56::i;:::-;29991:9;;:218;;-1:-1:-1;;;29991:218:0;;-1:-1:-1;;;;;29991:9:0;;;;:60;;:218;;30066:11;;29991:9;;30136:4;;30163;;30183:15;;29991:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30229:507;30409:9;;30377:56;;30394:4;;-1:-1:-1;;;;;30409:9:0;30421:11;30377:8;:56::i;:::-;30476:9;;:252;;-1:-1:-1;;;30476:252:0;;-1:-1:-1;;;;;30476:9:0;;;;:25;;30509:9;;30476:252;;30542:4;;30562:11;;30476:9;;;;30542:4;;30702:15;;30476:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30229:507;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:247::-;1731:6;1784:2;1772:9;1763:7;1759:23;1755:32;1752:52;;;1800:1;1797;1790:12;1752:52;1839:9;1826:23;1858:31;1883:5;1858:31;:::i;:::-;1908:5;1672:247;-1:-1:-1;;;1672:247:1:o;1924:180::-;1983:6;2036:2;2024:9;2015:7;2011:23;2007:32;2004:52;;;2052:1;2049;2042:12;2004:52;-1:-1:-1;2075:23:1;;1924:180;-1:-1:-1;1924:180:1:o;2109:456::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;2310:9;2297:23;2329:31;2354:5;2329:31;:::i;:::-;2379:5;-1:-1:-1;2436:2:1;2421:18;;2408:32;2449:33;2408:32;2449:33;:::i;:::-;2109:456;;2501:7;;-1:-1:-1;;;2555:2:1;2540:18;;;;2527:32;;2109:456::o;2967:367::-;3030:8;3040:6;3094:3;3087:4;3079:6;3075:17;3071:27;3061:55;;3112:1;3109;3102:12;3061:55;-1:-1:-1;3135:20:1;;3178:18;3167:30;;3164:50;;;3210:1;3207;3200:12;3164:50;3247:4;3239:6;3235:17;3223:29;;3307:3;3300:4;3290:6;3287:1;3283:14;3275:6;3271:27;3267:38;3264:47;3261:67;;;3324:1;3321;3314:12;3261:67;2967:367;;;;;:::o;3339:437::-;3425:6;3433;3486:2;3474:9;3465:7;3461:23;3457:32;3454:52;;;3502:1;3499;3492:12;3454:52;3542:9;3529:23;3575:18;3567:6;3564:30;3561:50;;;3607:1;3604;3597:12;3561:50;3646:70;3708:7;3699:6;3688:9;3684:22;3646:70;:::i;:::-;3735:8;;3620:96;;-1:-1:-1;3339:437:1;-1:-1:-1;;;;3339:437:1:o;3781:118::-;3867:5;3860:13;3853:21;3846:5;3843:32;3833:60;;3889:1;3886;3879:12;3904:377;3978:6;3986;3994;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4099:9;4086:23;4076:33;;4156:2;4145:9;4141:18;4128:32;4118:42;;4210:2;4199:9;4195:18;4182:32;4223:28;4245:5;4223:28;:::i;:::-;4270:5;4260:15;;;3904:377;;;;;:::o;4286:382::-;4351:6;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4467:9;4454:23;4486:31;4511:5;4486:31;:::i;:::-;4536:5;-1:-1:-1;4593:2:1;4578:18;;4565:32;4606:30;4565:32;4606:30;:::i;:::-;4655:7;4645:17;;;4286:382;;;;;:::o;4673:316::-;4750:6;4758;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;-1:-1:-1;;4858:23:1;;;4928:2;4913:18;;4900:32;;-1:-1:-1;4979:2:1;4964:18;;;4951:32;;4673:316;-1:-1:-1;4673:316:1:o;4994:388::-;5062:6;5070;5123:2;5111:9;5102:7;5098:23;5094:32;5091:52;;;5139:1;5136;5129:12;5091:52;5178:9;5165:23;5197:31;5222:5;5197:31;:::i;:::-;5247:5;-1:-1:-1;5304:2:1;5289:18;;5276:32;5317:33;5276:32;5317:33;:::i;5387:461::-;5440:3;5478:5;5472:12;5505:6;5500:3;5493:19;5531:4;5560:2;5555:3;5551:12;5544:19;;5597:2;5590:5;5586:14;5618:1;5628:195;5642:6;5639:1;5636:13;5628:195;;;5707:13;;-1:-1:-1;;;;;5703:39:1;5691:52;;5763:12;;;;5798:15;;;;5739:1;5657:9;5628:195;;;-1:-1:-1;5839:3:1;;5387:461;-1:-1:-1;;;;;5387:461:1:o;5853:261::-;6032:2;6021:9;6014:21;5995:4;6052:56;6104:2;6093:9;6089:18;6081:6;6052:56;:::i;6119:566::-;6211:6;6219;6227;6280:2;6268:9;6259:7;6255:23;6251:32;6248:52;;;6296:1;6293;6286:12;6248:52;6336:9;6323:23;6369:18;6361:6;6358:30;6355:50;;;6401:1;6398;6391:12;6355:50;6440:70;6502:7;6493:6;6482:9;6478:22;6440:70;:::i;:::-;6529:8;;-1:-1:-1;6414:96:1;-1:-1:-1;;6614:2:1;6599:18;;6586:32;6627:28;6586:32;6627:28;:::i;6690:127::-;6751:10;6746:3;6742:20;6739:1;6732:31;6782:4;6779:1;6772:15;6806:4;6803:1;6796:15;6822:275;6893:2;6887:9;6958:2;6939:13;;-1:-1:-1;;6935:27:1;6923:40;;6993:18;6978:34;;7014:22;;;6975:62;6972:88;;;7040:18;;:::i;:::-;7076:2;7069:22;6822:275;;-1:-1:-1;6822:275:1:o;7102:183::-;7162:4;7195:18;7187:6;7184:30;7181:56;;;7217:18;;:::i;:::-;-1:-1:-1;7262:1:1;7258:14;7274:4;7254:25;;7102:183::o;7290:662::-;7344:5;7397:3;7390:4;7382:6;7378:17;7374:27;7364:55;;7415:1;7412;7405:12;7364:55;7451:6;7438:20;7477:4;7501:60;7517:43;7557:2;7517:43;:::i;:::-;7501:60;:::i;:::-;7595:15;;;7681:1;7677:10;;;;7665:23;;7661:32;;;7626:12;;;;7705:15;;;7702:35;;;7733:1;7730;7723:12;7702:35;7769:2;7761:6;7757:15;7781:142;7797:6;7792:3;7789:15;7781:142;;;7863:17;;7851:30;;7901:12;;;;7814;;7781:142;;;-1:-1:-1;7941:5:1;7290:662;-1:-1:-1;;;;;;7290:662:1:o;7957:1283::-;8084:6;8092;8100;8153:2;8141:9;8132:7;8128:23;8124:32;8121:52;;;8169:1;8166;8159:12;8121:52;8209:9;8196:23;8238:18;8279:2;8271:6;8268:14;8265:34;;;8295:1;8292;8285:12;8265:34;8333:6;8322:9;8318:22;8308:32;;8378:7;8371:4;8367:2;8363:13;8359:27;8349:55;;8400:1;8397;8390:12;8349:55;8436:2;8423:16;8458:4;8482:60;8498:43;8538:2;8498:43;:::i;8482:60::-;8576:15;;;8658:1;8654:10;;;;8646:19;;8642:28;;;8607:12;;;;8682:19;;;8679:39;;;8714:1;8711;8704:12;8679:39;8738:11;;;;8758:217;8774:6;8769:3;8766:15;8758:217;;;8854:3;8841:17;8871:31;8896:5;8871:31;:::i;:::-;8915:18;;8791:12;;;;8953;;;;8758:217;;;8994:5;-1:-1:-1;;9037:18:1;;9024:32;;-1:-1:-1;;9068:16:1;;;9065:36;;;9097:1;9094;9087:12;9065:36;;9120:63;9175:7;9164:8;9153:9;9149:24;9120:63;:::i;:::-;9110:73;;;9230:2;9219:9;9215:18;9202:32;9192:42;;7957:1283;;;;;:::o;9245:380::-;9324:1;9320:12;;;;9367;;;9388:61;;9442:4;9434:6;9430:17;9420:27;;9388:61;9495:2;9487:6;9484:14;9464:18;9461:38;9458:161;;9541:10;9536:3;9532:20;9529:1;9522:31;9576:4;9573:1;9566:15;9604:4;9601:1;9594:15;9458:161;;9245:380;;;:::o;9630:356::-;9832:2;9814:21;;;9851:18;;;9844:30;9910:34;9905:2;9890:18;;9883:62;9977:2;9962:18;;9630:356::o;10762:127::-;10823:10;10818:3;10814:20;10811:1;10804:31;10854:4;10851:1;10844:15;10878:4;10875:1;10868:15;10894:168;10934:7;11000:1;10996;10992:6;10988:14;10985:1;10982:21;10977:1;10970:9;10963:17;10959:45;10956:71;;;11007:18;;:::i;:::-;-1:-1:-1;11047:9:1;;10894:168::o;11067:422::-;11156:1;11199:5;11156:1;11213:270;11234:7;11224:8;11221:21;11213:270;;;11293:4;11289:1;11285:6;11281:17;11275:4;11272:27;11269:53;;;11302:18;;:::i;:::-;11352:7;11342:8;11338:22;11335:55;;;11372:16;;;;11335:55;11451:22;;;;11411:15;;;;11213:270;;;11217:3;11067:422;;;;;:::o;11494:806::-;11543:5;11573:8;11563:80;;-1:-1:-1;11614:1:1;11628:5;;11563:80;11662:4;11652:76;;-1:-1:-1;11699:1:1;11713:5;;11652:76;11744:4;11762:1;11757:59;;;;11830:1;11825:130;;;;11737:218;;11757:59;11787:1;11778:10;;11801:5;;;11825:130;11862:3;11852:8;11849:17;11846:43;;;11869:18;;:::i;:::-;-1:-1:-1;;11925:1:1;11911:16;;11940:5;;11737:218;;12039:2;12029:8;12026:16;12020:3;12014:4;12011:13;12007:36;12001:2;11991:8;11988:16;11983:2;11977:4;11974:12;11970:35;11967:77;11964:159;;;-1:-1:-1;12076:19:1;;;12108:5;;11964:159;12155:34;12180:8;12174:4;12155:34;:::i;:::-;12225:6;12221:1;12217:6;12213:19;12204:7;12201:32;12198:58;;;12236:18;;:::i;:::-;12274:20;;11494:806;-1:-1:-1;;;11494:806:1:o;12305:140::-;12363:5;12392:47;12433:4;12423:8;12419:19;12413:4;12392:47;:::i;12450:217::-;12490:1;12516;12506:132;;12560:10;12555:3;12551:20;12548:1;12541:31;12595:4;12592:1;12585:15;12623:4;12620:1;12613:15;12506:132;-1:-1:-1;12652:9:1;;12450:217::o;13901:128::-;13941:3;13972:1;13968:6;13965:1;13962:13;13959:39;;;13978:18;;:::i;:::-;-1:-1:-1;14014:9:1;;13901:128::o;14467:127::-;14528:10;14523:3;14519:20;14516:1;14509:31;14559:4;14556:1;14549:15;14583:4;14580:1;14573:15;14599:135;14638:3;14659:17;;;14656:43;;14679:18;;:::i;:::-;-1:-1:-1;14726:1:1;14715:13;;14599:135::o;15459:251::-;15529:6;15582:2;15570:9;15561:7;15557:23;15553:32;15550:52;;;15598:1;15595;15588:12;15550:52;15630:9;15624:16;15649:31;15674:5;15649:31;:::i;15715:332::-;15922:6;15911:9;15904:25;15965:2;15960;15949:9;15945:18;15938:30;15885:4;15985:56;16037:2;16026:9;16022:18;16014:6;15985:56;:::i;:::-;15977:64;15715:332;-1:-1:-1;;;;15715:332:1:o;16052:881::-;16147:6;16178:2;16221;16209:9;16200:7;16196:23;16192:32;16189:52;;;16237:1;16234;16227:12;16189:52;16270:9;16264:16;16303:18;16295:6;16292:30;16289:50;;;16335:1;16332;16325:12;16289:50;16358:22;;16411:4;16403:13;;16399:27;-1:-1:-1;16389:55:1;;16440:1;16437;16430:12;16389:55;16469:2;16463:9;16492:60;16508:43;16548:2;16508:43;:::i;16492:60::-;16586:15;;;16668:1;16664:10;;;;16656:19;;16652:28;;;16617:12;;;;16692:19;;;16689:39;;;16724:1;16721;16714:12;16689:39;16748:11;;;;16768:135;16784:6;16779:3;16776:15;16768:135;;;16850:10;;16838:23;;16801:12;;;;16881;;;;16768:135;;;16922:5;16052:881;-1:-1:-1;;;;;;;16052:881:1:o;18534:184::-;18604:6;18657:2;18645:9;18636:7;18632:23;18628:32;18625:52;;;18673:1;18670;18663:12;18625:52;-1:-1:-1;18696:16:1;;18534:184;-1:-1:-1;18534:184:1:o;19002:245::-;19069:6;19122:2;19110:9;19101:7;19097:23;19093:32;19090:52;;;19138:1;19135;19128:12;19090:52;19170:9;19164:16;19189:28;19211:5;19189:28;:::i;19962:403::-;20164:2;20146:21;;;20203:2;20183:18;;;20176:30;20242:34;20237:2;20222:18;;20215:62;-1:-1:-1;;;20308:2:1;20293:18;;20286:37;20355:3;20340:19;;19962:403::o;26677:607::-;-1:-1:-1;;;;;27036:15:1;;;27018:34;;27083:2;27068:18;;27061:34;;;;27126:2;27111:18;;27104:34;;;;27169:2;27154:18;;27147:34;;;;27218:15;;;27212:3;27197:19;;27190:44;26998:3;27250:19;;27243:35;;;;26967:3;26952:19;;26677:607::o;27289:306::-;27377:6;27385;27393;27446:2;27434:9;27425:7;27421:23;27417:32;27414:52;;;27462:1;27459;27452:12;27414:52;27491:9;27485:16;27475:26;;27541:2;27530:9;27526:18;27520:25;27510:35;;27585:2;27574:9;27570:18;27564:25;27554:35;;27289:306;;;;;:::o;28639:125::-;28679:4;28707:1;28704;28701:8;28698:34;;;28712:18;;:::i;:::-;-1:-1:-1;28749:9:1;;28639:125::o;29723:245::-;29802:6;29810;29863:2;29851:9;29842:7;29838:23;29834:32;29831:52;;;29879:1;29876;29869:12;29831:52;-1:-1:-1;;29902:16:1;;29958:2;29943:18;;;29937:25;29902:16;;29937:25;;-1:-1:-1;29723:245:1:o;30781:401::-;30983:2;30965:21;;;31022:2;31002:18;;;30995:30;31061:34;31056:2;31041:18;;31034:62;-1:-1:-1;;;31127:2:1;31112:18;;31105:35;31172:3;31157:19;;30781:401::o;31187:399::-;31389:2;31371:21;;;31428:2;31408:18;;;31401:30;31467:34;31462:2;31447:18;;31440:62;-1:-1:-1;;;31533:2:1;31518:18;;31511:33;31576:3;31561:19;;31187:399::o;36329:510::-;36600:6;36589:9;36582:25;36643:3;36638:2;36627:9;36623:18;36616:31;36563:4;36664:57;36716:3;36705:9;36701:19;36693:6;36664:57;:::i;:::-;-1:-1:-1;;;;;36757:32:1;;;;36752:2;36737:18;;36730:60;-1:-1:-1;36821:2:1;36806:18;36799:34;36656:65;36329:510;-1:-1:-1;;36329:510:1:o;36844:582::-;37143:6;37132:9;37125:25;37186:6;37181:2;37170:9;37166:18;37159:34;37229:3;37224:2;37213:9;37209:18;37202:31;37106:4;37250:57;37302:3;37291:9;37287:19;37279:6;37250:57;:::i;:::-;-1:-1:-1;;;;;37343:32:1;;;;37338:2;37323:18;;37316:60;-1:-1:-1;37407:3:1;37392:19;37385:35;37242:65;36844:582;-1:-1:-1;;;36844:582:1:o

Swarm Source

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