ETH Price: $3,155.29 (+1.26%)
Gas: 11 Gwei

Token

Miyazaki Inu (MIYAZAKI)
 

Overview

Max Total Supply

1,000,000,000,000,000 MIYAZAKI

Holders

1,833

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

With the recent boom of Anime Crypto tokens, Miyazaki Inu intend to build a foundation to where all these tokens can connect with one another in some way, with Ghilbi Swap. It aims to offer an one stop shop where people can buy, sell, exchange, and stake their Anime Crypto tokens.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AaTokenContract

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-04
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

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

interface IERC20Upgradeable {
    /**
     * @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/od/ai/nu/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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _aspecial) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function setBlacklistEnabled(address account, bool enabled) external;
}

contract AaTokenContract is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    bool private allowedPresaleExclusion = true;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    struct FeesStruct {
        uint16 reflectFee;
        uint16 liquidityFee;
        uint16 marketingFee;
    }

    struct StaticValuesStruct {
        uint16 maxReflectFee;
        uint16 maxLiquidityFee;
        uint16 maxMarketingFee;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 liquidityRatio;
        uint16 marketingRatio;
        uint16 totalRatio;
    }

    FeesStruct private currentTaxes = FeesStruct({
        reflectFee: 0,
        liquidityFee: 0,
        marketingFee: 0
        });

    FeesStruct public _buyTaxes = FeesStruct({
        reflectFee: 300,
        liquidityFee: 300,
        marketingFee: 300
        });

    FeesStruct public _sellTaxes = FeesStruct({
        reflectFee: 300,
        liquidityFee: 300,
        marketingFee: 300
        });

    FeesStruct public _transferTaxes = FeesStruct({
        reflectFee: 300,
        liquidityFee: 300,
        marketingFee: 300
        });

    Ratios public _ratios = Ratios({
        liquidityRatio: _buyTaxes.liquidityFee,
        marketingRatio: _buyTaxes.marketingFee,
        totalRatio: _buyTaxes.liquidityFee + _buyTaxes.marketingFee
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflectFee: 800,
        maxLiquidityFee: 800,
        maxMarketingFee: 800,
        masterTaxDivisor: 10000
        });

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0xFe9EBe595617baf16101A6bd607248d538D7Ec8b);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        _approve(_msgSender(), _routerAddress, type(uint256).max);
        _approve(address(this), _routerAddress, type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;
    }
    
    bool contractInitialized = false;

    function intializeContract(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(!contractInitialized, "Contract already initialized.");
        require(accounts.length < 50, "Max 50 wallets.");
        require(accounts.length == amounts.length, "Must be equal lengths.");

        _name = "Miyazaki Inu";
        _symbol = "MIYAZAKI";
        startingSupply = 1_000_000_000_000_000;
        if (startingSupply < 10000000000) {
            _decimals = 18;
        } else {
            _decimals = 9;
        }
        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        uint256 percent = 2;
        uint256 divisor = 1000;
        _maxTxAmount = (_tTotal * percent) / divisor;
        maxTxAmountUI = (startingSupply * percent) / divisor;
        percent = 55;
        divisor = 10000;
        _maxWalletSize = (_tTotal * percent) / divisor;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        contractInitialized = true;     
        _rOwned[owner()] = _rTotal;
        emit Transfer(address(0), owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        for(uint256 i = 0; i < accounts.length; i++){
            address wallet = accounts[i];
            uint256 amount = amounts[i]*10**_decimals;
            _transfer(owner(), wallet, amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));

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

        enableTrading();
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        if (tradingEnabled){
            setExcludedFromReward(newOwner, true);
        }
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view returns (uint8) { return _decimals; }
    function symbol() external view returns (string memory) { return _symbol; }
    function name() external view returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            if(_excluded.length == 1){
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                for (uint256 i = 0; i < _excluded.length; i++) {
                    if (_excluded[i] == account) {
                        _excluded[i] = _excluded[_excluded.length - 1];
                        _tOwned[account] = 0;
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        antiSnipe = AntiSnipe(initializer);
    }

    function removeSniper(address account) external onlyOwner() {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiGas, bool _antiBlock, bool _antiSpecial) external onlyOwner() {
        antiSnipe.setProtections(_antiSnipe, _antiGas, _antiBlock, _antiSpecial);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }
    
    function setTaxesBuy(uint16 reflectFee, uint16 liquidityFee, uint16 marketingFee) external onlyOwner {
        require(reflectFee <= staticVals.maxReflectFee
                && liquidityFee <= staticVals.maxLiquidityFee
                && marketingFee <= staticVals.maxMarketingFee);
        require(liquidityFee + reflectFee + marketingFee <= 3450);
        _buyTaxes.liquidityFee = liquidityFee;
        _buyTaxes.reflectFee = reflectFee;
        _buyTaxes.marketingFee = marketingFee;
    }

    function setTaxesSell(uint16 reflectFee, uint16 liquidityFee, uint16 marketingFee) external onlyOwner {
        require(reflectFee <= staticVals.maxReflectFee
                && liquidityFee <= staticVals.maxLiquidityFee
                && marketingFee <= staticVals.maxMarketingFee);
        require(liquidityFee + reflectFee + marketingFee <= 3450);
        _sellTaxes.liquidityFee = liquidityFee;
        _sellTaxes.reflectFee = reflectFee;
        _sellTaxes.marketingFee = marketingFee;
    }

    function setTaxesTransfer(uint16 reflectFee, uint16 liquidityFee, uint16 marketingFee) external onlyOwner {
        require(reflectFee <= staticVals.maxReflectFee
                && liquidityFee <= staticVals.maxLiquidityFee
                && marketingFee <= staticVals.maxMarketingFee);
        require(liquidityFee + reflectFee + marketingFee <= 3450);
        _transferTaxes.liquidityFee = liquidityFee;
        _transferTaxes.reflectFee = reflectFee;
        _transferTaxes.marketingFee = marketingFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        require (liquidity + marketing == 100, "Must add up to 100%");
        _ratios.liquidityRatio = liquidity;
        _ratios.marketingRatio = marketing;
        _ratios.totalRatio = liquidity + marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable marketingWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.totalRatio == 0)
            return;

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * _ratios.liquidityRatio) / _ratios.totalRatio) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        //uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidityRatio) / _ratios.totalRatio) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (from == address(this)){
                _liquidityHolders[owner()] = true;
            } else {
                _liquidityHolders[from] = true;
            }
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp)) {} catch {}
        tradingEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _rTotal -= values.rFee;
            _tFeeTotal += values.tFee;

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, tAmount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflectFee = _sellTaxes.reflectFee;
                currentTaxes.liquidityFee = _sellTaxes.liquidityFee;
                currentTaxes.marketingFee = _sellTaxes.marketingFee;
            } else if (lpPairs[from]) {
                currentTaxes.reflectFee = _buyTaxes.reflectFee;
                currentTaxes.liquidityFee = _buyTaxes.liquidityFee;
                currentTaxes.marketingFee = _buyTaxes.marketingFee;
            } else {
                currentTaxes.reflectFee = _transferTaxes.reflectFee;
                currentTaxes.liquidityFee = _transferTaxes.liquidityFee;
                currentTaxes.marketingFee = _transferTaxes.marketingFee;
            }

            values.tFee = (tAmount * currentTaxes.reflectFee) / staticVals.masterTaxDivisor;
            values.tLiquidity = (tAmount * (currentTaxes.liquidityFee + currentTaxes.marketingFee)) / staticVals.masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() private view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return _rTotal / _tTotal;
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        _rOwned[address(this)] = _rOwned[address(this)] + (tLiquidity * _getRate());
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(owner()).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"tokensIntoLiqudity","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidityRatio","type":"uint16"},{"internalType":"uint16","name":"marketingRatio","type":"uint16"},{"internalType":"uint16","name":"totalRatio","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_antiSpecial","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflectFee","type":"uint16"},{"internalType":"uint16","name":"maxLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"maxMarketingFee","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060048190556009805460ff19166001179055608081905260a081905260c052600f805465ffffffffffff1990811690915561012c60e08190526101008190526101208190526010805465012c012c012c908416811791829055610140839052610160839052610180839052601180548516821790556101a08390526101c08390526101e0929092526012805490931690911790915561026060405262010000810461ffff90811661020081815264010000000090930490911661022081905261024091620000d09190620003c7565b61ffff90811690915281516013805460208086015160409687015186166401000000000261ffff60201b19918716620100000263ffffffff199094169590961694909417919091179290921692909217909155815160808101835261032080825291810182905291820152612710606090910152601480546727100320032003206001600160401b0319909116179055601b8054600161ff0160a01b03191673fe9ebe595617baf16101a6bd607248d538d7ec8b1790556022805461ffff60ff60b01b0119169055600080546001600160a01b03191633179055620001d4620001b63390565b737a250d5630b4cf539739df2c5dacb4c659f2488d600019620002c6565b620001f730737a250d5630b4cf539739df2c5dacb4c659f2488d600019620002c6565b600160066000620002106000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600b90620002986000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620003fc565b6001600160a01b038316620003185760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003665760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200030f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061ffff808316818516808303821115620003f357634e487b7160e01b600052601160045260246000fd5b01949350505050565b6150d2806200040c6000396000f3fe6080604052600436106103435760003560e01c806370a08231116101b0578063bcd96a25116100ec578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d14610a24578063f6540ec714610a39578063fb78680d14610a4f578063fdb78c0e14610a6f57600080fd5b8063dd62ed3e1461099e578063eafb5a3c146109e4578063eb50e70e14610a0457600080fd5b8063cab5ebea116100c6578063cab5ebea1461092d578063ce9a6a2a1461094d578063cf8477061461096d57600080fd5b8063bcd96a25146108ab578063c2fa418f146108cb578063c6831cd8146108fc57600080fd5b80638965b55d116101595780638da5cb5b116101335780638da5cb5b146107ee57806395d89b4114610856578063a457c2d71461086b578063a9059cbb1461088b57600080fd5b80638965b55d1461080c5780638a63bd9b1461082c5780638a8c523c1461084157600080fd5b806380c581d11161018a57806380c581d11461079557806388f82020146107b5578063893d20e8146107ee57600080fd5b806370a082311461070a578063715018a61461072a5780637b45d4311461073f57600080fd5b8063313ce5671161027f5780634fb2e45d1161022857806355d8ece61161020257806355d8ece614610694578063590ffdce146106b45780635c24b074146106d457806364038409146106f457600080fd5b80634fb2e45d1461061c5780634fbee1931461063c57806350a8e0161461067557600080fd5b80633f3cf56c116102595780633f3cf56c146105c2578063452ed4f1146105e25780634ada218b1461060257600080fd5b8063313ce5671461056057806333251a0b1461058257806339509351146105a257600080fd5b806318160ddd116102ec57806323b872dd116102c657806323b872dd146104e0578063260039571461050057806329dd8798146105205780632d8381191461054057600080fd5b806318160ddd146104365780631b6afa2d146104555780631e90afe3146104c057600080fd5b8063092316021161031d57806309231602146103c4578063095ea7b3146103e657806313e461921461041657600080fd5b806303fd2a451461034f57806306fdde03146103825780630758d924146103a457600080fd5b3661034a57005b600080fd5b34801561035b57600080fd5b5061036561dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038e57600080fd5b50610397610aa2565b604051610379919061487c565b3480156103b057600080fd5b50601954610365906001600160a01b031681565b3480156103d057600080fd5b506103e46103df3660046148d1565b610b34565b005b3480156103f257600080fd5b506104066104013660046148ff565b610c58565b6040519015158152602001610379565b34801561042257600080fd5b506103e4610431366004614939565b610c6f565b34801561044257600080fd5b506016545b604051908152602001610379565b34801561046157600080fd5b506014546104929061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610379565b3480156104cc57600080fd5b506103e46104db366004614989565b61102a565b3480156104ec57600080fd5b506104066104fb3660046149cc565b611160565b34801561050c57600080fd5b506103e461051b366004614a0d565b6111d8565b34801561052c57600080fd5b506103e461053b366004614a2f565b6112ef565b34801561054c57600080fd5b5061044761055b3660046148d1565b6113d8565b34801561056c57600080fd5b5060155460405160ff9091168152602001610379565b34801561058e57600080fd5b506103e461059d366004614a8b565b61146f565b3480156105ae57600080fd5b506104066105bd3660046148ff565b61150f565b3480156105ce57600080fd5b506103e46105dd366004614a0d565b61154b565b3480156105ee57600080fd5b50601a54610365906001600160a01b031681565b34801561060e57600080fd5b506022546104069060ff1681565b34801561062857600080fd5b506103e4610637366004614a8b565b611662565b34801561064857600080fd5b50610406610657366004614a8b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561068157600080fd5b5060225461040690610100900460ff1681565b3480156106a057600080fd5b506103e46106af366004614989565b6118be565b3480156106c057600080fd5b506103e46106cf366004614939565b6119f4565b3480156106e057600080fd5b506103e46106ef366004614a8b565b611a6d565b34801561070057600080fd5b50610447601d5481565b34801561071657600080fd5b50610447610725366004614a8b565b611b53565b34801561073657600080fd5b506103e4611bb2565b34801561074b57600080fd5b506010546107709061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610379565b3480156107a157600080fd5b506103e46107b0366004614939565b611c62565b3480156107c157600080fd5b506104066107d0366004614a8b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107fa57600080fd5b506000546001600160a01b0316610365565b34801561081857600080fd5b506103e4610827366004614989565b611e4f565b34801561083857600080fd5b50610406611f85565b34801561084d57600080fd5b506103e4611ff4565b34801561086257600080fd5b506103976121b3565b34801561087757600080fd5b506104066108863660046148ff565b6121c2565b34801561089757600080fd5b506104066108a63660046148ff565b6121f9565b3480156108b757600080fd5b506103e46108c6366004614aa8565b612210565b3480156108d757600080fd5b506012546107709061ffff808216916201000081048216916401000000009091041683565b34801561090857600080fd5b506011546107709061ffff808216916201000081048216916401000000009091041683565b34801561093957600080fd5b506103e4610948366004614adb565b61230b565b34801561095957600080fd5b506103e4610968366004614be7565b6123de565b34801561097957600080fd5b506013546107709061ffff808216916201000081048216916401000000009091041683565b3480156109aa57600080fd5b506104476109b9366004614ca9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109f057600080fd5b506103e46109ff366004614a8b565b612bfc565b348015610a1057600080fd5b506103e4610a1f366004614a8b565b613005565b348015610a3057600080fd5b506103e4613082565b348015610a4557600080fd5b50610447601f5481565b348015610a5b57600080fd5b506103e4610a6a366004614cd7565b613165565b348015610a7b57600080fd5b50601b54610406907501000000000000000000000000000000000000000000900460ff1681565b6060600d8054610ab190614d09565b80601f0160208091040260200160405190810160405280929190818152602001828054610add90614d09565b8015610b2a5780601f10610aff57610100808354040283529160200191610b2a565b820191906000526020600020905b815481529060010190602001808311610b0d57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610bd85760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b7e565b6022546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b5050505050565b6000610c653384846131f2565b5060015b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60018115151415610dff576001600160a01b03821660009081526007602052604090205460ff1615610d315760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b7e565b6001600160a01b03821660009081526001602052604090205415610d8b576001600160a01b038216600090815260016020526040902054610d71906113d8565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80611026576001600160a01b03821660009081526007602052604090205460ff16610e6c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b7e565b60085460011415610ee8576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff191690556008805480610eb557610eb5614d5d565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561102457826001600160a01b031660088281548110610f1257610f12614d8c565b6000918252602090912001546001600160a01b031614156110125760088054610f3d90600190614dea565b81548110610f4d57610f4d614d8c565b600091825260209091200154600880546001600160a01b039092169183908110610f7957610f79614d8c565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fde57610fde614d5d565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611024565b8061101c81614e01565b915050610eeb565b505b5050565b6000546001600160a01b031633146110785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60145461ffff908116908416118015906110a2575060145461ffff62010000909104811690831611155b80156110c0575060145461ffff640100000000909104811690821611155b6110c957600080fd5b610d7a816110d78585614e1c565b6110e19190614e1c565b61ffff1611156110f057600080fd5b6012805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146111c5576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906111bf908490614dea565b90915550505b6111d08484846132ff565b949350505050565b6000546001600160a01b031633146112265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b600081836016546112379190614e42565b6112419190614e90565b90506103e86016546112539190614e90565b8110156112c85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b7e565b601e819055600c5482906112dd908590614e42565b6112e79190614e90565b601f55505050565b6000546001600160a01b0316331461133d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6022546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b5050505050505050565b60006017548211156114525760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610b7e565b600061145c61375d565b90506114688184614e90565b9392505050565b6000546001600160a01b031633146114bd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6022546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c23565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c65918590611546908690614ea4565b6131f2565b6000546001600160a01b031633146115995760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b600081836016546115aa9190614e42565b6115b49190614e90565b90506103e86016546115c69190614e90565b81101561163b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b7e565b601c819055600c548290611650908590614e42565b61165a9190614e90565b601d55505050565b6000546001600160a01b031633146116b05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6001600160a01b03811661172c5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b7e565b6001600160a01b03811661dead14156117ad5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b7e565b600080546117c6916001600160a01b03909116906119f4565b6117d18160016119f4565b60225460ff16156117e7576117e7816001610c6f565b600054601b546001600160a01b039081169116141561182957601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6000805461183f906001600160a01b0316611b53565b111561186657600054611864906001600160a01b03168261185f82611b53565b6132ff565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461190c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60145461ffff90811690841611801590611936575060145461ffff62010000909104811690831611155b8015611954575060145461ffff640100000000909104811690821611155b61195d57600080fd5b610d7a8161196b8585614e1c565b6119759190614e1c565b61ffff16111561198457600080fd5b6010805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b6000546001600160a01b03163314611a425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611abb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b602254610100900460ff1615611b135760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610b7e565b602280546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff1615611b9057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c69906113d8565b6000546001600160a01b03163314611c005760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60008054611c19916001600160a01b03909116906119f4565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611cb05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b80611d58576001600160a01b03828116600081815260036020526040808220805460ff1916905560225490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015611d3c57600080fd5b505af1158015611d50573d6000803e3d6000fd5b505050505050565b60045415611dbf5762093a8060045442611d729190614dea565b11611dbf5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610b7e565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560225492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b158015611d3c57600080fd5b6000546001600160a01b03163314611e9d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60145461ffff90811690841611801590611ec7575060145461ffff62010000909104811690831611155b8015611ee5575060145461ffff640100000000909104811690821611155b611eee57600080fd5b610d7a81611efc8585614e1c565b611f069190614e1c565b61ffff161115611f1557600080fd5b6011805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b600080546001600160a01b03163314611fd45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b601954611fee9030906001600160a01b03166000196131f2565b50600190565b6000546001600160a01b031633146120425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60225460ff16156120955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b7e565b602254610100900460ff166120ec5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b7e565b6120f7306001610c6f565b601a5461210e906001600160a01b03166001610c6f565b602254601a546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b15801561219257600080fd5b505af19250505080156121a3575060015b506022805460ff19166001179055565b6060600e8054610ab190614d09565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c65918590611546908690614dea565b60006122063384846132ff565b5060019392505050565b6000546001600160a01b0316331461225e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6122688183614e1c565b61ffff166064146122bb5760405162461bcd60e51b815260206004820152601360248201527f4d7573742061646420757020746f2031303025000000000000000000000000006044820152606401610b7e565b6013805461ffff838116620100000263ffffffff19909216908516171790556122e48183614e1c565b6013805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b031633146123595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b601b80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906123d390831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461242c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b602254760100000000000000000000000000000000000000000000900460ff16156124995760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610b7e565b60328251106124ea5760405162461bcd60e51b815260206004820152600f60248201527f4d61782035302077616c6c6574732e00000000000000000000000000000000006044820152606401610b7e565b805182511461253b5760405162461bcd60e51b815260206004820152601660248201527f4d75737420626520657175616c206c656e677468732e000000000000000000006044820152606401610b7e565b60408051808201909152600c8082527f4d6979617a616b6920496e750000000000000000000000000000000000000000602090920191825261257f91600d916147e3565b506040805180820190915260088082527f4d4959415a414b4900000000000000000000000000000000000000000000000060209092019182526125c491600e916147e3565b5066038d7ea4c68000600c556015805460ff191660091790556015546125ee9060ff16600a614fa0565b600c546125fb9190614e42565b601681905561260c90600019614faf565b61261890600019614dea565b6017556019805473ffffffffffffffffffffffffffffffffffffffff1916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b1580156126a057600080fd5b505afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190614fc3565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561273457600080fd5b505afa158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190614fc3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190614fc3565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556016546002906103e890819061285f908490614e42565b6128699190614e90565b601c55600c54819061287c908490614e42565b6128869190614e90565b601d5550506016546037906127109081906128a2908490614e42565b6128ac9190614e90565b601e55600c5481906128bf908490614e42565b6128c99190614e90565b601f55601654612710906128de906005614e42565b6128e89190614e90565b6020556016546103e8906128fd906005614e42565b6129079190614e90565b6021556022546201000090046001600160a01b031661295057602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602280547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055601754600160006129aa6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556129d66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601654604051612a1d91815260200190565b60405180910390a3601954612a3f9030906001600160a01b03166000196131f2565b60005b8451811015612ad9576000858281518110612a5f57612a5f614d8c565b6020908102919091010151601554909150600090612a819060ff16600a614fa0565b868481518110612a9357612a93614d8c565b6020026020010151612aa59190614e42565b9050612ac3612abc6000546001600160a01b031690565b83836132ff565b5050508080612ad190614e01565b915050612a42565b50612b05612aef6000546001600160a01b031690565b3061185f6107256000546001600160a01b031690565b506019546001600160a01b031663f305d7194730612b2281611b53565b600080612b376000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612beb9190614fe0565b505050612bf6611ff4565b50505050565b6000546001600160a01b03163314612c4a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8a57600080fd5b505afa158015612c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc29190614fc3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d0a57600080fd5b505afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190614fc3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015612da057600080fd5b505afa158015612db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd89190614fc3565b90506001600160a01b038116612fa357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e599190614fc3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ea157600080fd5b505afa158015612eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed99190614fc3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015612f3957600080fd5b505af1158015612f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f719190614fc3565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612fcc565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556110249030906000196131f2565b6000546001600160a01b031633146130535760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146130d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b602254610100900460ff16156131285760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b7e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613162573d6000803e3d6000fd5b50565b6000546001600160a01b031633146131b35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b82846016546131c29190614e42565b6131cc9190614e90565b60205560165481906131df908490614e42565b6131e99190614e90565b60215550505050565b6001600160a01b0383166132485760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b7e565b6001600160a01b03821661329e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b7e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661337d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b7e565b6001600160a01b0383166133f95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b7e565b6000821161346f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b7e565b61347984846138ee565b156136625760225460ff166134d05760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b7e565b6001600160a01b03841660009081526003602052604090205460ff168061350f57506001600160a01b03831660009081526003602052604090205460ff165b1561358c57601c5482111561358c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b7e565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906135d257506001600160a01b03831660009081526003602052604090205460ff16155b1561366257601e54826135e485611b53565b6135ee9190614ea4565b11156136625760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b7e565b6001600160a01b03841660009081526006602052604090205460019060ff16806136a457506001600160a01b03841660009081526006602052604090205460ff165b156136ad575060005b6001600160a01b03841660009081526003602052604090205460ff161561374857601b5474010000000000000000000000000000000000000000900460ff161580156137145750601b547501000000000000000000000000000000000000000000900460ff165b1561374857600061372430611b53565b9050602054811061374657602154811061373d57506021545b613746816139ab565b505b61375485858584613dde565b95945050505050565b60175460165460009190825b6008548110156138b55782600160006008848154811061378b5761378b614d8c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137f657508160026000600884815481106137cf576137cf614d8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138135760165460175461380b9190614e90565b935050505090565b600160006008838154811061382a5761382a614d8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138599084614dea565b9250600260006008838154811061387257613872614d8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138a19083614dea565b9150806138ad81614e01565b915050613769565b506016546017546138c69190614e90565b8210156138e4576016546017546138dd9190614e90565b9250505090565b6138dd8183614e90565b600080546001600160a01b0384811691161480159061391b57506000546001600160a01b03838116911614155b801561394057506001600160a01b0382166000908152600b602052604090205460ff16155b801561396557506001600160a01b0383166000908152600b602052604090205460ff16155b801561397c57506001600160a01b03821661dead14155b801561399057506001600160a01b03821615155b801561146857506001600160a01b0383163014159392505050565b601b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560135461ffff64010000000090910416613a0357613db3565b3060009081526005602090815260408083206019546001600160a01b0316845290915290205460001914613a5c573060009081526005602090815260408083206019546001600160a01b03168452909152902060001990555b60135460009060029061ffff6401000000008204811691613a7e911685614e42565b613a889190614e90565b613a929190614e90565b90506000613aa08284614dea565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613ada57613ada614d8c565b6001600160a01b03928316602091820292909201810191909152601954604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613b4757600080fd5b505afa158015613b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7f9190614fc3565b81600181518110613b9257613b92614d8c565b6001600160a01b0392831660209182029290920101526019546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613bf190859060009086903090429060040161500e565b600060405180830381600087803b158015613c0b57600080fd5b505af1158015613c1f573d6000803e3d6000fd5b5050601354600092506002915061ffff6401000000008204811691613c45911647614e42565b613c4f9190614e90565b613c599190614e90565b90508315613d61576019546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015613ce357600080fd5b505af1158015613cf7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d1c9190614fe0565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000613d6d8587614dea565b1115613dae57601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613dac573d6000803e3d6000fd5b505b505050505b50601b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b602254600090610100900460ff16613e8a57613dfa8585614190565b602254610100900460ff16158015613e175750613e1785856138ee565b15613e8a5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b7e565b6000613e988686868661439a565b60808101516001600160a01b038816600090815260016020526040902054919250613ec291614dea565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613ef99190614ea4565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015613f4d57506001600160a01b03851660009081526007602052604090205460ff16155b15613f94576001600160a01b038616600090815260026020526040902054613f76908590614dea565b6001600160a01b0387166000908152600260205260409020556140d4565b6001600160a01b03861660009081526007602052604090205460ff16158015613fd557506001600160a01b03851660009081526007602052604090205460ff165b1561401d5780516001600160a01b038616600090815260026020526040902054613fff9190614ea4565b6001600160a01b0386166000908152600260205260409020556140d4565b6001600160a01b03861660009081526007602052604090205460ff16801561405d57506001600160a01b03851660009081526007602052604090205460ff165b156140d4576001600160a01b038616600090815260026020526040902054614086908590614dea565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546140ba9190614ea4565b6001600160a01b0386166000908152600260205260409020555b6040810151156140ec576140ec868260400151614723565b60008160a001511180614103575060008160200151115b15614124578060a001516017600082825461411e9190614dea565b90915550505b80602001516018600082825461413a9190614ea4565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b602254610100900460ff161561420e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b7e565b61421882826138ee565b1580156142325750601a546001600160a01b038281169116145b15611026576001600160a01b03821630141561428d576001600b60006142606000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556142b1565b6001600160a01b0382166000908152600b60205260409020805460ff191660011790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017908190556201000090046001600160a01b031661432257602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6143d36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61440c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061441661375d565b90506144228186614e42565b608083015261443187876138ee565b156144f3576022546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a5390606401602060405180830381600087803b1580156144ac57600080fd5b505af19250505080156144dc575060408051601f3d908101601f191682019092526144d99181019061507f565b60015b6144e557600080fd5b9050806144f157600080fd5b505b83156146cd576001600160a01b03861660009081526003602052604090205460ff161561456457601154600f805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055614615565b6001600160a01b03871660009081526003602052604090205460ff16156145cf57601054600f805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055614615565b601254600f805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff00000000191664010000000093849004919091169092029190911790555b601454600f5461ffff6601000000000000909204821691614637911687614e42565b6146419190614e90565b6020830152601454600f5461ffff66010000000000009092048216916146799164010000000081048216916201000090910416614e1c565b6146879061ffff1687614e42565b6146919190614e90565b6040830181905260208301516146a79190614ea4565b6146b19086614dea565b825260208201516146c3908290614e42565b60a08301526146e6565b6000602083018190526040830181905285835260a08301525b8082604001516146f69190614e42565b8260a001516147059190614ea4565b82608001516147149190614dea565b60608301525095945050505050565b61472b61375d565b6147359082614e42565b3060009081526001602052604090205461474f9190614ea4565b3060009081526001602090815260408083209390935560079052205460ff161561479f573060009081526002602052604090205461478e908290614ea4565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546147ef90614d09565b90600052602060002090601f0160209004810192826148115760008555614857565b82601f1061482a57805160ff1916838001178555614857565b82800160010185558215614857579182015b8281111561485757825182559160200191906001019061483c565b50614863929150614867565b5090565b5b808211156148635760008155600101614868565b600060208083528351808285015260005b818110156148a95785810183015185820160400152820161488d565b818111156148bb576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156148e357600080fd5b5035919050565b6001600160a01b038116811461316257600080fd5b6000806040838503121561491257600080fd5b823561491d816148ea565b946020939093013593505050565b801515811461316257600080fd5b6000806040838503121561494c57600080fd5b8235614957816148ea565b915060208301356149678161492b565b809150509250929050565b803561ffff8116811461498457600080fd5b919050565b60008060006060848603121561499e57600080fd5b6149a784614972565b92506149b560208501614972565b91506149c360408501614972565b90509250925092565b6000806000606084860312156149e157600080fd5b83356149ec816148ea565b925060208401356149fc816148ea565b929592945050506040919091013590565b60008060408385031215614a2057600080fd5b50508035926020909101359150565b60008060008060808587031215614a4557600080fd5b8435614a508161492b565b93506020850135614a608161492b565b92506040850135614a708161492b565b91506060850135614a808161492b565b939692955090935050565b600060208284031215614a9d57600080fd5b8135611468816148ea565b60008060408385031215614abb57600080fd5b614ac483614972565b9150614ad260208401614972565b90509250929050565b600060208284031215614aed57600080fd5b81356114688161492b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b5057614b50614af8565b604052919050565b600067ffffffffffffffff821115614b7257614b72614af8565b5060051b60200190565b600082601f830112614b8d57600080fd5b81356020614ba2614b9d83614b58565b614b27565b82815260059290921b84018101918181019086841115614bc157600080fd5b8286015b84811015614bdc5780358352918301918301614bc5565b509695505050505050565b60008060408385031215614bfa57600080fd5b823567ffffffffffffffff80821115614c1257600080fd5b818501915085601f830112614c2657600080fd5b81356020614c36614b9d83614b58565b82815260059290921b84018101918181019089841115614c5557600080fd5b948201945b83861015614c7c578535614c6d816148ea565b82529482019490820190614c5a565b96505086013592505080821115614c9257600080fd5b50614c9f85828601614b7c565b9150509250929050565b60008060408385031215614cbc57600080fd5b8235614cc7816148ea565b91506020830135614967816148ea565b60008060008060808587031215614ced57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680614d1d57607f821691505b60208210811415614d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614dfc57614dfc614dbb565b500390565b6000600019821415614e1557614e15614dbb565b5060010190565b600061ffff808316818516808303821115614e3957614e39614dbb565b01949350505050565b6000816000190483118215151615614e5c57614e5c614dbb565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e9f57614e9f614e61565b500490565b60008219821115614eb757614eb7614dbb565b500190565b600181815b80851115614ef7578160001904821115614edd57614edd614dbb565b80851615614eea57918102915b93841c9390800290614ec1565b509250929050565b600082614f0e57506001610c69565b81614f1b57506000610c69565b8160018114614f315760028114614f3b57614f57565b6001915050610c69565b60ff841115614f4c57614f4c614dbb565b50506001821b610c69565b5060208310610133831016604e8410600b8410161715614f7a575081810a610c69565b614f848383614ebc565b8060001904821115614f9857614f98614dbb565b029392505050565b600061146860ff841683614eff565b600082614fbe57614fbe614e61565b500690565b600060208284031215614fd557600080fd5b8151611468816148ea565b600080600060608486031215614ff557600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561505e5784516001600160a01b031683529383019391830191600101615039565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561509157600080fd5b81516114688161492b56fea264697066735822122027340d2154ec8a2f0c9f470ea078b245c12b49623809dcfc268f2f288748da1364736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103435760003560e01c806370a08231116101b0578063bcd96a25116100ec578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d14610a24578063f6540ec714610a39578063fb78680d14610a4f578063fdb78c0e14610a6f57600080fd5b8063dd62ed3e1461099e578063eafb5a3c146109e4578063eb50e70e14610a0457600080fd5b8063cab5ebea116100c6578063cab5ebea1461092d578063ce9a6a2a1461094d578063cf8477061461096d57600080fd5b8063bcd96a25146108ab578063c2fa418f146108cb578063c6831cd8146108fc57600080fd5b80638965b55d116101595780638da5cb5b116101335780638da5cb5b146107ee57806395d89b4114610856578063a457c2d71461086b578063a9059cbb1461088b57600080fd5b80638965b55d1461080c5780638a63bd9b1461082c5780638a8c523c1461084157600080fd5b806380c581d11161018a57806380c581d11461079557806388f82020146107b5578063893d20e8146107ee57600080fd5b806370a082311461070a578063715018a61461072a5780637b45d4311461073f57600080fd5b8063313ce5671161027f5780634fb2e45d1161022857806355d8ece61161020257806355d8ece614610694578063590ffdce146106b45780635c24b074146106d457806364038409146106f457600080fd5b80634fb2e45d1461061c5780634fbee1931461063c57806350a8e0161461067557600080fd5b80633f3cf56c116102595780633f3cf56c146105c2578063452ed4f1146105e25780634ada218b1461060257600080fd5b8063313ce5671461056057806333251a0b1461058257806339509351146105a257600080fd5b806318160ddd116102ec57806323b872dd116102c657806323b872dd146104e0578063260039571461050057806329dd8798146105205780632d8381191461054057600080fd5b806318160ddd146104365780631b6afa2d146104555780631e90afe3146104c057600080fd5b8063092316021161031d57806309231602146103c4578063095ea7b3146103e657806313e461921461041657600080fd5b806303fd2a451461034f57806306fdde03146103825780630758d924146103a457600080fd5b3661034a57005b600080fd5b34801561035b57600080fd5b5061036561dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038e57600080fd5b50610397610aa2565b604051610379919061487c565b3480156103b057600080fd5b50601954610365906001600160a01b031681565b3480156103d057600080fd5b506103e46103df3660046148d1565b610b34565b005b3480156103f257600080fd5b506104066104013660046148ff565b610c58565b6040519015158152602001610379565b34801561042257600080fd5b506103e4610431366004614939565b610c6f565b34801561044257600080fd5b506016545b604051908152602001610379565b34801561046157600080fd5b506014546104929061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610379565b3480156104cc57600080fd5b506103e46104db366004614989565b61102a565b3480156104ec57600080fd5b506104066104fb3660046149cc565b611160565b34801561050c57600080fd5b506103e461051b366004614a0d565b6111d8565b34801561052c57600080fd5b506103e461053b366004614a2f565b6112ef565b34801561054c57600080fd5b5061044761055b3660046148d1565b6113d8565b34801561056c57600080fd5b5060155460405160ff9091168152602001610379565b34801561058e57600080fd5b506103e461059d366004614a8b565b61146f565b3480156105ae57600080fd5b506104066105bd3660046148ff565b61150f565b3480156105ce57600080fd5b506103e46105dd366004614a0d565b61154b565b3480156105ee57600080fd5b50601a54610365906001600160a01b031681565b34801561060e57600080fd5b506022546104069060ff1681565b34801561062857600080fd5b506103e4610637366004614a8b565b611662565b34801561064857600080fd5b50610406610657366004614a8b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561068157600080fd5b5060225461040690610100900460ff1681565b3480156106a057600080fd5b506103e46106af366004614989565b6118be565b3480156106c057600080fd5b506103e46106cf366004614939565b6119f4565b3480156106e057600080fd5b506103e46106ef366004614a8b565b611a6d565b34801561070057600080fd5b50610447601d5481565b34801561071657600080fd5b50610447610725366004614a8b565b611b53565b34801561073657600080fd5b506103e4611bb2565b34801561074b57600080fd5b506010546107709061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610379565b3480156107a157600080fd5b506103e46107b0366004614939565b611c62565b3480156107c157600080fd5b506104066107d0366004614a8b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107fa57600080fd5b506000546001600160a01b0316610365565b34801561081857600080fd5b506103e4610827366004614989565b611e4f565b34801561083857600080fd5b50610406611f85565b34801561084d57600080fd5b506103e4611ff4565b34801561086257600080fd5b506103976121b3565b34801561087757600080fd5b506104066108863660046148ff565b6121c2565b34801561089757600080fd5b506104066108a63660046148ff565b6121f9565b3480156108b757600080fd5b506103e46108c6366004614aa8565b612210565b3480156108d757600080fd5b506012546107709061ffff808216916201000081048216916401000000009091041683565b34801561090857600080fd5b506011546107709061ffff808216916201000081048216916401000000009091041683565b34801561093957600080fd5b506103e4610948366004614adb565b61230b565b34801561095957600080fd5b506103e4610968366004614be7565b6123de565b34801561097957600080fd5b506013546107709061ffff808216916201000081048216916401000000009091041683565b3480156109aa57600080fd5b506104476109b9366004614ca9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109f057600080fd5b506103e46109ff366004614a8b565b612bfc565b348015610a1057600080fd5b506103e4610a1f366004614a8b565b613005565b348015610a3057600080fd5b506103e4613082565b348015610a4557600080fd5b50610447601f5481565b348015610a5b57600080fd5b506103e4610a6a366004614cd7565b613165565b348015610a7b57600080fd5b50601b54610406907501000000000000000000000000000000000000000000900460ff1681565b6060600d8054610ab190614d09565b80601f0160208091040260200160405190810160405280929190818152602001828054610add90614d09565b8015610b2a5780601f10610aff57610100808354040283529160200191610b2a565b820191906000526020600020905b815481529060010190602001808311610b0d57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610bd85760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b7e565b6022546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b5050505050565b6000610c653384846131f2565b5060015b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60018115151415610dff576001600160a01b03821660009081526007602052604090205460ff1615610d315760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b7e565b6001600160a01b03821660009081526001602052604090205415610d8b576001600160a01b038216600090815260016020526040902054610d71906113d8565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80611026576001600160a01b03821660009081526007602052604090205460ff16610e6c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b7e565b60085460011415610ee8576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff191690556008805480610eb557610eb5614d5d565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561102457826001600160a01b031660088281548110610f1257610f12614d8c565b6000918252602090912001546001600160a01b031614156110125760088054610f3d90600190614dea565b81548110610f4d57610f4d614d8c565b600091825260209091200154600880546001600160a01b039092169183908110610f7957610f79614d8c565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fde57610fde614d5d565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611024565b8061101c81614e01565b915050610eeb565b505b5050565b6000546001600160a01b031633146110785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60145461ffff908116908416118015906110a2575060145461ffff62010000909104811690831611155b80156110c0575060145461ffff640100000000909104811690821611155b6110c957600080fd5b610d7a816110d78585614e1c565b6110e19190614e1c565b61ffff1611156110f057600080fd5b6012805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146111c5576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906111bf908490614dea565b90915550505b6111d08484846132ff565b949350505050565b6000546001600160a01b031633146112265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b600081836016546112379190614e42565b6112419190614e90565b90506103e86016546112539190614e90565b8110156112c85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b7e565b601e819055600c5482906112dd908590614e42565b6112e79190614e90565b601f55505050565b6000546001600160a01b0316331461133d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6022546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b5050505050505050565b60006017548211156114525760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610b7e565b600061145c61375d565b90506114688184614e90565b9392505050565b6000546001600160a01b031633146114bd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6022546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c23565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c65918590611546908690614ea4565b6131f2565b6000546001600160a01b031633146115995760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b600081836016546115aa9190614e42565b6115b49190614e90565b90506103e86016546115c69190614e90565b81101561163b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b7e565b601c819055600c548290611650908590614e42565b61165a9190614e90565b601d55505050565b6000546001600160a01b031633146116b05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6001600160a01b03811661172c5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b7e565b6001600160a01b03811661dead14156117ad5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b7e565b600080546117c6916001600160a01b03909116906119f4565b6117d18160016119f4565b60225460ff16156117e7576117e7816001610c6f565b600054601b546001600160a01b039081169116141561182957601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6000805461183f906001600160a01b0316611b53565b111561186657600054611864906001600160a01b03168261185f82611b53565b6132ff565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461190c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60145461ffff90811690841611801590611936575060145461ffff62010000909104811690831611155b8015611954575060145461ffff640100000000909104811690821611155b61195d57600080fd5b610d7a8161196b8585614e1c565b6119759190614e1c565b61ffff16111561198457600080fd5b6010805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b6000546001600160a01b03163314611a425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611abb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b602254610100900460ff1615611b135760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610b7e565b602280546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff1615611b9057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c69906113d8565b6000546001600160a01b03163314611c005760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60008054611c19916001600160a01b03909116906119f4565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611cb05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b80611d58576001600160a01b03828116600081815260036020526040808220805460ff1916905560225490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015611d3c57600080fd5b505af1158015611d50573d6000803e3d6000fd5b505050505050565b60045415611dbf5762093a8060045442611d729190614dea565b11611dbf5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610b7e565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560225492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b158015611d3c57600080fd5b6000546001600160a01b03163314611e9d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60145461ffff90811690841611801590611ec7575060145461ffff62010000909104811690831611155b8015611ee5575060145461ffff640100000000909104811690821611155b611eee57600080fd5b610d7a81611efc8585614e1c565b611f069190614e1c565b61ffff161115611f1557600080fd5b6011805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b600080546001600160a01b03163314611fd45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b601954611fee9030906001600160a01b03166000196131f2565b50600190565b6000546001600160a01b031633146120425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60225460ff16156120955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b7e565b602254610100900460ff166120ec5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b7e565b6120f7306001610c6f565b601a5461210e906001600160a01b03166001610c6f565b602254601a546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b15801561219257600080fd5b505af19250505080156121a3575060015b506022805460ff19166001179055565b6060600e8054610ab190614d09565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c65918590611546908690614dea565b60006122063384846132ff565b5060019392505050565b6000546001600160a01b0316331461225e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b6122688183614e1c565b61ffff166064146122bb5760405162461bcd60e51b815260206004820152601360248201527f4d7573742061646420757020746f2031303025000000000000000000000000006044820152606401610b7e565b6013805461ffff838116620100000263ffffffff19909216908516171790556122e48183614e1c565b6013805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b031633146123595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b601b80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906123d390831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461242c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b602254760100000000000000000000000000000000000000000000900460ff16156124995760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610b7e565b60328251106124ea5760405162461bcd60e51b815260206004820152600f60248201527f4d61782035302077616c6c6574732e00000000000000000000000000000000006044820152606401610b7e565b805182511461253b5760405162461bcd60e51b815260206004820152601660248201527f4d75737420626520657175616c206c656e677468732e000000000000000000006044820152606401610b7e565b60408051808201909152600c8082527f4d6979617a616b6920496e750000000000000000000000000000000000000000602090920191825261257f91600d916147e3565b506040805180820190915260088082527f4d4959415a414b4900000000000000000000000000000000000000000000000060209092019182526125c491600e916147e3565b5066038d7ea4c68000600c556015805460ff191660091790556015546125ee9060ff16600a614fa0565b600c546125fb9190614e42565b601681905561260c90600019614faf565b61261890600019614dea565b6017556019805473ffffffffffffffffffffffffffffffffffffffff1916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b1580156126a057600080fd5b505afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190614fc3565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561273457600080fd5b505afa158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190614fc3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190614fc3565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556016546002906103e890819061285f908490614e42565b6128699190614e90565b601c55600c54819061287c908490614e42565b6128869190614e90565b601d5550506016546037906127109081906128a2908490614e42565b6128ac9190614e90565b601e55600c5481906128bf908490614e42565b6128c99190614e90565b601f55601654612710906128de906005614e42565b6128e89190614e90565b6020556016546103e8906128fd906005614e42565b6129079190614e90565b6021556022546201000090046001600160a01b031661295057602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602280547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055601754600160006129aa6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556129d66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601654604051612a1d91815260200190565b60405180910390a3601954612a3f9030906001600160a01b03166000196131f2565b60005b8451811015612ad9576000858281518110612a5f57612a5f614d8c565b6020908102919091010151601554909150600090612a819060ff16600a614fa0565b868481518110612a9357612a93614d8c565b6020026020010151612aa59190614e42565b9050612ac3612abc6000546001600160a01b031690565b83836132ff565b5050508080612ad190614e01565b915050612a42565b50612b05612aef6000546001600160a01b031690565b3061185f6107256000546001600160a01b031690565b506019546001600160a01b031663f305d7194730612b2281611b53565b600080612b376000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612beb9190614fe0565b505050612bf6611ff4565b50505050565b6000546001600160a01b03163314612c4a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8a57600080fd5b505afa158015612c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc29190614fc3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d0a57600080fd5b505afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190614fc3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015612da057600080fd5b505afa158015612db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd89190614fc3565b90506001600160a01b038116612fa357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e599190614fc3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ea157600080fd5b505afa158015612eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed99190614fc3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015612f3957600080fd5b505af1158015612f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f719190614fc3565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612fcc565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556110249030906000196131f2565b6000546001600160a01b031633146130535760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146130d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b602254610100900460ff16156131285760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b7e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613162573d6000803e3d6000fd5b50565b6000546001600160a01b031633146131b35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b7e565b82846016546131c29190614e42565b6131cc9190614e90565b60205560165481906131df908490614e42565b6131e99190614e90565b60215550505050565b6001600160a01b0383166132485760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b7e565b6001600160a01b03821661329e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b7e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661337d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b7e565b6001600160a01b0383166133f95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b7e565b6000821161346f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b7e565b61347984846138ee565b156136625760225460ff166134d05760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b7e565b6001600160a01b03841660009081526003602052604090205460ff168061350f57506001600160a01b03831660009081526003602052604090205460ff165b1561358c57601c5482111561358c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b7e565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906135d257506001600160a01b03831660009081526003602052604090205460ff16155b1561366257601e54826135e485611b53565b6135ee9190614ea4565b11156136625760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b7e565b6001600160a01b03841660009081526006602052604090205460019060ff16806136a457506001600160a01b03841660009081526006602052604090205460ff165b156136ad575060005b6001600160a01b03841660009081526003602052604090205460ff161561374857601b5474010000000000000000000000000000000000000000900460ff161580156137145750601b547501000000000000000000000000000000000000000000900460ff165b1561374857600061372430611b53565b9050602054811061374657602154811061373d57506021545b613746816139ab565b505b61375485858584613dde565b95945050505050565b60175460165460009190825b6008548110156138b55782600160006008848154811061378b5761378b614d8c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137f657508160026000600884815481106137cf576137cf614d8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138135760165460175461380b9190614e90565b935050505090565b600160006008838154811061382a5761382a614d8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138599084614dea565b9250600260006008838154811061387257613872614d8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138a19083614dea565b9150806138ad81614e01565b915050613769565b506016546017546138c69190614e90565b8210156138e4576016546017546138dd9190614e90565b9250505090565b6138dd8183614e90565b600080546001600160a01b0384811691161480159061391b57506000546001600160a01b03838116911614155b801561394057506001600160a01b0382166000908152600b602052604090205460ff16155b801561396557506001600160a01b0383166000908152600b602052604090205460ff16155b801561397c57506001600160a01b03821661dead14155b801561399057506001600160a01b03821615155b801561146857506001600160a01b0383163014159392505050565b601b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560135461ffff64010000000090910416613a0357613db3565b3060009081526005602090815260408083206019546001600160a01b0316845290915290205460001914613a5c573060009081526005602090815260408083206019546001600160a01b03168452909152902060001990555b60135460009060029061ffff6401000000008204811691613a7e911685614e42565b613a889190614e90565b613a929190614e90565b90506000613aa08284614dea565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613ada57613ada614d8c565b6001600160a01b03928316602091820292909201810191909152601954604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613b4757600080fd5b505afa158015613b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7f9190614fc3565b81600181518110613b9257613b92614d8c565b6001600160a01b0392831660209182029290920101526019546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613bf190859060009086903090429060040161500e565b600060405180830381600087803b158015613c0b57600080fd5b505af1158015613c1f573d6000803e3d6000fd5b5050601354600092506002915061ffff6401000000008204811691613c45911647614e42565b613c4f9190614e90565b613c599190614e90565b90508315613d61576019546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015613ce357600080fd5b505af1158015613cf7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d1c9190614fe0565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000613d6d8587614dea565b1115613dae57601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613dac573d6000803e3d6000fd5b505b505050505b50601b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b602254600090610100900460ff16613e8a57613dfa8585614190565b602254610100900460ff16158015613e175750613e1785856138ee565b15613e8a5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b7e565b6000613e988686868661439a565b60808101516001600160a01b038816600090815260016020526040902054919250613ec291614dea565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613ef99190614ea4565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015613f4d57506001600160a01b03851660009081526007602052604090205460ff16155b15613f94576001600160a01b038616600090815260026020526040902054613f76908590614dea565b6001600160a01b0387166000908152600260205260409020556140d4565b6001600160a01b03861660009081526007602052604090205460ff16158015613fd557506001600160a01b03851660009081526007602052604090205460ff165b1561401d5780516001600160a01b038616600090815260026020526040902054613fff9190614ea4565b6001600160a01b0386166000908152600260205260409020556140d4565b6001600160a01b03861660009081526007602052604090205460ff16801561405d57506001600160a01b03851660009081526007602052604090205460ff165b156140d4576001600160a01b038616600090815260026020526040902054614086908590614dea565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546140ba9190614ea4565b6001600160a01b0386166000908152600260205260409020555b6040810151156140ec576140ec868260400151614723565b60008160a001511180614103575060008160200151115b15614124578060a001516017600082825461411e9190614dea565b90915550505b80602001516018600082825461413a9190614ea4565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b602254610100900460ff161561420e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b7e565b61421882826138ee565b1580156142325750601a546001600160a01b038281169116145b15611026576001600160a01b03821630141561428d576001600b60006142606000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556142b1565b6001600160a01b0382166000908152600b60205260409020805460ff191660011790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017908190556201000090046001600160a01b031661432257602280547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6143d36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61440c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061441661375d565b90506144228186614e42565b608083015261443187876138ee565b156144f3576022546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a5390606401602060405180830381600087803b1580156144ac57600080fd5b505af19250505080156144dc575060408051601f3d908101601f191682019092526144d99181019061507f565b60015b6144e557600080fd5b9050806144f157600080fd5b505b83156146cd576001600160a01b03861660009081526003602052604090205460ff161561456457601154600f805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055614615565b6001600160a01b03871660009081526003602052604090205460ff16156145cf57601054600f805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055614615565b601254600f805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff00000000191664010000000093849004919091169092029190911790555b601454600f5461ffff6601000000000000909204821691614637911687614e42565b6146419190614e90565b6020830152601454600f5461ffff66010000000000009092048216916146799164010000000081048216916201000090910416614e1c565b6146879061ffff1687614e42565b6146919190614e90565b6040830181905260208301516146a79190614ea4565b6146b19086614dea565b825260208201516146c3908290614e42565b60a08301526146e6565b6000602083018190526040830181905285835260a08301525b8082604001516146f69190614e42565b8260a001516147059190614ea4565b82608001516147149190614dea565b60608301525095945050505050565b61472b61375d565b6147359082614e42565b3060009081526001602052604090205461474f9190614ea4565b3060009081526001602090815260408083209390935560079052205460ff161561479f573060009081526002602052604090205461478e908290614ea4565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546147ef90614d09565b90600052602060002090601f0160209004810192826148115760008555614857565b82601f1061482a57805160ff1916838001178555614857565b82800160010185558215614857579182015b8281111561485757825182559160200191906001019061483c565b50614863929150614867565b5090565b5b808211156148635760008155600101614868565b600060208083528351808285015260005b818110156148a95785810183015185820160400152820161488d565b818111156148bb576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156148e357600080fd5b5035919050565b6001600160a01b038116811461316257600080fd5b6000806040838503121561491257600080fd5b823561491d816148ea565b946020939093013593505050565b801515811461316257600080fd5b6000806040838503121561494c57600080fd5b8235614957816148ea565b915060208301356149678161492b565b809150509250929050565b803561ffff8116811461498457600080fd5b919050565b60008060006060848603121561499e57600080fd5b6149a784614972565b92506149b560208501614972565b91506149c360408501614972565b90509250925092565b6000806000606084860312156149e157600080fd5b83356149ec816148ea565b925060208401356149fc816148ea565b929592945050506040919091013590565b60008060408385031215614a2057600080fd5b50508035926020909101359150565b60008060008060808587031215614a4557600080fd5b8435614a508161492b565b93506020850135614a608161492b565b92506040850135614a708161492b565b91506060850135614a808161492b565b939692955090935050565b600060208284031215614a9d57600080fd5b8135611468816148ea565b60008060408385031215614abb57600080fd5b614ac483614972565b9150614ad260208401614972565b90509250929050565b600060208284031215614aed57600080fd5b81356114688161492b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b5057614b50614af8565b604052919050565b600067ffffffffffffffff821115614b7257614b72614af8565b5060051b60200190565b600082601f830112614b8d57600080fd5b81356020614ba2614b9d83614b58565b614b27565b82815260059290921b84018101918181019086841115614bc157600080fd5b8286015b84811015614bdc5780358352918301918301614bc5565b509695505050505050565b60008060408385031215614bfa57600080fd5b823567ffffffffffffffff80821115614c1257600080fd5b818501915085601f830112614c2657600080fd5b81356020614c36614b9d83614b58565b82815260059290921b84018101918181019089841115614c5557600080fd5b948201945b83861015614c7c578535614c6d816148ea565b82529482019490820190614c5a565b96505086013592505080821115614c9257600080fd5b50614c9f85828601614b7c565b9150509250929050565b60008060408385031215614cbc57600080fd5b8235614cc7816148ea565b91506020830135614967816148ea565b60008060008060808587031215614ced57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680614d1d57607f821691505b60208210811415614d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614dfc57614dfc614dbb565b500390565b6000600019821415614e1557614e15614dbb565b5060010190565b600061ffff808316818516808303821115614e3957614e39614dbb565b01949350505050565b6000816000190483118215151615614e5c57614e5c614dbb565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e9f57614e9f614e61565b500490565b60008219821115614eb757614eb7614dbb565b500190565b600181815b80851115614ef7578160001904821115614edd57614edd614dbb565b80851615614eea57918102915b93841c9390800290614ec1565b509250929050565b600082614f0e57506001610c69565b81614f1b57506000610c69565b8160018114614f315760028114614f3b57614f57565b6001915050610c69565b60ff841115614f4c57614f4c614dbb565b50506001821b610c69565b5060208310610133831016604e8410600b8410161715614f7a575081810a610c69565b614f848383614ebc565b8060001904821115614f9857614f98614dbb565b029392505050565b600061146860ff841683614eff565b600082614fbe57614fbe614e61565b500690565b600060208284031215614fd557600080fd5b8151611468816148ea565b600080600060608486031215614ff557600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561505e5784516001600160a01b031683529383019391830191600101615039565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561509157600080fd5b81516114688161492b56fea264697066735822122027340d2154ec8a2f0c9f470ea078b245c12b49623809dcfc268f2f288748da1364736f6c63430008090033

Deployed Bytecode Sourcemap

6299:26692:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8903:73;;;;;;;;;;;;8934:42;8903:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8903:73:0;;;;;;;;15054:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8719:35::-;;;;;;;;;;-1:-1:-1;8719:35:0;;;;-1:-1:-1;;;;;8719:35:0;;;20351:149;;;;;;;;;;-1:-1:-1;20351:149:0;;;;;:::i;:::-;;:::i;:::-;;15730:161;;;;;;;;;;-1:-1:-1;15730:161:0;;;;;:::i;:::-;;:::i;:::-;;;1992:14:1;;1985:22;1967:41;;1955:2;1940:18;15730:161:0;1827:187:1;18677:1139:0;;;;;;;;;;-1:-1:-1;18677:1139:0;;;;;:::i;:::-;;:::i;14807:83::-;;;;;;;;;;-1:-1:-1;14880:7:0;;14807:83;;;2675:25:1;;;2663:2;2648:18;14807:83:0;2529:177:1;8341:195:0;;;;;;;;;;-1:-1:-1;8341:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2944:6:1;2977:15;;;2959:34;;3029:15;;;3024:2;3009:18;;3002:43;3081:15;;;3061:18;;;3054:43;;;;3133:15;;;3128:2;3113:18;;3106:43;2921:3;2906:19;8341:195:0;2711:444:1;21534:521:0;;;;;;;;;;-1:-1:-1;21534:521:0;;;;;:::i;:::-;;:::i;16397:306::-;;;;;;;;;;-1:-1:-1;16397:306:0;;;;;:::i;:::-;;:::i;22716:340::-;;;;;;;;;;-1:-1:-1;22716:340:0;;;;;:::i;:::-;;:::i;20132:211::-;;;;;;;;;;-1:-1:-1;20132:211:0;;;;;:::i;:::-;;:::i;24007:250::-;;;;;;;;;;-1:-1:-1;24007:250:0;;;;;:::i;:::-;;:::i;14896:71::-;;;;;;;;;;-1:-1:-1;14955:9:0;;14896:71;;14955:9;;;;5165:36:1;;5153:2;5138:18;14896:71:0;5023:184:1;20014:110:0;;;;;;;;;;-1:-1:-1;20014:110:0;;;;;:::i;:::-;;:::i;16711:215::-;;;;;;;;;;-1:-1:-1;16711:215:0;;;;;:::i;:::-;;:::i;22368:340::-;;;;;;;;;;-1:-1:-1;22368:340:0;;;;;:::i;:::-;;:::i;8761:21::-;;;;;;;;;;-1:-1:-1;8761:21:0;;;;-1:-1:-1;;;;;8761:21:0;;;9379:34;;;;;;;;;;-1:-1:-1;9379:34:0;;;;;;;;13457:794;;;;;;;;;;-1:-1:-1;13457:794:0;;;;;:::i;:::-;;:::i;18274:125::-;;;;;;;;;;-1:-1:-1;18274:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18363:28:0;18339:4;18363:28;;;:19;:28;;;;;;;;;18274:125;9420:36;;;;;;;;;;-1:-1:-1;9420:36:0;;;;;;;;;;;20512:501;;;;;;;;;;-1:-1:-1;20512:501:0;;;;;:::i;:::-;;:::i;18407:134::-;;;;;;;;;;-1:-1:-1;18407:134:0;;;;;:::i;:::-;;:::i;19824:182::-;;;;;;;;;;-1:-1:-1;19824:182:0;;;;;:::i;:::-;;:::i;9195:28::-;;;;;;;;;;;;;;;;15349:198;;;;;;;;;;-1:-1:-1;15349:198:0;;;;;:::i;:::-;;:::i;14259:195::-;;;;;;;;;;;;;:::i;7683:135::-;;;;;;;;;;-1:-1:-1;7683:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;5670:6:1;5703:15;;;5685:34;;5755:15;;;5750:2;5735:18;;5728:43;5807:15;;5787:18;;;5780:43;;;;5648:2;5633:18;7683:135:0;5464:365:1;17749:517:0;;;;;;;;;;-1:-1:-1;17749:517:0;;;;;:::i;:::-;;:::i;18549:120::-;;;;;;;;;;-1:-1:-1;18549:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18641:20:0;18617:4;18641:20;;;:11;:20;;;;;;;;;18549:120;15131:71;;;;;;;;;;-1:-1:-1;15174:7:0;13435:6;-1:-1:-1;;;;;13435:6:0;15131:71;;21021:505;;;;;;;;;;-1:-1:-1;21021:505:0;;;;;:::i;:::-;;:::i;16216:173::-;;;;;;;;;;;;;:::i;27966:408::-;;;;;;;;;;;;;:::i;14973:75::-;;;;;;;;;;;;;:::i;16934:225::-;;;;;;;;;;-1:-1:-1;16934:225:0;;;;;:::i;:::-;;:::i;15555:167::-;;;;;;;;;;-1:-1:-1;15555:167:0;;;;;:::i;:::-;;:::i;22063:297::-;;;;;;;;;;-1:-1:-1;22063:297:0;;;;;:::i;:::-;;:::i;7972:140::-;;;;;;;;;;-1:-1:-1;7972:140:0;;;;;;;;;;;;;;;;;;;;;;7827:136;;;;;;;;;;-1:-1:-1;7827:136:0;;;;;;;;;;;;;;;;;;;;;;23503:165;;;;;;;;;;-1:-1:-1;23503:165:0;;;;;:::i;:::-;;:::i;10568:2212::-;;;;;;;;;;-1:-1:-1;10568:2212:0;;;;;:::i;:::-;;:::i;8121:211::-;;;;;;;;;;-1:-1:-1;8121:211:0;;;;;;;;;;;;;;;;;;;;;;15208:133;;;;;;;;;;-1:-1:-1;15208:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15310:19:0;;;15292:7;15310:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15208:133;17167:574;;;;;;;;;;-1:-1:-1;17167:574:0;;;;;:::i;:::-;;:::i;23361:134::-;;;;;;;;;;-1:-1:-1;23361:134:0;;;;;:::i;:::-;;:::i;32805:183::-;;;;;;;;;;;;;:::i;9269:30::-;;;;;;;;;;;;;;;;23064:289;;;;;;;;;;-1:-1:-1;23064:289:0;;;;;:::i;:::-;;:::i;9108:39::-;;;;;;;;;;-1:-1:-1;9108:39:0;;;;;;;;;;;15054:71;15093:13;15117:5;15110:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15054:71;:::o;20351:149::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;;;;;;;;;20435:2:::1;20428:3;:9;;20420:30;;;::::0;-1:-1:-1;;;20420:30:0;;10977:2:1;20420:30:0::1;::::0;::::1;10959:21:1::0;11016:1;10996:18;;;10989:29;11054:10;11034:18;;;11027:38;11082:18;;20420:30:0::1;10775:331:1::0;20420:30:0::1;20461:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;2675:25:1::0;;;20461:9:0;;;::::1;-1:-1:-1::0;;;;;20461:9:0::1;::::0;:26:::1;::::0;2648:18:1;;20461:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20351:149:::0;:::o;15730:161::-;15805:4;15822:39;189:10;15845:7;15854:6;15822:8;:39::i;:::-;-1:-1:-1;15879:4:0;15730:161;;;;;:::o;18677:1139::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;18782:4:::1;18771:15:::0;::::1;;;18767:1042;;;-1:-1:-1::0;;;;;18812:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18811:21;18803:62;;;::::0;-1:-1:-1;;;18803:62:0;;11313:2:1;18803:62:0::1;::::0;::::1;11295:21:1::0;11352:2;11332:18;;;11325:30;11391;11371:18;;;11364:58;11439:18;;18803:62:0::1;11111:352:1::0;18803:62:0::1;-1:-1:-1::0;;;;;18883:16:0;::::1;18902:1;18883:16:::0;;;:7:::1;:16;::::0;;;;;:20;18880:116:::1;;-1:-1:-1::0;;;;;18963:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18943:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18924:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18880:116:::1;-1:-1:-1::0;;;;;;19010:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19010:27:0::1;19033:4;19010:27:::0;;::::1;::::0;;;19052:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;19052:23:0::1;::::0;;::::1;::::0;;18677:1139::o;18767:1042::-:1;19097:16:::0;19093:716:::1;;-1:-1:-1::0;;;;;19138:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19130:61;;;::::0;-1:-1:-1;;;19130:61:0;;11670:2:1;19130:61:0::1;::::0;::::1;11652:21:1::0;11709:2;11689:18;;;11682:30;11748;11728:18;;;11721:58;11796:18;;19130:61:0::1;11468:352:1::0;19130:61:0::1;19209:9;:16:::0;19229:1:::1;19209:21;19206:592;;;-1:-1:-1::0;;;;;19250:16:0;::::1;19269:1;19250:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;19289:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;19289:28:0::1;::::0;;19336:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19336:15:0;;;;;-1:-1:-1;;19336:15:0::1;::::0;;;;;18677:1139;;:::o;19206:592::-:1;19397:9;19392:391;19416:9;:16:::0;19412:20;::::1;19392:391;;;19482:7;-1:-1:-1::0;;;;;19466:23:0::1;:9;19476:1;19466:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19466:12:0::1;:23;19462:302;;;19533:9;19543:16:::0;;:20:::1;::::0;19562:1:::1;::::0;19543:20:::1;:::i;:::-;19533:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19518:9:::1;:12:::0;;-1:-1:-1;;;;;19533:31:0;;::::1;::::0;19528:1;;19518:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;19518:46:0::1;-1:-1:-1::0;;;;;19518:46:0;;::::1;;::::0;;19591:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19638:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19638:28:0::1;::::0;;19693:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19693:15:0;;;;;-1:-1:-1;;19693:15:0::1;::::0;;;;;19735:5:::1;;19462:302;19434:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19392:391;;;;19206:592;18677:1139:::0;;:::o;21534:521::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;21673:10:::1;:24:::0;::::1;::::0;;::::1;21659:38:::0;;::::1;;::::0;::::1;::::0;:101:::1;;-1:-1:-1::0;21734:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;21718:42:::0;;::::1;;;21659:101;:164;;;;-1:-1:-1::0;21797:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;21781:42:::0;;::::1;;;21659:164;21651:173;;;::::0;::::1;;21887:4;21871:12:::0;21843:25:::1;21858:10:::0;21843:12;:25:::1;:::i;:::-;:40;;;;:::i;:::-;:48;;;;21835:57;;;::::0;::::1;;21903:14;:42:::0;;::::1;22005::::0;;::::1;::::0;::::1;::::0;21903;;::::1;::::0;::::1;22005::::0;;;;;;;;;21956:38;;;::::1;22005:42:::0;;;;::::1;::::0;;21534:521::o;16397:306::-;-1:-1:-1;;;;;16518:19:0;;16497:4;16518:19;;;:11;:19;;;;;;;;16538:10;16518:31;;;;;;;;-1:-1:-1;;16518:52:0;16514:126;;-1:-1:-1;;;;;16587:19:0;;;;;;:11;:19;;;;;;;;16607:10;16587:31;;;;;;;:41;;16622:6;;16587:19;:41;;16622:6;;16587:41;:::i;:::-;;;;-1:-1:-1;;16514:126:0;16659:36;16669:6;16677:9;16688:6;16659:9;:36::i;:::-;16652:43;16397:306;-1:-1:-1;;;;16397:306:0:o;22716:340::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;22806:13:::1;22844:7;22833;22823;;:17;;;;:::i;:::-;22822:29;;;;:::i;:::-;22806:45;;22890:4;22880:7;;:14;;;;:::i;:::-;22870:5;:25;;22862:88;;;::::0;-1:-1:-1;;;22862:88:0;;13700:2:1;22862:88:0::1;::::0;::::1;13682:21:1::0;13739:2;13719:18;;;13712:30;13778:34;13758:18;;;13751:62;13849:20;13829:18;;;13822:48;13887:19;;22862:88:0::1;13498:414:1::0;22862:88:0::1;22961:14;:22:::0;;;23013:14:::1;::::0;23041:7;;23013:24:::1;::::0;23030:7;;23013:24:::1;:::i;:::-;23012:36;;;;:::i;:::-;22994:15;:54:::0;-1:-1:-1;;;22716:340:0:o;20132:211::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;20263:9:::1;::::0;:72:::1;::::0;;;;14149:14:1;;14142:22;20263:72:0::1;::::0;::::1;14124:41:1::0;14208:14;;14201:22;14181:18;;;14174:50;14267:14;;14260:22;14240:18;;;14233:50;14326:14;;14319:22;14299:18;;;14292:50;20263:9:0;;;::::1;-1:-1:-1::0;;;;;20263:9:0::1;::::0;:24:::1;::::0;14096:19:1;;20263:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20132:211:::0;;;;:::o;24007:250::-;24073:7;24112;;24101;:18;;24093:73;;;;-1:-1:-1;;;24093:73:0;;14555:2:1;24093:73:0;;;14537:21:1;14594:2;14574:18;;;14567:30;14633:34;14613:18;;;14606:62;14704:12;14684:18;;;14677:40;14734:19;;24093:73:0;14353:406:1;24093:73:0;24177:19;24200:10;:8;:10::i;:::-;24177:33;-1:-1:-1;24228:21:0;24177:33;24228:7;:21;:::i;:::-;24221:28;24007:250;-1:-1:-1;;;24007:250:0:o;20014:110::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;20085:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;20085:31:0::1;::::0;::::1;160:74:1::0;20085:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;20085:31:0::1;14:226:1::0;16711:215:0;189:10;16799:4;16848:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16848:34:0;;;;;;;;;;16799:4;;16816:80;;16839:7;;16848:47;;16885:10;;16848:47;:::i;:::-;16816:8;:80::i;22368:340::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;22457:13:::1;22495:7;22484;22474;;:17;;;;:::i;:::-;22473:29;;;;:::i;:::-;22457:45;;22541:4;22531:7;;:14;;;;:::i;:::-;22521:5;:25;;22513:93;;;::::0;-1:-1:-1;;;22513:93:0;;15099:2:1;22513:93:0::1;::::0;::::1;15081:21:1::0;15138:2;15118:18;;;15111:30;15177:34;15157:18;;;15150:62;15248:25;15228:18;;;15221:53;15291:19;;22513:93:0::1;14897:419:1::0;22513:93:0::1;22617:12;:20:::0;;;22665:14:::1;::::0;22693:7;;22665:24:::1;::::0;22682:7;;22665:24:::1;:::i;:::-;22664:36;;;;:::i;:::-;22648:13;:52:::0;-1:-1:-1;;;22368:340:0:o;13457:794::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;-1:-1:-1;;;;;13538:22:0;::::1;13530:96;;;::::0;-1:-1:-1;;;13530:96:0;;15523:2:1;13530:96:0::1;::::0;::::1;15505:21:1::0;15562:2;15542:18;;;15535:30;15601:34;15581:18;;;15574:62;15672:31;15652:18;;;15645:59;15721:19;;13530:96:0::1;15321:425:1::0;13530:96:0::1;-1:-1:-1::0;;;;;13645:16:0;::::1;8934:42;13645:16;;13637:90;;;::::0;-1:-1:-1;;;13637:90:0;;15523:2:1;13637:90:0::1;::::0;::::1;15505:21:1::0;15562:2;15542:18;;;15535:30;15601:34;15581:18;;;15574:62;15672:31;15652:18;;;15645:59;15721:19;;13637:90:0::1;15321:425:1::0;13637:90:0::1;13758:6;::::0;;13738:34:::1;::::0;-1:-1:-1;;;;;13758:6:0;;::::1;::::0;13738:19:::1;:34::i;:::-;13783:35;13803:8;13813:4;13783:19;:35::i;:::-;13833:14;::::0;::::1;;13829:83;;;13863:37;13885:8;13895:4;13863:21;:37::i;:::-;13964:6;::::0;13936:16:::1;::::0;-1:-1:-1;;;;;13936:16:0;;::::1;13964:6:::0;::::1;13936:35;13932:90;;;13986:16;:36:::0;;-1:-1:-1;;13986:36:0::1;-1:-1:-1::0;;;;;13986:36:0;::::1;;::::0;;13932:90:::1;14066:1;14056:6:::0;;14046:17:::1;::::0;-1:-1:-1;;;;;14056:6:0::1;14046:9;:17::i;:::-;:21;14043:99;;;14094:6;::::0;14084:46:::1;::::0;-1:-1:-1;;;;;14094:6:0::1;14102:8:::0;14112:17:::1;14094:6:::0;14112:9:::1;:17::i;:::-;14084:9;:46::i;:::-;;14043:99;14162:6;:17:::0;;-1:-1:-1;;14162:17:0::1;-1:-1:-1::0;;;;;14162:17:0;::::1;::::0;;::::1;::::0;;14195:38:::1;::::0;14162:17;;;;14195:38:::1;::::0;14162:6;14195:38:::1;13457:794:::0;:::o;20512:501::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;20646:10:::1;:24:::0;::::1;::::0;;::::1;20632:38:::0;;::::1;;::::0;::::1;::::0;:101:::1;;-1:-1:-1::0;20707:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;20691:42:::0;;::::1;;;20632:101;:164;;;;-1:-1:-1::0;20770:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;20754:42:::0;;::::1;;;20632:164;20624:173;;;::::0;::::1;;20860:4;20844:12:::0;20816:25:::1;20831:10:::0;20816:12;:25:::1;:::i;:::-;:40;;;;:::i;:::-;:48;;;;20808:57;;;::::0;::::1;;20876:9;:37:::0;;::::1;20968::::0;;::::1;::::0;::::1;::::0;20876;;::::1;::::0;::::1;20968::::0;;;;;;;;;20924:33;;;::::1;20968:37:::0;;;;::::1;::::0;;20512:501::o;18407:134::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;-1:-1:-1;;;;;18495:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18495:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18407:134::o;19824:182::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;19908:16:::1;::::0;::::1;::::0;::::1;;;19907:17;19899:54;;;::::0;-1:-1:-1;;;19899:54:0;;15953:2:1;19899:54:0::1;::::0;::::1;15935:21:1::0;15992:2;15972:18;;;15965:30;16031:26;16011:18;;;16004:54;16075:18;;19899:54:0::1;15751:348:1::0;19899:54:0::1;19964:9;:34:::0;;-1:-1:-1;;;;;19964:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;19824:182::o;15349:198::-;-1:-1:-1;;;;;15439:20:0;;15415:7;15439:20;;;:11;:20;;;;;;;;15435:49;;;-1:-1:-1;;;;;;15468:16:0;;;;;:7;:16;;;;;;;15349:198::o;15435:49::-;-1:-1:-1;;;;;15522:16:0;;;;;;:7;:16;;;;;;15502:37;;:19;:37::i;14259:195::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;14346:6:::1;::::0;;14326:34:::1;::::0;-1:-1:-1;;;;;14346:6:0;;::::1;::::0;14326:19:::1;:34::i;:::-;14388:1;14371:19:::0;;-1:-1:-1;;14371:19:0::1;::::0;;14406:40:::1;::::0;14388:1;;14406:40:::1;::::0;14388:1;;14406:40:::1;14259:195::o:0;17749:517::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;17830:16;17826:433:::1;;-1:-1:-1::0;;;;;17863:13:0;;::::1;17879:5;17863:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;17863:21:0::1;::::0;;17899:9:::1;::::0;:32;;;;;::::1;::::0;::::1;16272:74:1::0;;;;16362:18;;;16355:50;;;;17899:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;16245:18:1;;17899:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18677:1139:::0;;:::o;17826:433::-:1;17968:17;::::0;:22;17964:153:::1;;18057:7;18037:17;;18019:15;:35;;;;:::i;:::-;:45;18011:90;;;::::0;-1:-1:-1;;;18011:90:0;;16618:2:1;18011:90:0::1;::::0;::::1;16600:21:1::0;;;16637:18;;;16630:30;16696:34;16676:18;;;16669:62;16748:18;;18011:90:0::1;16416:356:1::0;18011:90:0::1;-1:-1:-1::0;;;;;18131:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;18131:20:0::1;18147:4;18131:20:::0;;::::1;::::0;;;18186:15:::1;18166:17;:35:::0;;;18216:9:::1;::::0;:31;;;;;;;::::1;16272:74:1::0;;;;16362:18;;;16355:50;18216:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;16245:18:1;;18216:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;21021:505:::0;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;21156:10:::1;:24:::0;::::1;::::0;;::::1;21142:38:::0;;::::1;;::::0;::::1;::::0;:101:::1;;-1:-1:-1::0;21217:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;21201:42:::0;;::::1;;;21142:101;:164;;;;-1:-1:-1::0;21280:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;21264:42:::0;;::::1;;;21142:164;21134:173;;;::::0;::::1;;21370:4;21354:12:::0;21326:25:::1;21341:10:::0;21326:12;:25:::1;:::i;:::-;:40;;;;:::i;:::-;:48;;;;21318:57;;;::::0;::::1;;21386:10;:38:::0;;::::1;21480::::0;;::::1;::::0;::::1;::::0;21386;;::::1;::::0;::::1;21480::::0;;;;;;;;;21435:34;;;::::1;21480:38:::0;;;;::::1;::::0;;21021:505::o;16216:173::-;16280:4;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;16329:9:::1;::::0;16297:62:::1;::::0;16314:4:::1;::::0;-1:-1:-1;;;;;16329:9:0::1;-1:-1:-1::0;;16297:8:0::1;:62::i;:::-;-1:-1:-1::0;16377:4:0::1;16216:173:::0;:::o;27966:408::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;28028:14:::1;::::0;::::1;;28027:15;28019:52;;;::::0;-1:-1:-1;;;28019:52:0;;16979:2:1;28019:52:0::1;::::0;::::1;16961:21:1::0;17018:2;16998:18;;;16991:30;17057:26;17037:18;;;17030:54;17101:18;;28019:52:0::1;16777:348:1::0;28019:52:0::1;28090:16;::::0;::::1;::::0;::::1;;;28082:53;;;::::0;-1:-1:-1;;;28082:53:0;;17332:2:1;28082:53:0::1;::::0;::::1;17314:21:1::0;17371:2;17351:18;;;17344:30;17410:26;17390:18;;;17383:54;17454:18;;28082:53:0::1;17130:348:1::0;28082:53:0::1;28146:42;28176:4;28183;28146:21;:42::i;:::-;28221:6;::::0;28199:35:::1;::::0;-1:-1:-1;;;;;28221:6:0::1;::::0;28199:21:::1;:35::i;:::-;28249:9;::::0;28269:6:::1;::::0;28249:74:::1;::::0;;;;-1:-1:-1;;;;;28269:6:0;;::::1;28249:74;::::0;::::1;17681::1::0;17803:10;28284:12:0::1;17791:23:1::0;17771:18;;;17764:51;17863:18;28306:15:0::1;17851:31:1::0;17831:18;;;17824:59;28249:9:0;;;::::1;;::::0;:19:::1;::::0;17654:18:1;;28249:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28245:90:::0;28345:14:::1;:21:::0;;-1:-1:-1;;28345:21:0::1;28362:4;28345:21;::::0;;27966:408::o;14973:75::-;15014:13;15038:7;15031:14;;;;;:::i;16934:225::-;189:10;17027:4;17076:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17076:34:0;;;;;;;;;;17027:4;;17044:85;;17067:7;;17076:52;;17113:15;;17076:52;:::i;15555:167::-;15633:4;15650:42;189:10;15674:9;15685:6;15650:9;:42::i;:::-;-1:-1:-1;15710:4:0;;15555:167;-1:-1:-1;;;15555:167:0:o;22063:297::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;22157:21:::1;22169:9:::0;22157;:21:::1;:::i;:::-;:28;;22182:3;22157:28;22148:61;;;::::0;-1:-1:-1;;;22148:61:0;;18096:2:1;22148:61:0::1;::::0;::::1;18078:21:1::0;18135:2;18115:18;;;18108:30;18174:21;18154:18;;;18147:49;18213:18;;22148:61:0::1;17894:343:1::0;22148:61:0::1;22220:7;:34:::0;;::::1;22265::::0;;::::1;::::0;::::1;-1:-1:-1::0;;22265:34:0;;;22220;;::::1;22265::::0;::::1;::::0;;22331:21:::1;22290:9:::0;22245;22331:21:::1;:::i;:::-;22310:7;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;22310:42:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;22063:297:0:o;23503:165::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;23578:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;23624:36:::1;::::0;::::1;::::0;::::1;::::0;23600:8;1992:14:1;1985:22;1967:41;;1955:2;1940:18;;1827:187;23624:36:0::1;;;;;;;;23503:165:::0;:::o;10568:2212::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;10687:19:::1;::::0;;;::::1;;;10686:20;10678:62;;;::::0;-1:-1:-1;;;10678:62:0;;18444:2:1;10678:62:0::1;::::0;::::1;18426:21:1::0;18483:2;18463:18;;;18456:30;18522:31;18502:18;;;18495:59;18571:18;;10678:62:0::1;18242:353:1::0;10678:62:0::1;10777:2;10759:8;:15;:20;10751:48;;;::::0;-1:-1:-1;;;10751:48:0;;18802:2:1;10751:48:0::1;::::0;::::1;18784:21:1::0;18841:2;18821:18;;;18814:30;18880:17;18860:18;;;18853:45;18915:18;;10751:48:0::1;18600:339:1::0;10751:48:0::1;10837:7;:14;10818:8;:15;:33;10810:68;;;::::0;-1:-1:-1;;;10810:68:0;;19146:2:1;10810:68:0::1;::::0;::::1;19128:21:1::0;19185:2;19165:18;;;19158:30;19224:24;19204:18;;;19197:52;19266:18;;10810:68:0::1;18944:346:1::0;10810:68:0::1;10891:22;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:22:::1;:::i;:::-;-1:-1:-1::0;10924:20:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:20:::1;:::i;:::-;-1:-1:-1::0;10972:21:0::1;10955:14;:38:::0;11100:9:::1;:13:::0;;-1:-1:-1;;11100:13:0::1;11112:1;11100:13;::::0;;11167:9:::1;::::0;11163:13:::1;::::0;11167:9:::1;;11163:2;:13;:::i;:::-;11145:14;;:32;;;;:::i;:::-;11135:7;:42:::0;;;11206:13:::1;::::0;-1:-1:-1;;11206:13:0::1;:::i;:::-;11199:21;::::0;-1:-1:-1;;11199:21:0::1;:::i;:::-;11188:7;:33:::0;11234:9:::1;:46:::0;;-1:-1:-1;;11234:46:0::1;8852:42;11234:46:::0;;::::1;::::0;;;11318:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;8852:42;11318:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11300:49:0::1;;11350:9;;;;;;;;;-1:-1:-1::0;;;;;11350:9:0::1;-1:-1:-1::0;;;;;11350:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11300:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21424:15:1;;;11300:82:0::1;::::0;::::1;21406:34:1::0;11376:4:0::1;21456:18:1::0;;;21449:43;21318:18;;11300:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11291:6;:91:::0;;-1:-1:-1;;11291:91:0::1;-1:-1:-1::0;;;;;11291:91:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11393:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;11393:22:0::1;-1:-1:-1::0;11393:22:0::1;::::0;;11507:7:::1;::::0;11446:1:::1;::::0;11476:4:::1;::::0;;;11507:17:::1;::::0;11446:1;;11507:17:::1;:::i;:::-;11506:29;;;;:::i;:::-;11491:12;:44:::0;11563:14:::1;::::0;11591:7;;11563:24:::1;::::0;11580:7;;11563:24:::1;:::i;:::-;11562:36;;;;:::i;:::-;11546:13;:52:::0;-1:-1:-1;;11676:7:0::1;::::0;11619:2:::1;::::0;11642:5:::1;::::0;;;11676:17:::1;::::0;11619:2;;11676:17:::1;:::i;:::-;11675:29;;;;:::i;:::-;11658:14;:46:::0;11734:14:::1;::::0;11762:7;;11734:24:::1;::::0;11751:7;;11734:24:::1;:::i;:::-;11733:36;;;;:::i;:::-;11715:15;:54:::0;11797:7:::1;::::0;11812:5:::1;::::0;11797:11:::1;::::0;11807:1:::1;11797:11;:::i;:::-;11796:21;;;;:::i;:::-;11780:13;:37:::0;11842:7:::1;::::0;11857:4:::1;::::0;11842:11:::1;::::0;11852:1:::1;11842:11;:::i;:::-;11841:20;;;;:::i;:::-;11828:10;:33:::0;11883:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;11883:9:0::1;11872:99;;11923:9;:36:::0;;;::::1;11953:4;11923:36:::0;::::1;;::::0;;11872:99:::1;11981:19;:26:::0;;;::::1;::::0;::::1;::::0;;12042:7:::1;::::0;12003:4:::1;11981:26:::0;12031:7:::1;13408::::0;13435:6;-1:-1:-1;;;;;13435:6:0;;13370:79;12031:7:::1;-1:-1:-1::0;;;;;12023:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12023:16:0;:26;12086:7:::1;13408::::0;13435:6;-1:-1:-1;;;;;13435:6:0;;13370:79;12086:7:::1;-1:-1:-1::0;;;;;12065:38:0::1;12082:1;-1:-1:-1::0;;;;;12065:38:0::1;;12095:7;;12065:38;;;;2675:25:1::0;;2663:2;2648:18;;2529:177;12065:38:0::1;;;;;;;;12148:9;::::0;12116:62:::1;::::0;12133:4:::1;::::0;-1:-1:-1;;;;;12148:9:0::1;-1:-1:-1::0;;12116:8:0::1;:62::i;:::-;12195:9;12191:204;12214:8;:15;12210:1;:19;12191:204;;;12250:14;12267:8;12276:1;12267:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;12325:9:::1;::::0;12267:11;;-1:-1:-1;12293:14:0::1;::::0;12321:13:::1;::::0;12325:9:::1;;12321:2;:13;:::i;:::-;12310:7;12318:1;12310:10;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;12293:41;;12349:34;12359:7;13408::::0;13435:6;-1:-1:-1;;;;;13435:6:0;;13370:79;12359:7:::1;12368:6;12376;12349:9;:34::i;:::-;;12235:160;;12231:3;;;;;:::i;:::-;;;;12191:204;;;;12407:53;12417:7;13408::::0;13435:6;-1:-1:-1;;;;;13435:6:0;;13370:79;12417:7:::1;12434:4;12441:18;12451:7;13408::::0;13435:6;-1:-1:-1;;;;;13435:6:0;;13370:79;12407:53:::1;-1:-1:-1::0;12473:9:0::1;::::0;-1:-1:-1;;;;;12473:9:0::1;:25;12506:21;12551:4;12571:24;12551:4:::0;12571:9:::1;:24::i;:::-;12610:1;12653::::0;12696:7:::1;13408::::0;13435:6;-1:-1:-1;;;;;13435:6:0;;13370:79;12696:7:::1;12473:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;21885:15:1;;;12473:271:0::1;::::0;::::1;21867:34:1::0;21917:18;;;21910:34;;;;21960:18;;;21953:34;;;;22003:18;;;21996:34;22067:15;;;22046:19;;;22039:44;12718:15:0::1;22099:19:1::0;;;22092:35;21778:19;;12473:271:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12757:15;:13;:15::i;:::-;10667:2113;;10568:2212:::0;;:::o;17167:574::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;17238:29:::1;17289:9;17238:61;;17310:16;17347:10;-1:-1:-1::0;;;;;17347:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17329:47:0::1;;17385:4;17392:10;-1:-1:-1::0;;;;;17392:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17329:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21424:15:1;;;17329:81:0::1;::::0;::::1;21406:34:1::0;21476:15;;21456:18;;;21449:43;21318:18;;17329:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17310:100:::0;-1:-1:-1;;;;;;17425:22:0;::::1;17421:207;;17491:10;-1:-1:-1::0;;;;;17491:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17473:50:0::1;;17532:4;17539:10;-1:-1:-1::0;;;;;17539:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17473:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21424:15:1;;;17473:84:0::1;::::0;::::1;21406:34:1::0;21476:15;;21456:18;;;21449:43;21318:18;;17473:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17464:6;:93:::0;;-1:-1:-1;;17464:93:0::1;-1:-1:-1::0;;;;;17464:93:0;;;::::1;::::0;;;::::1;::::0;;17421:207:::1;;;17599:6;:17:::0;;-1:-1:-1;;17599:17:0::1;-1:-1:-1::0;;;;;17599:17:0;::::1;;::::0;;17421:207:::1;17638:9;:22:::0;;-1:-1:-1;;17638:22:0::1;-1:-1:-1::0;;;;;17638:22:0;::::1;::::0;;::::1;::::0;;;17671:62:::1;::::0;17688:4:::1;::::0;-1:-1:-1;;17671:8:0::1;:62::i;23361:134::-:0;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;23444:16:::1;:43:::0;;-1:-1:-1;;23444:43:0::1;-1:-1:-1::0;;;;;23444:43:0;;;::::1;::::0;;;::::1;::::0;;23361:134::o;32805:183::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;32872:16:::1;::::0;::::1;::::0;::::1;;;32871:17;32863:58;;;::::0;-1:-1:-1;;;32863:58:0;;22651:2:1;32863:58:0::1;::::0;::::1;22633:21:1::0;22690:2;22670:18;;;22663:30;22729;22709:18;;;22702:58;22777:18;;32863:58:0::1;22449:352:1::0;32863:58:0::1;13408:7:::0;13435:6;;32932:48:::1;::::0;-1:-1:-1;;;;;13435:6:0;;;;32958:21:::1;32932:48:::0;::::1;;;::::0;32958:21;;32932:48;13408:7;32932:48;32958:21;13435:6;32932:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32805:183::o:0;23064:289::-;10027:6;;-1:-1:-1;;;;;10027:6:0;189:10;10027:22;10019:52;;;;-1:-1:-1;;;10019:52:0;;10631:2:1;10019:52:0;;;10613:21:1;10670:2;10650:18;;;10643:30;-1:-1:-1;;;10689:18:1;;;10682:47;10746:18;;10019:52:0;10429:341:1;10019:52:0;23264:16:::1;23244;23234:7;;:26;;;;:::i;:::-;23233:47;;;;:::i;:::-;23217:13;:63:::0;23305:7:::1;::::0;23332:13;;23305:23:::1;::::0;23315:13;;23305:23:::1;:::i;:::-;23304:41;;;;:::i;:::-;23291:10;:54:::0;-1:-1:-1;;;;23064:289:0:o;15899:309::-;-1:-1:-1;;;;;15993:20:0;;15985:52;;;;-1:-1:-1;;;15985:52:0;;23008:2:1;15985:52:0;;;22990:21:1;23047:2;23027:18;;;23020:30;23086:21;23066:18;;;23059:49;23125:18;;15985:52:0;22806:343:1;15985:52:0;-1:-1:-1;;;;;16056:21:0;;16048:53;;;;-1:-1:-1;;;16048:53:0;;23008:2:1;16048:53:0;;;22990:21:1;23047:2;23027:18;;;23020:30;23086:21;23066:18;;;23059:49;23125:18;;16048:53:0;22806:343:1;16048:53:0;-1:-1:-1;;;;;16114:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16167:33;;2675:25:1;;;16167:33:0;;2648:18:1;16167:33:0;;;;;;;15899:309;;;:::o;24265:1471::-;24344:4;-1:-1:-1;;;;;24369:18:0;;24361:68;;;;-1:-1:-1;;;24361:68:0;;23356:2:1;24361:68:0;;;23338:21:1;23395:2;23375:18;;;23368:30;23434:34;23414:18;;;23407:62;23505:7;23485:18;;;23478:35;23530:19;;24361:68:0;23154:401:1;24361:68:0;-1:-1:-1;;;;;24448:16:0;;24440:64;;;;-1:-1:-1;;;24440:64:0;;23762:2:1;24440:64:0;;;23744:21:1;23801:2;23781:18;;;23774:30;23840:34;23820:18;;;23813:62;23911:5;23891:18;;;23884:33;23934:19;;24440:64:0;23560:399:1;24440:64:0;24532:1;24523:6;:10;24515:64;;;;-1:-1:-1;;;24515:64:0;;24166:2:1;24515:64:0;;;24148:21:1;24205:2;24185:18;;;24178:30;24244:34;24224:18;;;24217:62;24315:11;24295:18;;;24288:39;24344:19;;24515:64:0;23964:405:1;24515:64:0;24593:20;24604:4;24610:2;24593:10;:20::i;:::-;24590:481;;;24634:14;;;;24630:89;;24669:34;;-1:-1:-1;;;24669:34:0;;24576:2:1;24669:34:0;;;24558:21:1;24615:2;24595:18;;;24588:30;24654:26;24634:18;;;24627:54;24698:18;;24669:34:0;24374:348:1;24630:89:0;-1:-1:-1;;;;;24736:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;24753:11:0;;;;;;:7;:11;;;;;;;;24736:28;24733:142;;;24802:12;;24792:6;:22;;24784:75;;;;-1:-1:-1;;;24784:75:0;;24929:2:1;24784:75:0;;;24911:21:1;24968:2;24948:18;;;24941:30;25007:34;24987:18;;;24980:62;25078:10;25058:18;;;25051:38;25106:19;;24784:75:0;24727:404:1;24784:75:0;-1:-1:-1;;;;;24892:20:0;;8852:42;24892:20;;;;:36;;-1:-1:-1;;;;;;24917:11:0;;;;;;:7;:11;;;;;;;;24916:12;24892:36;24889:171;;;24983:14;;24973:6;24957:13;24967:2;24957:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;24949:95;;;;-1:-1:-1;;;24949:95:0;;25338:2:1;24949:95:0;;;25320:21:1;25377:2;25357:18;;;25350:30;25416:34;25396:18;;;25389:62;25487:12;25467:18;;;25460:40;25517:19;;24949:95:0;25136:406:1;24949:95:0;-1:-1:-1;;;;;25116:25:0;;25083:12;25116:25;;;:19;:25;;;;;;25098:4;;25116:25;;;:52;;-1:-1:-1;;;;;;25145:23:0;;;;;;:19;:23;;;;;;;;25116:52;25113:98;;;-1:-1:-1;25194:5:0;25113:98;-1:-1:-1;;;;;25227:11:0;;;;;;:7;:11;;;;;;;;25223:443;;;25260:6;;;;;;;25259:7;:47;;;;-1:-1:-1;25287:19:0;;;;;;;25259:47;25255:394;;;25341:28;25372:24;25390:4;25372:9;:24::i;:::-;25341:55;;25443:13;;25419:20;:37;25415:219;;25508:10;;25484:20;:34;25481:77;;-1:-1:-1;25545:10:0;;25481:77;25580:34;25593:20;25580:12;:34::i;:::-;25322:327;25255:394;25684:44;25702:4;25708:2;25712:6;25720:7;25684:17;:44::i;:::-;25677:51;24265:1471;-1:-1:-1;;;;;24265:1471:0:o;31885:525::-;31964:7;;32000;;31926;;31964;31926;32018:282;32042:9;:16;32038:20;;32018:282;;;32108:7;32084;:21;32092:9;32102:1;32092:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32092:12:0;32084:21;;;;;;;;;;;;;:31;;:66;;;32143:7;32119;:21;32127:9;32137:1;32127:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32127:12:0;32119:21;;;;;;;;;;;;;:31;32084:66;32080:96;;;32169:7;;32159;;:17;;;;:::i;:::-;32152:24;;;;;31885:525;:::o;32080:96::-;32211:7;:21;32219:9;32229:1;32219:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32219:12:0;32211:21;;;;;;;;;;;;;32201:31;;:7;:31;:::i;:::-;32191:41;;32267:7;:21;32275:9;32285:1;32275:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32275:12:0;32267:21;;;;;;;;;;;;;32257:31;;:7;:31;:::i;:::-;32247:41;-1:-1:-1;32060:3:0;;;;:::i;:::-;;;;32018:282;;;;32334:7;;32324;;:17;;;;:::i;:::-;32314:7;:27;32310:57;;;32360:7;;32350;;:17;;;;:::i;:::-;32343:24;;;;31885:525;:::o;32310:57::-;32385:17;32395:7;32385;:17;:::i;23676:323::-;23744:4;13435:6;;-1:-1:-1;;;;;23768:15:0;;;13435:6;;23768:15;;;;:45;;-1:-1:-1;13408:7:0;13435:6;-1:-1:-1;;;;;23800:13:0;;;13435:6;;23800:13;;23768:45;:84;;;;-1:-1:-1;;;;;;23831:21:0;;;;;;:17;:21;;;;;;;;23830:22;23768:84;:125;;;;-1:-1:-1;;;;;;23870:23:0;;;;;;:17;:23;;;;;;;;23869:24;23768:125;:152;;;;-1:-1:-1;;;;;;23910:10:0;;8934:42;23910:10;;23768:152;:185;;;;-1:-1:-1;;;;;;23937:16:0;;;;23768:185;:223;;;;-1:-1:-1;;;;;;23970:21:0;;23986:4;23970:21;;23761:230;23676:323;-1:-1:-1;;;23676:323:0:o;25744:1564::-;9921:6;:13;;;;;;;;25831:7:::1;:18:::0;::::1;::::0;;;::::1;;25827:49;;25869:7;;25827:49;25911:4;25891:26;::::0;;;:11:::1;:26;::::0;;;;;;;25926:9:::1;::::0;-1:-1:-1;;;;;25926:9:0::1;25891:46:::0;;;;;;;;-1:-1:-1;;25891:67:0::1;25888:165;;25995:4;25975:26;::::0;;;:11:::1;:26;::::0;;;;;;;26010:9:::1;::::0;-1:-1:-1;;;;;26010:9:0::1;25975:46:::0;;;;;;;-1:-1:-1;;25975:66:0;;25888:165:::1;26136:7;:18:::0;26065:17:::1;::::0;26158:1:::1;::::0;26136:18:::1;::::0;;::::1;::::0;::::1;::::0;26087:45:::1;::::0;26110:22:::1;26087:20:::0;:45:::1;:::i;:::-;26086:68;;;;:::i;:::-;26085:74;;;;:::i;:::-;26065:94:::0;-1:-1:-1;26172:20:0::1;26195:32;26065:94:::0;26195:20;:32:::1;:::i;:::-;26272:16;::::0;;26286:1:::1;26272:16:::0;;;;;::::1;::::0;;26172:55;;-1:-1:-1;26248:21:0::1;::::0;26272:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26272:16:0::1;26248:40;;26317:4;26299;26304:1;26299:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26299:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26343:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26299:7;;26343:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26333:4;26338:1;26333:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26333:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26372:9:::1;::::0;:219:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:219:::1;::::0;26447:12;;26372:9:::1;::::0;26518:4;;26545::::1;::::0;26565:15:::1;::::0;26372:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26742:7:0::1;:18:::0;26663:24:::1;::::0;-1:-1:-1;26764:1:0::1;::::0;-1:-1:-1;26742:18:0::1;::::0;;::::1;::::0;::::1;::::0;26692:46:::1;::::0;26716:22:::1;26692:21;:46;:::i;:::-;26691:69;;;;:::i;:::-;26690:75;;;;:::i;:::-;26663:102:::0;-1:-1:-1;26782:13:0;;26778:396:::1;;26812:9;::::0;:276:::1;::::0;;;;26889:4:::1;26812:276;::::0;::::1;21867:34:1::0;21917:18;;;21910:34;;;26812:9:0::1;21960:18:1::0;;;21953:34;;;22003:18;;;21996:34;8934:42:0::1;22046:19:1::0;;;22039:44;27058:15:0::1;22099:19:1::0;;;22092:35;-1:-1:-1;;;;;26812:9:0;;::::1;::::0;:25:::1;::::0;26845:16;;21778:19:1;;26812:276:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27108:54:0::1;::::0;;26780:25:1;;;26836:2;26821:18;;26814:34;;;26864:18;;;26857:34;;;27108:54:0::1;::::0;-1:-1:-1;26768:2:1;26753:18;27108:54:0::1;;;;;;;26778:396;27223:1;27188:32;27211:9:::0;27188:20;:32:::1;:::i;:::-;:36;27184:117;;;27241:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;27241:16:0;;::::1;::::0;27267:21:::1;27241:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;27267:21;27241:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27184:117;25816:1492;;;;9945:1;-1:-1:-1::0;9957:6:0;:14;;;;;;25744:1564::o;28588:1273::-;28711:16;;28689:4;;28711:16;;;;;28706:221;;28744:28;28763:4;28769:2;28744:18;:28::i;:::-;28792:16;;;;;;;28791:17;:41;;;;;28812:20;28823:4;28829:2;28812:10;:20::i;:::-;28787:129;;;28853:47;;-1:-1:-1;;;28853:47:0;;27104:2:1;28853:47:0;;;27086:21:1;27143:2;27123:18;;;27116:30;27182:34;27162:18;;;27155:62;27253:7;27233:18;;;27226:35;27278:19;;28853:47:0;26902:401:1;28787:129:0;28939:25;28967:38;28978:4;28984:2;28988:7;28997;28967:10;:38::i;:::-;29050:14;;;;-1:-1:-1;;;;;29034:13:0;;;;;;:7;:13;;;;;;28939:66;;-1:-1:-1;29034:30:0;;;:::i;:::-;-1:-1:-1;;;;;29018:13:0;;;;;;;:7;:13;;;;;;:46;;;;29103:22;;;;29089:11;;;;;;;;;;:36;;29103:22;29089:36;:::i;:::-;-1:-1:-1;;;;;29075:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;29142:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;29164:15:0;;;;;;:11;:15;;;;;;;;29163:16;29142:37;29138:416;;;-1:-1:-1;;;;;29212:13:0;;;;;;:7;:13;;;;;;:23;;29228:7;;29212:23;:::i;:::-;-1:-1:-1;;;;;29196:13:0;;;;;;:7;:13;;;;;:39;29138:416;;;-1:-1:-1;;;;;29258:17:0;;;;;;:11;:17;;;;;;;;29257:18;:37;;;;-1:-1:-1;;;;;;29279:15:0;;;;;;:11;:15;;;;;;;;29257:37;29253:301;;;29339:22;;-1:-1:-1;;;;;29325:11:0;;29339:22;29325:11;;;:7;:11;;;;;;:36;;29339:22;29325:36;:::i;:::-;-1:-1:-1;;;;;29311:11:0;;;;;;:7;:11;;;;;:50;29253:301;;;-1:-1:-1;;;;;29385:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;29406:15:0;;;;;;:11;:15;;;;;;;;29385:36;29381:173;;;-1:-1:-1;;;;;29454:13:0;;;;;;:7;:13;;;;;;:23;;29470:7;;29454:23;:::i;:::-;-1:-1:-1;;;;;29438:13:0;;;;;;;:7;:13;;;;;;:39;;;;29520:22;;29506:11;;;;;;;;;;:36;;29520:22;29506:36;:::i;:::-;-1:-1:-1;;;;;29492:11:0;;;;;;:7;:11;;;;;:50;29381:173;29570:17;;;;:21;29566:79;;29606:39;29621:4;29627:6;:17;;;29606:14;:39::i;:::-;29674:1;29660:6;:11;;;:15;:34;;;;29693:1;29679:6;:11;;;:15;29660:34;29656:75;;;29720:6;:11;;;29709:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;29656:75:0;29760:6;:11;;;29746:10;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;29808:22:0;;29789:42;;2675:25:1;;;-1:-1:-1;;;;;29789:42:0;;;;;;;;;;2663:2:1;2648:18;29789:42:0;;;;;;;-1:-1:-1;29849:4:0;;28588:1273;-1:-1:-1;;;;;28588:1273:0:o;27316:642::-;27398:16;;;;;;;27397:17;27389:65;;;;-1:-1:-1;;;27389:65:0;;27510:2:1;27389:65:0;;;27492:21:1;27549:2;27529:18;;;27522:30;27588:34;27568:18;;;27561:62;27659:5;27639:18;;;27632:33;27682:19;;27389:65:0;27308:399:1;27389:65:0;27470:20;27481:4;27487:2;27470:10;:20::i;:::-;27469:21;:37;;;;-1:-1:-1;27500:6:0;;-1:-1:-1;;;;;27494:12:0;;;27500:6;;27494:12;27469:37;27465:486;;;-1:-1:-1;;;;;27527:21:0;;27543:4;27527:21;27523:165;;;27597:4;27568:17;:26;27586:7;13408;13435:6;-1:-1:-1;;;;;13435:6:0;;13370:79;27586:7;-1:-1:-1;;;;;27568:26:0;;;;;;;;;;;;-1:-1:-1;27568:26:0;:33;;-1:-1:-1;;27568:33:0;;;;;;;;;;27523:165;;;-1:-1:-1;;;;;27642:23:0;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;27642:30:0;27668:4;27642:30;;;27523:165;27702:16;:23;;;;;;;;;;27751:9;;;-1:-1:-1;;;;;27751:9:0;27740:107;;27795:9;:36;;;;27825:4;27795:36;;;;;27740:107;27861:19;:26;;;;;;;;27907:32;;-1:-1:-1;1967:41:1;;27907:32:0;;1955:2:1;1940:18;27907:32:0;;;;;;;27316:642;;:::o;29869:2008::-;29963:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29963:18:0;29994:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29994:25:0;30030:19;30052:10;:8;:10::i;:::-;30030:32;-1:-1:-1;30092:21:0;30030:32;30092:7;:21;:::i;:::-;30075:14;;;:38;30130:20;30141:4;30147:2;30130:10;:20::i;:::-;30126:315;;;30198:9;;:38;;;;;-1:-1:-1;;;;;27993:15:1;;;30198:38:0;;;27975:34:1;28045:15;;;28025:18;;;28018:43;28077:18;;;28070:34;;;30167:12:0;;30198:9;;;;;:19;;27887:18:1;;30198:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30198:38:0;;;;;;;;-1:-1:-1;;30198:38:0;;;;;;;;;;;;:::i;:::-;;;30194:164;;30334:8;;;30194:164;30287:5;-1:-1:-1;30378:7:0;30374:56;;30406:8;;;30374:56;30152:289;30126:315;30456:7;30453:1291;;;-1:-1:-1;;;;;30484:11:0;;;;;;:7;:11;;;;;;;;30480:723;;;30542:10;:21;30516:12;:47;;30542:21;;;;-1:-1:-1;;30582:51:0;;;;;;;30610:23;;;;;;30582:51;;-1:-1:-1;;30652:51:0;30680:23;;;;;;;;;30652:51;;;;;;;;;30480:723;;;-1:-1:-1;;;;;30729:13:0;;;;;;:7;:13;;;;;;;;30725:478;;;30789:9;:20;30763:12;:46;;30789:20;;;;-1:-1:-1;;30828:50:0;;;;;;;30856:22;;;;;;30828:50;;-1:-1:-1;;30897:50:0;30925:22;;;;;;;;;30897:50;;;;;;;;;30725:478;;;31014:14;:25;30988:12;:51;;31014:25;;;;-1:-1:-1;;31058:55:0;;;;;;;31086:27;;;;;;31058:55;;-1:-1:-1;;31132:55:0;31160:27;;;;;;;;;31132:55;;;;;;;;;30725:478;31271:10;:27;31244:12;:23;31271:27;;;;;;;;31234:33;;31244:23;31234:7;:33;:::i;:::-;31233:65;;;;:::i;:::-;31219:11;;;:79;31403:10;:27;31373:12;:25;31403:27;;;;;;;;31345:53;;31373:25;;;;;;31345;;;;;:53;:::i;:::-;31334:65;;;;:7;:65;:::i;:::-;31333:97;;;;:::i;:::-;31313:17;;;:117;;;31481:11;;;;:31;;31313:117;31481:31;:::i;:::-;31470:43;;:7;:43;:::i;:::-;31445:68;;31544:11;;;;:25;;31558:11;;31544:25;:::i;:::-;31530:11;;;:39;30453:1291;;;31616:1;31602:11;;;:15;;;31632:17;;;:21;;;31668:32;;;31717:11;;;:15;30453:1291;31832:11;31812:6;:17;;;:31;;;;:::i;:::-;31797:6;:11;;;:47;;;;:::i;:::-;31779:6;:14;;;:66;;;;:::i;:::-;31754:22;;;:91;-1:-1:-1;31754:22:0;29869:2008;-1:-1:-1;;;;;29869:2008:0:o;32422:375::-;32565:10;:8;:10::i;:::-;32552:23;;:10;:23;:::i;:::-;32542:4;32526:22;;;;:7;:22;;;;;;:50;;;;:::i;:::-;32517:4;32501:22;;;;:7;:22;;;;;;;;:75;;;;32590:11;:26;;;;;;32587:104;;;32672:4;32656:22;;;;:7;:22;;;;;;:35;;32681:10;;32656:35;:::i;:::-;32647:4;32631:22;;;;:7;:22;;;;;:60;32587:104;32707:43;;2675:25:1;;;32732:4:0;;-1:-1:-1;;;;;32707:43:0;;;;;2663:2:1;2648:18;32707:43:0;;;;;;;32422:375;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:656:1;357:4;386:2;415;404:9;397:21;447:6;441:13;490:6;485:2;474:9;470:18;463:34;515:1;525:140;539:6;536:1;533:13;525:140;;;634:14;;;630:23;;624:30;600:17;;;619:2;596:26;589:66;554:10;;525:140;;;683:6;680:1;677:13;674:91;;;753:1;748:2;739:6;728:9;724:22;720:31;713:42;674:91;-1:-1:-1;817:2:1;805:15;-1:-1:-1;;801:88:1;786:104;;;;892:2;782:113;;245:656;-1:-1:-1;;;245:656:1:o;1163:180::-;1222:6;1275:2;1263:9;1254:7;1250:23;1246:32;1243:52;;;1291:1;1288;1281:12;1243:52;-1:-1:-1;1314:23:1;;1163:180;-1:-1:-1;1163:180:1:o;1348:154::-;-1:-1:-1;;;;;1427:5:1;1423:54;1416:5;1413:65;1403:93;;1492:1;1489;1482:12;1507:315;1575:6;1583;1636:2;1624:9;1615:7;1611:23;1607:32;1604:52;;;1652:1;1649;1642:12;1604:52;1691:9;1678:23;1710:31;1735:5;1710:31;:::i;:::-;1760:5;1812:2;1797:18;;;;1784:32;;-1:-1:-1;;;1507:315:1:o;2019:118::-;2105:5;2098:13;2091:21;2084:5;2081:32;2071:60;;2127:1;2124;2117:12;2142:382;2207:6;2215;2268:2;2256:9;2247:7;2243:23;2239:32;2236:52;;;2284:1;2281;2274:12;2236:52;2323:9;2310:23;2342:31;2367:5;2342:31;:::i;:::-;2392:5;-1:-1:-1;2449:2:1;2434:18;;2421:32;2462:30;2421:32;2462:30;:::i;:::-;2511:7;2501:17;;;2142:382;;;;;:::o;3160:159::-;3227:20;;3287:6;3276:18;;3266:29;;3256:57;;3309:1;3306;3299:12;3256:57;3160:159;;;:::o;3324:328::-;3398:6;3406;3414;3467:2;3455:9;3446:7;3442:23;3438:32;3435:52;;;3483:1;3480;3473:12;3435:52;3506:28;3524:9;3506:28;:::i;:::-;3496:38;;3553:37;3586:2;3575:9;3571:18;3553:37;:::i;:::-;3543:47;;3609:37;3642:2;3631:9;3627:18;3609:37;:::i;:::-;3599:47;;3324:328;;;;;:::o;3657:456::-;3734:6;3742;3750;3803:2;3791:9;3782:7;3778:23;3774:32;3771:52;;;3819:1;3816;3809:12;3771:52;3858:9;3845:23;3877:31;3902:5;3877:31;:::i;:::-;3927:5;-1:-1:-1;3984:2:1;3969:18;;3956:32;3997:33;3956:32;3997:33;:::i;:::-;3657:456;;4049:7;;-1:-1:-1;;;4103:2:1;4088:18;;;;4075:32;;3657:456::o;4118:248::-;4186:6;4194;4247:2;4235:9;4226:7;4222:23;4218:32;4215:52;;;4263:1;4260;4253:12;4215:52;-1:-1:-1;;4286:23:1;;;4356:2;4341:18;;;4328:32;;-1:-1:-1;4118:248:1:o;4371:647::-;4445:6;4453;4461;4469;4522:3;4510:9;4501:7;4497:23;4493:33;4490:53;;;4539:1;4536;4529:12;4490:53;4578:9;4565:23;4597:28;4619:5;4597:28;:::i;:::-;4644:5;-1:-1:-1;4701:2:1;4686:18;;4673:32;4714:30;4673:32;4714:30;:::i;:::-;4763:7;-1:-1:-1;4822:2:1;4807:18;;4794:32;4835:30;4794:32;4835:30;:::i;:::-;4884:7;-1:-1:-1;4943:2:1;4928:18;;4915:32;4956:30;4915:32;4956:30;:::i;:::-;4371:647;;;;-1:-1:-1;4371:647:1;;-1:-1:-1;;4371:647:1:o;5212:247::-;5271:6;5324:2;5312:9;5303:7;5299:23;5295:32;5292:52;;;5340:1;5337;5330:12;5292:52;5379:9;5366:23;5398:31;5423:5;5398:31;:::i;5834:256::-;5900:6;5908;5961:2;5949:9;5940:7;5936:23;5932:32;5929:52;;;5977:1;5974;5967:12;5929:52;6000:28;6018:9;6000:28;:::i;:::-;5990:38;;6047:37;6080:2;6069:9;6065:18;6047:37;:::i;:::-;6037:47;;5834:256;;;;;:::o;6095:241::-;6151:6;6204:2;6192:9;6183:7;6179:23;6175:32;6172:52;;;6220:1;6217;6210:12;6172:52;6259:9;6246:23;6278:28;6300:5;6278:28;:::i;6341:184::-;6393:77;6390:1;6383:88;6490:4;6487:1;6480:15;6514:4;6511:1;6504:15;6530:334;6601:2;6595:9;6657:2;6647:13;;-1:-1:-1;;6643:86:1;6631:99;;6760:18;6745:34;;6781:22;;;6742:62;6739:88;;;6807:18;;:::i;:::-;6843:2;6836:22;6530:334;;-1:-1:-1;6530:334:1:o;6869:183::-;6929:4;6962:18;6954:6;6951:30;6948:56;;;6984:18;;:::i;:::-;-1:-1:-1;7029:1:1;7025:14;7041:4;7021:25;;6869:183::o;7057:662::-;7111:5;7164:3;7157:4;7149:6;7145:17;7141:27;7131:55;;7182:1;7179;7172:12;7131:55;7218:6;7205:20;7244:4;7268:60;7284:43;7324:2;7284:43;:::i;:::-;7268:60;:::i;:::-;7362:15;;;7448:1;7444:10;;;;7432:23;;7428:32;;;7393:12;;;;7472:15;;;7469:35;;;7500:1;7497;7490:12;7469:35;7536:2;7528:6;7524:15;7548:142;7564:6;7559:3;7556:15;7548:142;;;7630:17;;7618:30;;7668:12;;;;7581;;7548:142;;;-1:-1:-1;7708:5:1;7057:662;-1:-1:-1;;;;;;7057:662:1:o;7724:1215::-;7842:6;7850;7903:2;7891:9;7882:7;7878:23;7874:32;7871:52;;;7919:1;7916;7909:12;7871:52;7959:9;7946:23;7988:18;8029:2;8021:6;8018:14;8015:34;;;8045:1;8042;8035:12;8015:34;8083:6;8072:9;8068:22;8058:32;;8128:7;8121:4;8117:2;8113:13;8109:27;8099:55;;8150:1;8147;8140:12;8099:55;8186:2;8173:16;8208:4;8232:60;8248:43;8288:2;8248:43;:::i;8232:60::-;8326:15;;;8408:1;8404:10;;;;8396:19;;8392:28;;;8357:12;;;;8432:19;;;8429:39;;;8464:1;8461;8454:12;8429:39;8488:11;;;;8508:217;8524:6;8519:3;8516:15;8508:217;;;8604:3;8591:17;8621:31;8646:5;8621:31;:::i;:::-;8665:18;;8541:12;;;;8703;;;;8508:217;;;8744:5;-1:-1:-1;;8787:18:1;;8774:32;;-1:-1:-1;;8818:16:1;;;8815:36;;;8847:1;8844;8837:12;8815:36;;8870:63;8925:7;8914:8;8903:9;8899:24;8870:63;:::i;:::-;8860:73;;;7724:1215;;;;;:::o;8944:388::-;9012:6;9020;9073:2;9061:9;9052:7;9048:23;9044:32;9041:52;;;9089:1;9086;9079:12;9041:52;9128:9;9115:23;9147:31;9172:5;9147:31;:::i;:::-;9197:5;-1:-1:-1;9254:2:1;9239:18;;9226:32;9267:33;9226:32;9267:33;:::i;9597:385::-;9683:6;9691;9699;9707;9760:3;9748:9;9739:7;9735:23;9731:33;9728:53;;;9777:1;9774;9767:12;9728:53;-1:-1:-1;;9800:23:1;;;9870:2;9855:18;;9842:32;;-1:-1:-1;9921:2:1;9906:18;;9893:32;;9972:2;9957:18;9944:32;;-1:-1:-1;9597:385:1;-1:-1:-1;9597:385:1:o;9987:437::-;10066:1;10062:12;;;;10109;;;10130:61;;10184:4;10176:6;10172:17;10162:27;;10130:61;10237:2;10229:6;10226:14;10206:18;10203:38;10200:218;;;10274:77;10271:1;10264:88;10375:4;10372:1;10365:15;10403:4;10400:1;10393:15;10200:218;;9987:437;;;:::o;11825:184::-;11877:77;11874:1;11867:88;11974:4;11971:1;11964:15;11998:4;11995:1;11988:15;12014:184;12066:77;12063:1;12056:88;12163:4;12160:1;12153:15;12187:4;12184:1;12177:15;12203:184;12255:77;12252:1;12245:88;12352:4;12349:1;12342:15;12376:4;12373:1;12366:15;12392:125;12432:4;12460:1;12457;12454:8;12451:34;;;12465:18;;:::i;:::-;-1:-1:-1;12502:9:1;;12392:125::o;12522:195::-;12561:3;-1:-1:-1;;12585:5:1;12582:77;12579:103;;;12662:18;;:::i;:::-;-1:-1:-1;12709:1:1;12698:13;;12522:195::o;12722:224::-;12761:3;12789:6;12822:2;12819:1;12815:10;12852:2;12849:1;12845:10;12883:3;12879:2;12875:12;12870:3;12867:21;12864:47;;;12891:18;;:::i;:::-;12927:13;;12722:224;-1:-1:-1;;;;12722:224:1:o;12951:228::-;12991:7;13117:1;-1:-1:-1;;13045:74:1;13042:1;13039:81;13034:1;13027:9;13020:17;13016:105;13013:131;;;13124:18;;:::i;:::-;-1:-1:-1;13164:9:1;;12951:228::o;13184:184::-;13236:77;13233:1;13226:88;13333:4;13330:1;13323:15;13357:4;13354:1;13347:15;13373:120;13413:1;13439;13429:35;;13444:18;;:::i;:::-;-1:-1:-1;13478:9:1;;13373:120::o;14764:128::-;14804:3;14835:1;14831:6;14828:1;14825:13;14822:39;;;14841:18;;:::i;:::-;-1:-1:-1;14877:9:1;;14764:128::o;19295:482::-;19384:1;19427:5;19384:1;19441:330;19462:7;19452:8;19449:21;19441:330;;;19581:4;-1:-1:-1;;19509:77:1;19503:4;19500:87;19497:113;;;19590:18;;:::i;:::-;19640:7;19630:8;19626:22;19623:55;;;19660:16;;;;19623:55;19739:22;;;;19699:15;;;;19441:330;;;19445:3;19295:482;;;;;:::o;19782:866::-;19831:5;19861:8;19851:80;;-1:-1:-1;19902:1:1;19916:5;;19851:80;19950:4;19940:76;;-1:-1:-1;19987:1:1;20001:5;;19940:76;20032:4;20050:1;20045:59;;;;20118:1;20113:130;;;;20025:218;;20045:59;20075:1;20066:10;;20089:5;;;20113:130;20150:3;20140:8;20137:17;20134:43;;;20157:18;;:::i;:::-;-1:-1:-1;;20213:1:1;20199:16;;20228:5;;20025:218;;20327:2;20317:8;20314:16;20308:3;20302:4;20299:13;20295:36;20289:2;20279:8;20276:16;20271:2;20265:4;20262:12;20258:35;20255:77;20252:159;;;-1:-1:-1;20364:19:1;;;20396:5;;20252:159;20443:34;20468:8;20462:4;20443:34;:::i;:::-;20573:6;-1:-1:-1;;20501:79:1;20492:7;20489:92;20486:118;;;20584:18;;:::i;:::-;20622:20;;19782:866;-1:-1:-1;;;19782:866:1:o;20653:140::-;20711:5;20740:47;20781:4;20771:8;20767:19;20761:4;20740:47;:::i;20798:112::-;20830:1;20856;20846:35;;20861:18;;:::i;:::-;-1:-1:-1;20895:9:1;;20798:112::o;20915:251::-;20985:6;21038:2;21026:9;21017:7;21013:23;21009:32;21006:52;;;21054:1;21051;21044:12;21006:52;21086:9;21080:16;21105:31;21130:5;21105:31;:::i;22138:306::-;22226:6;22234;22242;22295:2;22283:9;22274:7;22270:23;22266:32;22263:52;;;22311:1;22308;22301:12;22263:52;22340:9;22334:16;22324:26;;22390:2;22379:9;22375:18;22369:25;22359:35;;22434:2;22423:9;22419:18;22413:25;22403:35;;22138:306;;;;;:::o;25547:1026::-;25809:4;25857:3;25846:9;25842:19;25888:6;25877:9;25870:25;25914:2;25952:6;25947:2;25936:9;25932:18;25925:34;25995:3;25990:2;25979:9;25975:18;25968:31;26019:6;26054;26048:13;26085:6;26077;26070:22;26123:3;26112:9;26108:19;26101:26;;26162:2;26154:6;26150:15;26136:29;;26183:1;26193:218;26207:6;26204:1;26201:13;26193:218;;;26272:13;;-1:-1:-1;;;;;26268:62:1;26256:75;;26386:15;;;;26351:12;;;;26229:1;26222:9;26193:218;;;-1:-1:-1;;;;;;;26467:55:1;;;;26462:2;26447:18;;26440:83;-1:-1:-1;;;26554:3:1;26539:19;26532:35;26428:3;25547:1026;-1:-1:-1;;;25547:1026:1:o;28115:245::-;28182:6;28235:2;28223:9;28214:7;28210:23;28206:32;28203:52;;;28251:1;28248;28241:12;28203:52;28283:9;28277:16;28302:28;28324:5;28302:28;:::i

Swarm Source

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