ETH Price: $3,449.34 (+1.51%)
Gas: 11 Gwei

Token

Shiba Crossing ($SHIBAX)
 

Overview

Max Total Supply

1,000,000,000,000,000 $SHIBAX

Holders

151

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,280,915,377,587.978897012 $SHIBAX

Value
$0.00
0x63a560e2929dd0d6f72d342700959ae41b34d004
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ShibaCrossing

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-17
*/

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

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

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

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

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

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

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

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

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

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

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

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

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

interface IFactoryV2 {
    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 IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IRouter01 {
    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);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
}

contract ShibaCrossing is IERC20 {
    // 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 _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;
    uint256 private MAX = ~uint256(0);
    uint256 private _rTotal;

    struct Fees {
        uint16 reflect;
        uint16 liquidity;
        uint16 marketing;
        uint16 totalSwap;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 total;
    }

    Fees public _buyTaxes = Fees({
        reflect: 300,
        liquidity: 300,
        marketing: 600,
        totalSwap: 900
        });

    Fees public _sellTaxes = Fees({
        reflect: 300,
        liquidity: 300,
        marketing: 600,
        totalSwap: 900
        });

    Fees public _transferTaxes = Fees({
        reflect: 300,
        liquidity: 300,
        marketing: 600,
        totalSwap: 900
        });

    Ratios public _ratios = Ratios({
        liquidity: 3,
        marketing: 6,
        total: 9
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address liquidity;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x6F0409A83BF4624933F8A80ADa55fb0Ff4F7a674),
        liquidity: 0x6F0409A83BF4624933F8A80ADa55fb0Ff4F7a674
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    uint256 private _maxTxAmount = 25;
    uint256 private _maxWalletSize = 50;

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

    bool public priceImpactEnabled = false;
    uint256 public piLimit = 600;

    bool contractInitialized = false;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else {
            revert();
        }

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

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

    function intializeContract(address[] memory accounts, uint256[] memory amounts, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "111");
        require(accounts.length == amounts.length, "222");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
            _rTotal = (MAX - (MAX % _tTotal));
        } catch {
            revert("333");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 1) / 10000;
        swapAmount = (_tTotal * 2) / 10000;
        contractInitialized = true;     
        _rOwned[_owner] = _rTotal;
        emit Transfer(address(0), _owner, _tTotal);

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

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _transfer(_owner, accounts[i], 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 renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    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(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) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override 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(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, 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 setNewRouter(address newRouter) public onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_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 > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            if(account != lpPair){
                _excluded.push(account);
            }
        } else if (!enabled) {
            require(_isExcluded[account], "Account is already included.");
            if (account == lpPair) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _tOwned[account] = 0;
                _isExcluded[account] = false;
            } else if(_excluded.length == 1) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _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;
                        _rOwned[account] = _tOwned[account] * _getRate();
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

    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 setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

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

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 300, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        uint16 check = reflect + liquidity + marketing;
        require(check <= maxBuyTaxes);
        _buyTaxes.reflect = reflect;
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.marketing = marketing;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        uint16 check = reflect + liquidity + marketing;
        require(check <= maxSellTaxes);
        _sellTaxes.reflect = reflect;
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.marketing = marketing;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        uint16 check = reflect + liquidity + marketing;
        require(check <= maxTransferTaxes);
        _transferTaxes.reflect = reflect;
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.marketing = marketing;
        _transferTaxes.totalSwap = check - reflect;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = liquidity + marketing;
    }

    function setMaxTxPercent(uint256 percent) external onlyOwner {
        require(percent >= 10, "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = percent;
    }

    function setMaxWalletSize(uint256 percent) external onlyOwner {
        require(percent >= 45, "Max Wallet amt must be above 0.45% of total supply.");
        _maxWalletSize = percent;
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

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

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

    function getMaxTX() public view returns (uint256) {
        return ((getCirculatingSupply() * _maxTxAmount) / 10000) / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return ((getCirculatingSupply() * _maxWalletSize) / 10000) / (10**_decimals);
    }

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

    function setPriceImpactEnabled(bool enabled) external onlyOwner {
        priceImpactEnabled = enabled;
    }

    function setPriceImpactLimit(uint256 limit) external onlyOwner {
        require(limit >= 100);
        piLimit = limit;
    }

    function getMaxPriceImpactSell(uint256 amount) external view onlyOwner returns (uint256) {
        return (((balanceOf(lpPair) / piLimit) / 10000));
    }

    function setWallets(address payable marketing) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
    }

    function setLiquidityReceiver(address account) external onlyOwner {
        require(_taxWallets.liquidity != DEAD && _taxWallets.liquidity != address(0));
        _taxWallets.liquidity = account;
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

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

    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");
        bool buy = false;
        bool sell = false;
        bool otherTransfer = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            otherTransfer = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    if (_maxTxAmount < 10000) {
                        require(amount <= (_maxTxAmount * getCirculatingSupply()) / 10000, "Transfer amount exceeds the maxTxAmount.");
                    }
                }
            }
            if(to != address(dexRouter) && !sell && _maxWalletSize < 10000) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= (_maxWalletSize * getCirculatingSupply()) / 10000, "Transfer amount exceeds the maxWalletSize.");
                }
            }
            if(priceImpactEnabled && sell) {
                uint256 pi = (amount * 10000) / balanceOf(lpPair);
                require(pi < piLimit);
            }
        }

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

        if (sell) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee, buy, sell, otherTransfer);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }

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

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.total) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                _taxWallets.liquidity,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 marketingBalance = amtBalance;
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _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.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

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

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool otherTransfer) 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, buy, sell, otherTransfer);

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

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

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

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

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

        values.rAmount = tAmount * values.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) {
            uint256 currentReflect;
            uint256 currentSwap;
            uint256 divisor = masterTaxDivisor;

            if (sell) {
                currentReflect = _sellTaxes.reflect;
                currentSwap = _sellTaxes.totalSwap;
            } else if (buy) {
                currentReflect = _buyTaxes.reflect;
                currentSwap = _buyTaxes.totalSwap;
            } else {
                currentReflect = _transferTaxes.reflect;
                currentSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentReflect) / divisor;
            values.tSwap = (tAmount * currentSwap) / divisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

            values.rFee = 0;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] += values.tSwap * values.currentRate;
            if(_isExcluded[address(this)]) {
                _tOwned[address(this)] += values.tSwap;
            }
            emit Transfer(from, address(this), values.tSwap);
        }

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(_isExcluded[lpPair]) {
            if (_rOwned[lpPair] > rSupply || _tOwned[lpPair] > tSupply) return _rTotal / _tTotal;
            rSupply -= _rOwned[lpPair];
            tSupply -= _tOwned[lpPair];
        }
        if(_excluded.length > 0) {
            for (uint8 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;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address","name":"liquidity","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","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":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getMaxPriceImpactSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","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":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceImpactEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","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":"setExcludedFromLimits","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":"account","type":"address"}],"name":"setLiquidityReceiver","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"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","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":"enabled","type":"bool"}],"name":"setPriceImpactEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setPriceImpactLimit","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":"_algo","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"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

6000600481905560001960105561012c608081905260a081905261025860c081905261038460e0819052601280546001600160401b03199081166703840258012c012c908117909255610100859052610120859052610140849052610160839052601380548216831790556101808590526101a0949094526101c08390526101e09190915260148054909316179091556003610200526006610220526009610240526015805465ffffffffffff19166409000600031790556102a0604052736f0409a83bf4624933f8a80ada55fb0ff4f7a674610260819052610280819052601880546001600160a01b031990811683179091556019805482169092178255601a805461ff0019169055601b849055601f9190915560326020556021805461ffff60ff60b01b01191690556022919091556023805460ff19169055815433911617905546603814156200017857601680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200022c565b4660611415620001ae57601680546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200022c565b4660011480620001be5750466004145b15620001f057601680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200022c565b4661a86a14156200022757601680546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200022c565b600080fd5b6000546016546200024d916001600160a01b039081169116600019620002eb565b601654620002699030906001600160a01b0316600019620002eb565b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a90925290922080549091169091179055620003ec565b6001600160a01b0383166200033d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200038b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000334565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6156fa80620003fc6000396000f3fe6080604052600436106104185760003560e01c806370a0823111610228578063bcd96a2511610128578063e4fcfd18116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610cbd578063fdb78c0e14610d04578063fe575a8714610d2357600080fd5b8063ee5d9c2d14610c88578063eec2744e14610c9d57600080fd5b8063e4fcfd1814610c12578063ea1644d514610c28578063eafb5a3c14610c48578063eb50e70e14610c6857600080fd5b8063cf847706116100f7578063cf84770614610b36578063d543dbeb14610b8c578063dd62ed3e14610bac578063de3a3b6914610bf257600080fd5b8063bcd96a2514610a7c578063c2fa418f14610a9c578063c6831cd814610ad9578063cab5ebea14610b1657600080fd5b80638a8c523c116101bb578063a750a4f51161018a578063b1b08f711161016f578063b1b08f711461060e578063b3d514fb1461060e578063b57e368214610a5c57600080fd5b8063a750a4f514610a26578063a9059cbb14610a3c57600080fd5b80638a8c523c146109bc57806395d89b41146109d15780639a3c1dfa146109e65780639b56680814610a0657600080fd5b806388f82020116101f757806388f8202014610930578063893d20e8146109695780638965b55d146109875780638a63bd9b146109a757600080fd5b806370a0823114610870578063715018a6146108905780637b45d431146108a557806380c581d11461091057600080fd5b80632d83811911610333578063452ed4f1116102c657806350a8e01611610295578063590ffdce1161027a578063590ffdce146108025780635cce86cd146108225780636ebd00781461085b57600080fd5b806350a8e016146107c357806355d8ece6146107e257600080fd5b8063452ed4f1146107305780634ada218b146107505780634fb2e45d1461076a5780634fbee1931461078a57600080fd5b806333251a0b1161030257806333251a0b1461069c57806334cd8260146106bc57806336fddb04146106dc578063384d3fe5146106fc57600080fd5b80632d838119146106245780632e8fa82114610644578063301c5de81461065a578063313ce5671461067a57600080fd5b806313e46192116103ab5780632610eaca1161037a5780632610eaca146105b957806329dd8798146105d95780632b112e49146105f95780632b28fc7a1461060e57600080fd5b806313e461921461054457806318160ddd146105645780631e90afe31461057957806323b872dd1461059957600080fd5b80630758d924116103e75780630758d924146104bf57806309231602146104df578063095ea7b3146104ff5780630fa604e41461052f57600080fd5b806303fd2a45146104245780630445b6671461045757806305bbedb61461047b57806306fdde031461049d57600080fd5b3661041f57005b600080fd5b34801561043057600080fd5b5061043a61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561046357600080fd5b5061046d601d5481565b60405190815260200161044e565b34801561048757600080fd5b5061049b610496366004614db5565b610d43565b005b3480156104a957600080fd5b506104b2610e1c565b60405161044e9190614e37565b3480156104cb57600080fd5b5060165461043a906001600160a01b031681565b3480156104eb57600080fd5b5061049b6104fa366004614e6a565b610eae565b34801561050b57600080fd5b5061051f61051a366004614e83565b610fce565b604051901515815260200161044e565b34801561053b57600080fd5b5061046d610fe5565b34801561055057600080fd5b5061049b61055f366004614eaf565b61102a565b34801561057057600080fd5b5061046d6114ed565b34801561058557600080fd5b5061049b610594366004614eef565b611506565b3480156105a557600080fd5b5061051f6105b4366004614f32565b611607565b3480156105c557600080fd5b5061049b6105d4366004614fce565b61167f565b3480156105e557600080fd5b5061049b6105f4366004615032565b611784565b34801561060557600080fd5b5061046d61186d565b34801561061a57600080fd5b5061046d6107d081565b34801561063057600080fd5b5061046d61063f366004614e6a565b61189b565b34801561065057600080fd5b5061046d601e5481565b34801561066657600080fd5b5061046d610675366004614e6a565b611932565b34801561068657600080fd5b50600e5460405160ff909116815260200161044e565b3480156106a857600080fd5b5061049b6106b736600461508e565b6119ba565b3480156106c857600080fd5b5061049b6106d73660046150ab565b611a5a565b3480156106e857600080fd5b5061049b6106f7366004614eaf565b611aea565b34801561070857600080fd5b5060215461051f90760100000000000000000000000000000000000000000000900460ff1681565b34801561073c57600080fd5b5060175461043a906001600160a01b031681565b34801561075c57600080fd5b5060215461051f9060ff1681565b34801561077657600080fd5b5061049b61078536600461508e565b611b63565b34801561079657600080fd5b5061051f6107a536600461508e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107cf57600080fd5b5060215461051f90610100900460ff1681565b3480156107ee57600080fd5b5061049b6107fd366004614eef565b611d62565b34801561080e57600080fd5b5061049b61081d366004614eaf565b611e63565b34801561082e57600080fd5b5061051f61083d36600461508e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086757600080fd5b5061046d611edc565b34801561087c57600080fd5b5061046d61088b36600461508e565b611efe565b34801561089c57600080fd5b5061049b611f5d565b3480156108b157600080fd5b506012546108e29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161044e565b34801561091c57600080fd5b5061049b61092b366004614eaf565b61200d565b34801561093c57600080fd5b5061051f61094b36600461508e565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561097557600080fd5b506000546001600160a01b031661043a565b34801561099357600080fd5b5061049b6109a2366004614eef565b6121c9565b3480156109b357600080fd5b5061051f6122ca565b3480156109c857600080fd5b5061049b612339565b3480156109dd57600080fd5b506104b2612529565b3480156109f257600080fd5b5061049b610a013660046150e6565b612538565b348015610a1257600080fd5b5061049b610a21366004614e6a565b6125d2565b348015610a3257600080fd5b5061046d60225481565b348015610a4857600080fd5b5061051f610a57366004614e83565b612633565b348015610a6857600080fd5b5061049b610a7736600461508e565b61264a565b348015610a8857600080fd5b5061049b610a97366004615103565b6126f7565b348015610aa857600080fd5b506014546108e29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ae557600080fd5b506013546108e29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b2257600080fd5b5061049b610b313660046150e6565b612795565b348015610b4257600080fd5b50601554610b679061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161044e565b348015610b9857600080fd5b5061049b610ba7366004614e6a565b612837565b348015610bb857600080fd5b5061046d610bc7366004615136565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610bfe57600080fd5b5061049b610c0d366004615164565b612901565b348015610c1e57600080fd5b5061046d601b5481565b348015610c3457600080fd5b5061049b610c43366004614e6a565b613002565b348015610c5457600080fd5b5061049b610c6336600461508e565b6130cc565b348015610c7457600080fd5b5061049b610c8336600461508e565b61347b565b348015610c9457600080fd5b5061049b6134f8565b348015610ca957600080fd5b5061049b610cb8366004614eaf565b6135db565b348015610cc957600080fd5b50601854601954610ce4916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161044e565b348015610d1057600080fd5b50601a5461051f90610100900460ff1681565b348015610d2f57600080fd5b5061051f610d3e36600461508e565b613683565b6000546001600160a01b03163314610d965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610de69085908590600401615220565b600060405180830381600087803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b505050505050565b6060600c8054610e2b90615244565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5790615244565b8015610ea45780601f10610e7957610100808354040283529160200191610ea4565b820191906000526020600020905b815481529060010190602001808311610e8757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610efc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b61012c811015610f4e5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d8d565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b5050505050565b6000610fdb338484613711565b5060015b92915050565b600e54600090610ff99060ff16600a6153ab565b61271060205461100761186d565b61101191906153ba565b61101b9190615408565b6110259190615408565b905090565b6000546001600160a01b031633146110785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b80156111cd576001600160a01b03821660009081526008602052604090205460ff16156110e75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d8d565b6001600160a01b03821660009081526001602052604090205415611141576001600160a01b0382166000908152600160205260409020546111279061189b565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff19166001179055601754909116146111c957600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b806111c9576001600160a01b03821660009081526008602052604090205460ff1661123a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d8d565b6017546001600160a01b03838116911614156112b55761125861381e565b6001600160a01b03831660009081526002602052604090205461127b91906153ba565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b60095460011415611365576112c861381e565b6001600160a01b0383166000908152600260205260409020546112eb91906153ba565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806113325761133261541c565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156114e857826001600160a01b03166009828154811061138f5761138f61544b565b6000918252602090912001546001600160a01b031614156114d657600980546113ba9060019061547a565b815481106113ca576113ca61544b565b600091825260209091200154600980546001600160a01b0390921691839081106113f6576113f661544b565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591851681526002909152604081205561144261381e565b6001600160a01b03841660009081526002602052604090205461146591906153ba565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806114a2576114a261541c565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806114e081615491565b915050611368565b505050565b6000600f54600014156114ff57600080fd5b50600f5490565b6000546001600160a01b031633146115545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008161156184866154ac565b61156b91906154ac565b90506107d08161ffff16111561158057600080fd5b6014805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff199094169289169290921792909217161790556115c384826154d2565b6014805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461166c576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061166690849061547a565b90915550505b611677848484613a91565b949350505050565b80518251146116d05760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d8d565b60005b82518160ff1610156114e857818160ff16815181106116f4576116f461544b565b602002602001015161170533611efe565b101561171057600080fd5b61177133848360ff16815181106117295761172961544b565b6020908102919091010151600e546117459060ff16600a6153ab565b858560ff168151811061175a5761175a61544b565b602002602001015161176c91906153ba565b613a91565b508061177c816154f5565b9150506116d3565b6000546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b5050505050505050565b60006118796000611efe565b61188461dead611efe565b61188e9190615515565b600f54611025919061547a565b60006011548211156119155760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d8d565b600061191f61381e565b905061192b8184615408565b9392505050565b600080546001600160a01b031633146119815760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b602254601754612710919061199e906001600160a01b0316611efe565b6119a89190615408565b6119b29190615408565b90505b919050565b6000546001600160a01b03163314611a085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f99565b6000546001600160a01b03163314611aa85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b8385600f54611ab791906153ba565b611ac19190615408565b601d55600f548290611ad49085906153ba565b611ade9190615408565b601e55601b5550505050565b6000546001600160a01b03163314611b385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bb15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6001600160a01b038116611c2d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d8d565b6001600160a01b03811661dead1415611cae5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d8d565b60008054611cc7916001600160a01b0390911690611e63565b611cd2816001611e63565b60008054611ce8906001600160a01b0316611efe565b1115611d0a57600054611d08906001600160a01b03168261176c82611efe565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611db05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b600081611dbd84866154ac565b611dc791906154ac565b90506107d08161ffff161115611ddc57600080fd5b6012805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff19909416928916929092179290921716179055611e1f84826154d2565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000546001600160a01b03163314611eb15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600e54600090611ef09060ff16600a6153ab565b612710601f5461100761186d565b6001600160a01b03811660009081526008602052604081205460ff1615611f3b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546119b29061189b565b6000546001600160a01b03163314611fab5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008054611fc4916001600160a01b0390911690611e63565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461205b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b806120e7576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e0057600080fd5b6004541561214e576203f48060045442612101919061547a565b1161214e5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d8d565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610de6565b6000546001600160a01b031633146122175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008161222484866154ac565b61222e91906154ac565b90506107d08161ffff16111561224357600080fd5b6013805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff1990941692891692909217929092171617905561228684826154d2565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b031633146123195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6016546123339030906001600160a01b0316600019613711565b50600190565b6000546001600160a01b031633146123875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60215460ff16156123da5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d8d565b602154610100900460ff166124315760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d8d565b6021546201000090046001600160a01b031661247757602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601754600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561250857600080fd5b505af1925050508015612519575060015b506021805460ff19166001179055565b6060600d8054610e2b90615244565b6000546001600160a01b031633146125865760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60218054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146126205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b606481101561262e57600080fd5b602255565b6000612640338484613a91565b5060019392505050565b6000546001600160a01b031633146126985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6019546001600160a01b031661dead148015906126bf57506019546001600160a01b031615155b6126c857600080fd5b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146127455760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6015805461ffff838116620100000263ffffffff199092169085161717905561276e81836154ac565b6015805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b031633146127e35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061282c90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146128855760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b600a8110156128fc5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d8d565b601f55565b6000546001600160a01b0316331461294f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60235460ff16156129a25760405162461bcd60e51b815260206004820152600360248201527f31313100000000000000000000000000000000000000000000000000000000006044820152606401610d8d565b81518351146129f35760405162461bcd60e51b815260206004820152600360248201527f32323200000000000000000000000000000000000000000000000000000000006044820152606401610d8d565b602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612a8557600080fd5b505af1925050508015612a96575060015b50602160029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612b0b57506040513d6000823e601f3d908101601f19168201604052612b089190810190615591565b60015b612b575760405162461bcd60e51b815260206004820152600360248201527f33333300000000000000000000000000000000000000000000000000000000006044820152606401610d8d565b8351612b6a90600c906020870190614c01565b508251612b7e90600d906020860190614c01565b50600b829055600e805460ff191660ff8316908117909155612ba190600a6153ab565b600b54612bae91906153ba565b600f819055601054612bc0919061560c565b601054612bcd919061547a565b60115550505050601660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4b9190615620565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd09190615620565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d589190615620565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001908117909155600f5461271091612db191906153ba565b612dbb9190615408565b601d55600f5461271090612dd09060026153ba565b612dda9190615408565b601e556023805460ff19166001908117909155601154600080546001600160a01b03908116825260209384526040808320939093558154600f549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600054601654612e67916001600160a01b039081169116600019613711565b601654612e819030906001600160a01b0316600019613711565b60005b8351811015612f1357600e54600090612ea19060ff16600a6153ab565b848381518110612eb357612eb361544b565b6020026020010151612ec591906153ba565b9050612efe60008054906101000a90046001600160a01b0316868481518110612ef057612ef061544b565b602002602001015183613a91565b50508080612f0b90615491565b915050612e84565b50600054612f2e906001600160a01b03163061176c82611efe565b506016546001600160a01b031663f305d7194730612f4b81611efe565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015612fd2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff7919061563d565b5050506114e8612339565b6000546001600160a01b031633146130505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b602d8110156130c75760405162461bcd60e51b815260206004820152603360248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3460448201527f3525206f6620746f74616c20737570706c792e000000000000000000000000006064820152608401610d8d565b602055565b6000546001600160a01b0316331461311a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131839190615620565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f49190615620565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327b9190615620565b90506001600160a01b03811661341957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ed9190615620565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e9190615620565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156133c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e79190615620565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613442565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556114e8903090600019613711565b6000546001600160a01b031633146134c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146135465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b602154610100900460ff161561359e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d8d565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156135d8573d6000803e3d6000fd5b50565b6000546001600160a01b031633146136295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610de6565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156136ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b2919061566b565b6001600160a01b0383166137675760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d8d565b6001600160a01b0382166137bd5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d8d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601154600f546017546001600160a01b03166000908152600860205260408120549092919060ff16156138f8576017546001600160a01b031660009081526001602052604090205482108061388c57506017546001600160a01b031660009081526002602052604090205481105b156138a857600f546011546138a19190615408565b9250505090565b6017546001600160a01b03166000908152600160205260409020546138cd908361547a565b6017546001600160a01b03166000908152600260205260409020549092506138f5908261547a565b90505b60095415613a605760005b60095460ff82161015613a5e57826001600060098460ff168154811061392b5761392b61544b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139995750816002600060098460ff16815481106139725761397261544b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139b657600f546011546139ae9190615408565b935050505090565b6001600060098360ff16815481106139d0576139d061544b565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139ff908461547a565b92506002600060098360ff1681548110613a1b57613a1b61544b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a4a908361547a565b915080613a56816154f5565b915050613903565b505b600f54601154613a709190615408565b821015613a8757600f546011546138a19190615408565b6138a18183615408565b60006001600160a01b038416613b0f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d8d565b6001600160a01b038316613b8b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d8d565b60008211613c015760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d8d565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613c2f5760019250613c5d565b6001600160a01b03861660009081526003602052604090205460ff1615613c595760019150613c5d565b5060015b613c678787613ff4565b15613f1e5760215460ff16613cbe5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d8d565b8280613cc75750815b15613db6576001600160a01b03871660009081526007602052604090205460ff16158015613d0e57506001600160a01b03861660009081526007602052604090205460ff16155b15613db657612710601f541015613db657612710613d2a61186d565b601f54613d3791906153ba565b613d419190615408565b851115613db65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d8d565b6016546001600160a01b03878116911614801590613dd2575081155b8015613de15750612710602054105b15613eb0576001600160a01b03861660009081526007602052604090205460ff16613eb057612710613e1161186d565b602054613e1e91906153ba565b613e289190615408565b85613e3288611efe565b613e3c9190615515565b1115613eb05760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d8d565b602154760100000000000000000000000000000000000000000000900460ff168015613ed95750815b15613f1e57601754600090613ef6906001600160a01b0316611efe565b613f02876127106153ba565b613f0c9190615408565b90506022548110613f1c57600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613f6057506001600160a01b03871660009081526006602052604090205460ff165b15613f69575060005b8215613fd957601a5460ff16158015613f895750601a54610100900460ff165b15613fd95742601b54601c54613f9f9190615515565b1015613fd9576000613fb030611efe565b9050601d548110613fd757601e548110613fc95750601e545b613fd2816140c8565b42601c555b505b613fe8888888848888886144ba565b98975050505050505050565b600080546001600160a01b0384811691161480159061402157506000546001600160a01b03838116911614155b801561403857506000546001600160a01b03163214155b801561405d57506001600160a01b0382166000908152600a602052604090205460ff16155b801561408257506001600160a01b0383166000908152600a602052604090205460ff16155b801561409957506001600160a01b03821661dead14155b80156140ad57506001600160a01b03821615155b801561192b57506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160608101825260155461ffff808216835262010000820481166020840152640100000000909104169181018290529061411257506144ad565b3060009081526005602090815260408083206016546001600160a01b031684529091529020546000191461416b573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff168561418c91906153ba565b6141969190615408565b6141a09190615408565b905060006141ae828561547a565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106141e8576141e861544b565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561425a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427e9190615620565b816001815181106142915761429161544b565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906142f0908590600090869030904290600401615688565b600060405180830381600087803b15801561430a57600080fd5b505af115801561431e573d6000803e3d6000fd5b504792506000915084905061433386846153ba565b61433d9190615408565b90508415614430576016546019546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156143ce573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143f3919061563d565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61443a818361547a565b915085600001518660400181815161445291906154d2565b61ffff908116909152602088015184925016156144a5576018546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156144a3573d6000803e3d6000fd5b505b505050505050505b50601a805460ff19169055565b602154600090610100900460ff16614566576144d68888614734565b602154610100900460ff161580156144f357506144f38888613ff4565b156145665760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d8d565b600061457789898989898989614892565b60808101516001600160a01b038b166000908152600160205260408120805493945091926145a690849061547a565b909155505060608101516001600160a01b038916600090815260016020526040812080549091906145d8908490615515565b90915550506001600160a01b03891660009081526008602052604090205460ff161561463c576001600160a01b03891660009081526002602052604090205461462290889061547a565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff161561469c5780516001600160a01b0389166000908152600260205260409020546146829190615515565b6001600160a01b0389166000908152600260205260409020555b60008160a0015111806146b3575060008160200151115b156146d4578060a00151601160008282546146ce919061547a565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161471d91815260200190565b60405180910390a350600198975050505050505050565b602154610100900460ff16156147b25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d8d565b6147bc8282613ff4565b1580156147d657506017546001600160a01b038281169116145b156111c9576001600160a01b038083166000908152600a60205260409020805460ff191660011790556021805461ff00191661010017908190556201000090041661484b57602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6148d26040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149126040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61491a61381e565b60c0820181905261492b90886153ba565b608082015261493a8989613ff4565b156149ed576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156149d6575060408051601f3d908101601f191682019092526149d39181019061566b565b60015b6149df57600080fd5b9050806149eb57600080fd5b505b8515614ace576000806127108615614a1d5760135461ffff80821694506601000000000000909104169150614a5b565b8715614a415760125461ffff80821694506601000000000000909104169150614a5b565b60145461ffff808216945066010000000000009091041691505b80614a66848c6153ba565b614a709190615408565b602085015280614a80838c6153ba565b614a8a9190615408565b604085018190526020850151614aa09190615515565b614aaa908b61547a565b845260c08401516020850151614ac091906153ba565b60a085015250614ae7915050565b6000602082018190526040820181905287825260a08201525b604081015115614bbe578060c001518160400151614b0591906153ba565b3060009081526001602052604081208054909190614b24908490615515565b90915550503060009081526008602052604090205460ff1615614b6c576040808201513060009081526002602052918220805491929091614b66908490615515565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614bb591815260200190565b60405180910390a35b8060c001518160400151614bd291906153ba565b8160a00151614be19190615515565b8160800151614bf0919061547a565b606082015298975050505050505050565b828054614c0d90615244565b90600052602060002090601f016020900481019282614c2f5760008555614c75565b82601f10614c4857805160ff1916838001178555614c75565b82800160010185558215614c75579182015b82811115614c75578251825591602001919060010190614c5a565b50614c81929150614c85565b5090565b5b80821115614c815760008155600101614c86565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614cf257614cf2614c9a565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c9a565b5060051b60200190565b6001600160a01b03811681146135d857600080fd5b600082601f830112614d4457600080fd5b81356020614d59614d5483614cfa565b614cc9565b82815260059290921b84018101918181019086841115614d7857600080fd5b8286015b84811015614d9c578035614d8f81614d1e565b8352918301918301614d7c565b509695505050505050565b80151581146135d857600080fd5b60008060408385031215614dc857600080fd5b823567ffffffffffffffff811115614ddf57600080fd5b614deb85828601614d33565b9250506020830135614dfc81614da7565b809150509250929050565b60005b83811015614e22578181015183820152602001614e0a565b83811115614e31576000848401525b50505050565b6020815260008251806020840152614e56816040850160208701614e07565b601f01601f19169190910160400192915050565b600060208284031215614e7c57600080fd5b5035919050565b60008060408385031215614e9657600080fd5b8235614ea181614d1e565b946020939093013593505050565b60008060408385031215614ec257600080fd5b8235614ecd81614d1e565b91506020830135614dfc81614da7565b803561ffff811681146119b557600080fd5b600080600060608486031215614f0457600080fd5b614f0d84614edd565b9250614f1b60208501614edd565b9150614f2960408501614edd565b90509250925092565b600080600060608486031215614f4757600080fd5b8335614f5281614d1e565b92506020840135614f6281614d1e565b929592945050506040919091013590565b600082601f830112614f8457600080fd5b81356020614f94614d5483614cfa565b82815260059290921b84018101918181019086841115614fb357600080fd5b8286015b84811015614d9c5780358352918301918301614fb7565b60008060408385031215614fe157600080fd5b823567ffffffffffffffff80821115614ff957600080fd5b61500586838701614d33565b9350602085013591508082111561501b57600080fd5b5061502885828601614f73565b9150509250929050565b6000806000806080858703121561504857600080fd5b843561505381614da7565b9350602085013561506381614da7565b9250604085013561507381614da7565b9150606085013561508381614da7565b939692955090935050565b6000602082840312156150a057600080fd5b813561192b81614d1e565b600080600080600060a086880312156150c357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000602082840312156150f857600080fd5b813561192b81614da7565b6000806040838503121561511657600080fd5b61511f83614edd565b915061512d60208401614edd565b90509250929050565b6000806040838503121561514957600080fd5b823561515481614d1e565b91506020830135614dfc81614d1e565b60008060006060848603121561517957600080fd5b833567ffffffffffffffff8082111561519157600080fd5b61519d87838801614d33565b945060208601359150808211156151b357600080fd5b506151c086828701614f73565b92505060408401356151d181614d1e565b809150509250925092565b600081518084526020808501945080840160005b838110156152155781516001600160a01b0316875295820195908201906001016151f0565b509495945050505050565b60408152600061523360408301856151dc565b905082151560208301529392505050565b600181811c9082168061525857607f821691505b60208210811415615292577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156153025781600019048211156152e8576152e8615298565b808516156152f557918102915b93841c93908002906152cc565b509250929050565b60008261531957506001610fdf565b8161532657506000610fdf565b816001811461533c576002811461534657615362565b6001915050610fdf565b60ff84111561535757615357615298565b50506001821b610fdf565b5060208310610133831016604e8410600b8410161715615385575081810a610fdf565b61538f83836152c7565b80600019048211156153a3576153a3615298565b029392505050565b600061192b60ff84168361530a565b60008160001904831182151516156153d4576153d4615298565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615417576154176153d9565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561548c5761548c615298565b500390565b60006000198214156154a5576154a5615298565b5060010190565b600061ffff8083168185168083038211156154c9576154c9615298565b01949350505050565b600061ffff838116908316818110156154ed576154ed615298565b039392505050565b600060ff821660ff81141561550c5761550c615298565b60010192915050565b6000821982111561552857615528615298565b500190565b600082601f83011261553e57600080fd5b815167ffffffffffffffff81111561555857615558614c9a565b61556b6020601f19601f84011601614cc9565b81815284602083860101111561558057600080fd5b611677826020830160208701614e07565b600080600080608085870312156155a757600080fd5b845167ffffffffffffffff808211156155bf57600080fd5b6155cb8883890161552d565b955060208701519150808211156155e157600080fd5b506155ee8782880161552d565b93505060408501519150606085015160ff8116811461508357600080fd5b60008261561b5761561b6153d9565b500690565b60006020828403121561563257600080fd5b815161192b81614d1e565b60008060006060848603121561565257600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561567d57600080fd5b815161192b81614da7565b85815284602082015260a0604082015260006156a760a08301866151dc565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212205510e3d6923f602000cf9de6d4f8803fbd8c6c2dfaecd58c8643f3ad1b498c7364736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106104185760003560e01c806370a0823111610228578063bcd96a2511610128578063e4fcfd18116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610cbd578063fdb78c0e14610d04578063fe575a8714610d2357600080fd5b8063ee5d9c2d14610c88578063eec2744e14610c9d57600080fd5b8063e4fcfd1814610c12578063ea1644d514610c28578063eafb5a3c14610c48578063eb50e70e14610c6857600080fd5b8063cf847706116100f7578063cf84770614610b36578063d543dbeb14610b8c578063dd62ed3e14610bac578063de3a3b6914610bf257600080fd5b8063bcd96a2514610a7c578063c2fa418f14610a9c578063c6831cd814610ad9578063cab5ebea14610b1657600080fd5b80638a8c523c116101bb578063a750a4f51161018a578063b1b08f711161016f578063b1b08f711461060e578063b3d514fb1461060e578063b57e368214610a5c57600080fd5b8063a750a4f514610a26578063a9059cbb14610a3c57600080fd5b80638a8c523c146109bc57806395d89b41146109d15780639a3c1dfa146109e65780639b56680814610a0657600080fd5b806388f82020116101f757806388f8202014610930578063893d20e8146109695780638965b55d146109875780638a63bd9b146109a757600080fd5b806370a0823114610870578063715018a6146108905780637b45d431146108a557806380c581d11461091057600080fd5b80632d83811911610333578063452ed4f1116102c657806350a8e01611610295578063590ffdce1161027a578063590ffdce146108025780635cce86cd146108225780636ebd00781461085b57600080fd5b806350a8e016146107c357806355d8ece6146107e257600080fd5b8063452ed4f1146107305780634ada218b146107505780634fb2e45d1461076a5780634fbee1931461078a57600080fd5b806333251a0b1161030257806333251a0b1461069c57806334cd8260146106bc57806336fddb04146106dc578063384d3fe5146106fc57600080fd5b80632d838119146106245780632e8fa82114610644578063301c5de81461065a578063313ce5671461067a57600080fd5b806313e46192116103ab5780632610eaca1161037a5780632610eaca146105b957806329dd8798146105d95780632b112e49146105f95780632b28fc7a1461060e57600080fd5b806313e461921461054457806318160ddd146105645780631e90afe31461057957806323b872dd1461059957600080fd5b80630758d924116103e75780630758d924146104bf57806309231602146104df578063095ea7b3146104ff5780630fa604e41461052f57600080fd5b806303fd2a45146104245780630445b6671461045757806305bbedb61461047b57806306fdde031461049d57600080fd5b3661041f57005b600080fd5b34801561043057600080fd5b5061043a61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561046357600080fd5b5061046d601d5481565b60405190815260200161044e565b34801561048757600080fd5b5061049b610496366004614db5565b610d43565b005b3480156104a957600080fd5b506104b2610e1c565b60405161044e9190614e37565b3480156104cb57600080fd5b5060165461043a906001600160a01b031681565b3480156104eb57600080fd5b5061049b6104fa366004614e6a565b610eae565b34801561050b57600080fd5b5061051f61051a366004614e83565b610fce565b604051901515815260200161044e565b34801561053b57600080fd5b5061046d610fe5565b34801561055057600080fd5b5061049b61055f366004614eaf565b61102a565b34801561057057600080fd5b5061046d6114ed565b34801561058557600080fd5b5061049b610594366004614eef565b611506565b3480156105a557600080fd5b5061051f6105b4366004614f32565b611607565b3480156105c557600080fd5b5061049b6105d4366004614fce565b61167f565b3480156105e557600080fd5b5061049b6105f4366004615032565b611784565b34801561060557600080fd5b5061046d61186d565b34801561061a57600080fd5b5061046d6107d081565b34801561063057600080fd5b5061046d61063f366004614e6a565b61189b565b34801561065057600080fd5b5061046d601e5481565b34801561066657600080fd5b5061046d610675366004614e6a565b611932565b34801561068657600080fd5b50600e5460405160ff909116815260200161044e565b3480156106a857600080fd5b5061049b6106b736600461508e565b6119ba565b3480156106c857600080fd5b5061049b6106d73660046150ab565b611a5a565b3480156106e857600080fd5b5061049b6106f7366004614eaf565b611aea565b34801561070857600080fd5b5060215461051f90760100000000000000000000000000000000000000000000900460ff1681565b34801561073c57600080fd5b5060175461043a906001600160a01b031681565b34801561075c57600080fd5b5060215461051f9060ff1681565b34801561077657600080fd5b5061049b61078536600461508e565b611b63565b34801561079657600080fd5b5061051f6107a536600461508e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107cf57600080fd5b5060215461051f90610100900460ff1681565b3480156107ee57600080fd5b5061049b6107fd366004614eef565b611d62565b34801561080e57600080fd5b5061049b61081d366004614eaf565b611e63565b34801561082e57600080fd5b5061051f61083d36600461508e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086757600080fd5b5061046d611edc565b34801561087c57600080fd5b5061046d61088b36600461508e565b611efe565b34801561089c57600080fd5b5061049b611f5d565b3480156108b157600080fd5b506012546108e29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161044e565b34801561091c57600080fd5b5061049b61092b366004614eaf565b61200d565b34801561093c57600080fd5b5061051f61094b36600461508e565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561097557600080fd5b506000546001600160a01b031661043a565b34801561099357600080fd5b5061049b6109a2366004614eef565b6121c9565b3480156109b357600080fd5b5061051f6122ca565b3480156109c857600080fd5b5061049b612339565b3480156109dd57600080fd5b506104b2612529565b3480156109f257600080fd5b5061049b610a013660046150e6565b612538565b348015610a1257600080fd5b5061049b610a21366004614e6a565b6125d2565b348015610a3257600080fd5b5061046d60225481565b348015610a4857600080fd5b5061051f610a57366004614e83565b612633565b348015610a6857600080fd5b5061049b610a7736600461508e565b61264a565b348015610a8857600080fd5b5061049b610a97366004615103565b6126f7565b348015610aa857600080fd5b506014546108e29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ae557600080fd5b506013546108e29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b2257600080fd5b5061049b610b313660046150e6565b612795565b348015610b4257600080fd5b50601554610b679061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161044e565b348015610b9857600080fd5b5061049b610ba7366004614e6a565b612837565b348015610bb857600080fd5b5061046d610bc7366004615136565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610bfe57600080fd5b5061049b610c0d366004615164565b612901565b348015610c1e57600080fd5b5061046d601b5481565b348015610c3457600080fd5b5061049b610c43366004614e6a565b613002565b348015610c5457600080fd5b5061049b610c6336600461508e565b6130cc565b348015610c7457600080fd5b5061049b610c8336600461508e565b61347b565b348015610c9457600080fd5b5061049b6134f8565b348015610ca957600080fd5b5061049b610cb8366004614eaf565b6135db565b348015610cc957600080fd5b50601854601954610ce4916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161044e565b348015610d1057600080fd5b50601a5461051f90610100900460ff1681565b348015610d2f57600080fd5b5061051f610d3e36600461508e565b613683565b6000546001600160a01b03163314610d965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610de69085908590600401615220565b600060405180830381600087803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b505050505050565b6060600c8054610e2b90615244565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5790615244565b8015610ea45780601f10610e7957610100808354040283529160200191610ea4565b820191906000526020600020905b815481529060010190602001808311610e8757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610efc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b61012c811015610f4e5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d8d565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b5050505050565b6000610fdb338484613711565b5060015b92915050565b600e54600090610ff99060ff16600a6153ab565b61271060205461100761186d565b61101191906153ba565b61101b9190615408565b6110259190615408565b905090565b6000546001600160a01b031633146110785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b80156111cd576001600160a01b03821660009081526008602052604090205460ff16156110e75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d8d565b6001600160a01b03821660009081526001602052604090205415611141576001600160a01b0382166000908152600160205260409020546111279061189b565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff19166001179055601754909116146111c957600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b806111c9576001600160a01b03821660009081526008602052604090205460ff1661123a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d8d565b6017546001600160a01b03838116911614156112b55761125861381e565b6001600160a01b03831660009081526002602052604090205461127b91906153ba565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b60095460011415611365576112c861381e565b6001600160a01b0383166000908152600260205260409020546112eb91906153ba565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806113325761133261541c565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156114e857826001600160a01b03166009828154811061138f5761138f61544b565b6000918252602090912001546001600160a01b031614156114d657600980546113ba9060019061547a565b815481106113ca576113ca61544b565b600091825260209091200154600980546001600160a01b0390921691839081106113f6576113f661544b565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591851681526002909152604081205561144261381e565b6001600160a01b03841660009081526002602052604090205461146591906153ba565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806114a2576114a261541c565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806114e081615491565b915050611368565b505050565b6000600f54600014156114ff57600080fd5b50600f5490565b6000546001600160a01b031633146115545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008161156184866154ac565b61156b91906154ac565b90506107d08161ffff16111561158057600080fd5b6014805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff199094169289169290921792909217161790556115c384826154d2565b6014805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461166c576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061166690849061547a565b90915550505b611677848484613a91565b949350505050565b80518251146116d05760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d8d565b60005b82518160ff1610156114e857818160ff16815181106116f4576116f461544b565b602002602001015161170533611efe565b101561171057600080fd5b61177133848360ff16815181106117295761172961544b565b6020908102919091010151600e546117459060ff16600a6153ab565b858560ff168151811061175a5761175a61544b565b602002602001015161176c91906153ba565b613a91565b508061177c816154f5565b9150506116d3565b6000546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b5050505050505050565b60006118796000611efe565b61188461dead611efe565b61188e9190615515565b600f54611025919061547a565b60006011548211156119155760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d8d565b600061191f61381e565b905061192b8184615408565b9392505050565b600080546001600160a01b031633146119815760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b602254601754612710919061199e906001600160a01b0316611efe565b6119a89190615408565b6119b29190615408565b90505b919050565b6000546001600160a01b03163314611a085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f99565b6000546001600160a01b03163314611aa85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b8385600f54611ab791906153ba565b611ac19190615408565b601d55600f548290611ad49085906153ba565b611ade9190615408565b601e55601b5550505050565b6000546001600160a01b03163314611b385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bb15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6001600160a01b038116611c2d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d8d565b6001600160a01b03811661dead1415611cae5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d8d565b60008054611cc7916001600160a01b0390911690611e63565b611cd2816001611e63565b60008054611ce8906001600160a01b0316611efe565b1115611d0a57600054611d08906001600160a01b03168261176c82611efe565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611db05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b600081611dbd84866154ac565b611dc791906154ac565b90506107d08161ffff161115611ddc57600080fd5b6012805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff19909416928916929092179290921716179055611e1f84826154d2565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000546001600160a01b03163314611eb15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600e54600090611ef09060ff16600a6153ab565b612710601f5461100761186d565b6001600160a01b03811660009081526008602052604081205460ff1615611f3b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546119b29061189b565b6000546001600160a01b03163314611fab5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008054611fc4916001600160a01b0390911690611e63565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461205b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b806120e7576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e0057600080fd5b6004541561214e576203f48060045442612101919061547a565b1161214e5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d8d565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610de6565b6000546001600160a01b031633146122175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008161222484866154ac565b61222e91906154ac565b90506107d08161ffff16111561224357600080fd5b6013805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff1990941692891692909217929092171617905561228684826154d2565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b031633146123195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6016546123339030906001600160a01b0316600019613711565b50600190565b6000546001600160a01b031633146123875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60215460ff16156123da5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d8d565b602154610100900460ff166124315760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d8d565b6021546201000090046001600160a01b031661247757602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601754600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561250857600080fd5b505af1925050508015612519575060015b506021805460ff19166001179055565b6060600d8054610e2b90615244565b6000546001600160a01b031633146125865760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60218054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146126205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b606481101561262e57600080fd5b602255565b6000612640338484613a91565b5060019392505050565b6000546001600160a01b031633146126985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6019546001600160a01b031661dead148015906126bf57506019546001600160a01b031615155b6126c857600080fd5b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146127455760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6015805461ffff838116620100000263ffffffff199092169085161717905561276e81836154ac565b6015805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b031633146127e35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061282c90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146128855760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b600a8110156128fc5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d8d565b601f55565b6000546001600160a01b0316331461294f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60235460ff16156129a25760405162461bcd60e51b815260206004820152600360248201527f31313100000000000000000000000000000000000000000000000000000000006044820152606401610d8d565b81518351146129f35760405162461bcd60e51b815260206004820152600360248201527f32323200000000000000000000000000000000000000000000000000000000006044820152606401610d8d565b602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612a8557600080fd5b505af1925050508015612a96575060015b50602160029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612b0b57506040513d6000823e601f3d908101601f19168201604052612b089190810190615591565b60015b612b575760405162461bcd60e51b815260206004820152600360248201527f33333300000000000000000000000000000000000000000000000000000000006044820152606401610d8d565b8351612b6a90600c906020870190614c01565b508251612b7e90600d906020860190614c01565b50600b829055600e805460ff191660ff8316908117909155612ba190600a6153ab565b600b54612bae91906153ba565b600f819055601054612bc0919061560c565b601054612bcd919061547a565b60115550505050601660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4b9190615620565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd09190615620565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d589190615620565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001908117909155600f5461271091612db191906153ba565b612dbb9190615408565b601d55600f5461271090612dd09060026153ba565b612dda9190615408565b601e556023805460ff19166001908117909155601154600080546001600160a01b03908116825260209384526040808320939093558154600f549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600054601654612e67916001600160a01b039081169116600019613711565b601654612e819030906001600160a01b0316600019613711565b60005b8351811015612f1357600e54600090612ea19060ff16600a6153ab565b848381518110612eb357612eb361544b565b6020026020010151612ec591906153ba565b9050612efe60008054906101000a90046001600160a01b0316868481518110612ef057612ef061544b565b602002602001015183613a91565b50508080612f0b90615491565b915050612e84565b50600054612f2e906001600160a01b03163061176c82611efe565b506016546001600160a01b031663f305d7194730612f4b81611efe565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015612fd2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff7919061563d565b5050506114e8612339565b6000546001600160a01b031633146130505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b602d8110156130c75760405162461bcd60e51b815260206004820152603360248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3460448201527f3525206f6620746f74616c20737570706c792e000000000000000000000000006064820152608401610d8d565b602055565b6000546001600160a01b0316331461311a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131839190615620565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f49190615620565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327b9190615620565b90506001600160a01b03811661341957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ed9190615620565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e9190615620565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156133c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e79190615620565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613442565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556114e8903090600019613711565b6000546001600160a01b031633146134c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146135465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b602154610100900460ff161561359e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d8d565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156135d8573d6000803e3d6000fd5b50565b6000546001600160a01b031633146136295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d8d565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610de6565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156136ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b2919061566b565b6001600160a01b0383166137675760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d8d565b6001600160a01b0382166137bd5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d8d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601154600f546017546001600160a01b03166000908152600860205260408120549092919060ff16156138f8576017546001600160a01b031660009081526001602052604090205482108061388c57506017546001600160a01b031660009081526002602052604090205481105b156138a857600f546011546138a19190615408565b9250505090565b6017546001600160a01b03166000908152600160205260409020546138cd908361547a565b6017546001600160a01b03166000908152600260205260409020549092506138f5908261547a565b90505b60095415613a605760005b60095460ff82161015613a5e57826001600060098460ff168154811061392b5761392b61544b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139995750816002600060098460ff16815481106139725761397261544b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139b657600f546011546139ae9190615408565b935050505090565b6001600060098360ff16815481106139d0576139d061544b565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139ff908461547a565b92506002600060098360ff1681548110613a1b57613a1b61544b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a4a908361547a565b915080613a56816154f5565b915050613903565b505b600f54601154613a709190615408565b821015613a8757600f546011546138a19190615408565b6138a18183615408565b60006001600160a01b038416613b0f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d8d565b6001600160a01b038316613b8b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d8d565b60008211613c015760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d8d565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613c2f5760019250613c5d565b6001600160a01b03861660009081526003602052604090205460ff1615613c595760019150613c5d565b5060015b613c678787613ff4565b15613f1e5760215460ff16613cbe5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d8d565b8280613cc75750815b15613db6576001600160a01b03871660009081526007602052604090205460ff16158015613d0e57506001600160a01b03861660009081526007602052604090205460ff16155b15613db657612710601f541015613db657612710613d2a61186d565b601f54613d3791906153ba565b613d419190615408565b851115613db65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d8d565b6016546001600160a01b03878116911614801590613dd2575081155b8015613de15750612710602054105b15613eb0576001600160a01b03861660009081526007602052604090205460ff16613eb057612710613e1161186d565b602054613e1e91906153ba565b613e289190615408565b85613e3288611efe565b613e3c9190615515565b1115613eb05760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d8d565b602154760100000000000000000000000000000000000000000000900460ff168015613ed95750815b15613f1e57601754600090613ef6906001600160a01b0316611efe565b613f02876127106153ba565b613f0c9190615408565b90506022548110613f1c57600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613f6057506001600160a01b03871660009081526006602052604090205460ff165b15613f69575060005b8215613fd957601a5460ff16158015613f895750601a54610100900460ff165b15613fd95742601b54601c54613f9f9190615515565b1015613fd9576000613fb030611efe565b9050601d548110613fd757601e548110613fc95750601e545b613fd2816140c8565b42601c555b505b613fe8888888848888886144ba565b98975050505050505050565b600080546001600160a01b0384811691161480159061402157506000546001600160a01b03838116911614155b801561403857506000546001600160a01b03163214155b801561405d57506001600160a01b0382166000908152600a602052604090205460ff16155b801561408257506001600160a01b0383166000908152600a602052604090205460ff16155b801561409957506001600160a01b03821661dead14155b80156140ad57506001600160a01b03821615155b801561192b57506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160608101825260155461ffff808216835262010000820481166020840152640100000000909104169181018290529061411257506144ad565b3060009081526005602090815260408083206016546001600160a01b031684529091529020546000191461416b573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff168561418c91906153ba565b6141969190615408565b6141a09190615408565b905060006141ae828561547a565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106141e8576141e861544b565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561425a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427e9190615620565b816001815181106142915761429161544b565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906142f0908590600090869030904290600401615688565b600060405180830381600087803b15801561430a57600080fd5b505af115801561431e573d6000803e3d6000fd5b504792506000915084905061433386846153ba565b61433d9190615408565b90508415614430576016546019546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156143ce573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143f3919061563d565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61443a818361547a565b915085600001518660400181815161445291906154d2565b61ffff908116909152602088015184925016156144a5576018546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156144a3573d6000803e3d6000fd5b505b505050505050505b50601a805460ff19169055565b602154600090610100900460ff16614566576144d68888614734565b602154610100900460ff161580156144f357506144f38888613ff4565b156145665760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d8d565b600061457789898989898989614892565b60808101516001600160a01b038b166000908152600160205260408120805493945091926145a690849061547a565b909155505060608101516001600160a01b038916600090815260016020526040812080549091906145d8908490615515565b90915550506001600160a01b03891660009081526008602052604090205460ff161561463c576001600160a01b03891660009081526002602052604090205461462290889061547a565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff161561469c5780516001600160a01b0389166000908152600260205260409020546146829190615515565b6001600160a01b0389166000908152600260205260409020555b60008160a0015111806146b3575060008160200151115b156146d4578060a00151601160008282546146ce919061547a565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161471d91815260200190565b60405180910390a350600198975050505050505050565b602154610100900460ff16156147b25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d8d565b6147bc8282613ff4565b1580156147d657506017546001600160a01b038281169116145b156111c9576001600160a01b038083166000908152600a60205260409020805460ff191660011790556021805461ff00191661010017908190556201000090041661484b57602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6148d26040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149126040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61491a61381e565b60c0820181905261492b90886153ba565b608082015261493a8989613ff4565b156149ed576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156149d6575060408051601f3d908101601f191682019092526149d39181019061566b565b60015b6149df57600080fd5b9050806149eb57600080fd5b505b8515614ace576000806127108615614a1d5760135461ffff80821694506601000000000000909104169150614a5b565b8715614a415760125461ffff80821694506601000000000000909104169150614a5b565b60145461ffff808216945066010000000000009091041691505b80614a66848c6153ba565b614a709190615408565b602085015280614a80838c6153ba565b614a8a9190615408565b604085018190526020850151614aa09190615515565b614aaa908b61547a565b845260c08401516020850151614ac091906153ba565b60a085015250614ae7915050565b6000602082018190526040820181905287825260a08201525b604081015115614bbe578060c001518160400151614b0591906153ba565b3060009081526001602052604081208054909190614b24908490615515565b90915550503060009081526008602052604090205460ff1615614b6c576040808201513060009081526002602052918220805491929091614b66908490615515565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614bb591815260200190565b60405180910390a35b8060c001518160400151614bd291906153ba565b8160a00151614be19190615515565b8160800151614bf0919061547a565b606082015298975050505050505050565b828054614c0d90615244565b90600052602060002090601f016020900481019282614c2f5760008555614c75565b82601f10614c4857805160ff1916838001178555614c75565b82800160010185558215614c75579182015b82811115614c75578251825591602001919060010190614c5a565b50614c81929150614c85565b5090565b5b80821115614c815760008155600101614c86565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614cf257614cf2614c9a565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c9a565b5060051b60200190565b6001600160a01b03811681146135d857600080fd5b600082601f830112614d4457600080fd5b81356020614d59614d5483614cfa565b614cc9565b82815260059290921b84018101918181019086841115614d7857600080fd5b8286015b84811015614d9c578035614d8f81614d1e565b8352918301918301614d7c565b509695505050505050565b80151581146135d857600080fd5b60008060408385031215614dc857600080fd5b823567ffffffffffffffff811115614ddf57600080fd5b614deb85828601614d33565b9250506020830135614dfc81614da7565b809150509250929050565b60005b83811015614e22578181015183820152602001614e0a565b83811115614e31576000848401525b50505050565b6020815260008251806020840152614e56816040850160208701614e07565b601f01601f19169190910160400192915050565b600060208284031215614e7c57600080fd5b5035919050565b60008060408385031215614e9657600080fd5b8235614ea181614d1e565b946020939093013593505050565b60008060408385031215614ec257600080fd5b8235614ecd81614d1e565b91506020830135614dfc81614da7565b803561ffff811681146119b557600080fd5b600080600060608486031215614f0457600080fd5b614f0d84614edd565b9250614f1b60208501614edd565b9150614f2960408501614edd565b90509250925092565b600080600060608486031215614f4757600080fd5b8335614f5281614d1e565b92506020840135614f6281614d1e565b929592945050506040919091013590565b600082601f830112614f8457600080fd5b81356020614f94614d5483614cfa565b82815260059290921b84018101918181019086841115614fb357600080fd5b8286015b84811015614d9c5780358352918301918301614fb7565b60008060408385031215614fe157600080fd5b823567ffffffffffffffff80821115614ff957600080fd5b61500586838701614d33565b9350602085013591508082111561501b57600080fd5b5061502885828601614f73565b9150509250929050565b6000806000806080858703121561504857600080fd5b843561505381614da7565b9350602085013561506381614da7565b9250604085013561507381614da7565b9150606085013561508381614da7565b939692955090935050565b6000602082840312156150a057600080fd5b813561192b81614d1e565b600080600080600060a086880312156150c357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000602082840312156150f857600080fd5b813561192b81614da7565b6000806040838503121561511657600080fd5b61511f83614edd565b915061512d60208401614edd565b90509250929050565b6000806040838503121561514957600080fd5b823561515481614d1e565b91506020830135614dfc81614d1e565b60008060006060848603121561517957600080fd5b833567ffffffffffffffff8082111561519157600080fd5b61519d87838801614d33565b945060208601359150808211156151b357600080fd5b506151c086828701614f73565b92505060408401356151d181614d1e565b809150509250925092565b600081518084526020808501945080840160005b838110156152155781516001600160a01b0316875295820195908201906001016151f0565b509495945050505050565b60408152600061523360408301856151dc565b905082151560208301529392505050565b600181811c9082168061525857607f821691505b60208210811415615292577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156153025781600019048211156152e8576152e8615298565b808516156152f557918102915b93841c93908002906152cc565b509250929050565b60008261531957506001610fdf565b8161532657506000610fdf565b816001811461533c576002811461534657615362565b6001915050610fdf565b60ff84111561535757615357615298565b50506001821b610fdf565b5060208310610133831016604e8410600b8410161715615385575081810a610fdf565b61538f83836152c7565b80600019048211156153a3576153a3615298565b029392505050565b600061192b60ff84168361530a565b60008160001904831182151516156153d4576153d4615298565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615417576154176153d9565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561548c5761548c615298565b500390565b60006000198214156154a5576154a5615298565b5060010190565b600061ffff8083168185168083038211156154c9576154c9615298565b01949350505050565b600061ffff838116908316818110156154ed576154ed615298565b039392505050565b600060ff821660ff81141561550c5761550c615298565b60010192915050565b6000821982111561552857615528615298565b500190565b600082601f83011261553e57600080fd5b815167ffffffffffffffff81111561555857615558614c9a565b61556b6020601f19601f84011601614cc9565b81815284602083860101111561558057600080fd5b611677826020830160208701614e07565b600080600080608085870312156155a757600080fd5b845167ffffffffffffffff808211156155bf57600080fd5b6155cb8883890161552d565b955060208701519150808211156155e157600080fd5b506155ee8782880161552d565b93505060408501519150606085015160ff8116811461508357600080fd5b60008261561b5761561b6153d9565b500690565b60006020828403121561563257600080fd5b815161192b81614d1e565b60008060006060848603121561565257600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561567d57600080fd5b815161192b81614da7565b85815284602082015260a0604082015260006156a760a08301866151dc565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212205510e3d6923f602000cf9de6d4f8803fbd8c6c2dfaecd58c8643f3ad1b498c7364736f6c634300080b0033

Deployed Bytecode Sourcemap

6299:27864:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8264:73;;;;;;;;;;;;8295:42;8264:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8264:73:0;;;;;;;;8795:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8795:28:0;245:177:1;19416:172:0;;;;;;;;;;-1:-1:-1;19416:172:0;;;;;:::i;:::-;;:::i;:::-;;14475:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8203:26::-;;;;;;;;;;-1:-1:-1;8203:26:0;;;;-1:-1:-1;;;;;8203:26:0;;;20048:150;;;;;;;;;;-1:-1:-1;20048:150:0;;;;;:::i;:::-;;:::i;15166:159::-;;;;;;;;;;-1:-1:-1;15166:159:0;;;;;:::i;:::-;;:::i;:::-;;;4277:14:1;;4270:22;4252:41;;4240:2;4225:18;15166:159:0;4112:187:1;22700:149:0;;;;;;;;;;;;;:::i;17478:1519::-;;;;;;;;;;-1:-1:-1;17478:1519:0;;;;;:::i;:::-;;:::i;14178:115::-;;;;;;;;;;;;;:::i;20962:397::-;;;;;;;;;;-1:-1:-1;20962:397:0;;;;;:::i;:::-;;:::i;15831:306::-;;;;;;;;;;-1:-1:-1;15831:306:0;;;;;:::i;:::-;;:::i;29672:373::-;;;;;;;;;;-1:-1:-1;29672:373:0;;;;;:::i;:::-;;:::i;19845:195::-;;;;;;;;;;-1:-1:-1;19845:195:0;;;;;:::i;:::-;;:::i;17201:141::-;;;;;;;;;;;;;:::i;8000:42::-;;;;;;;;;;;;8038:4;8000:42;;19005:250;;;;;;;;;;-1:-1:-1;19005:250:0;;;;;:::i;:::-;;:::i;8830:25::-;;;;;;;;;;;;;;;;23459:156;;;;;;;;;;-1:-1:-1;23459:156:0;;;;;:::i;:::-;;:::i;14299:80::-;;;;;;;;;;-1:-1:-1;14367:9:0;;14299:80;;14367:9;;;;7710:36:1;;7698:2;7683:18;14299:80:0;7568:184:1;19729:108:0;;;;;;;;;;-1:-1:-1;19729:108:0;;;;;:::i;:::-;;:::i;22857:338::-;;;;;;;;;;-1:-1:-1;22857:338:0;;;;;:::i;:::-;;:::i;21988:140::-;;;;;;;;;;-1:-1:-1;21988:140:0;;;;;:::i;:::-;;:::i;9058:38::-;;;;;;;;;;-1:-1:-1;9058:38:0;;;;;;;;;;;8236:21;;;;;;;;;;-1:-1:-1;8236:21:0;;;;-1:-1:-1;;;;;8236:21:0;;;8946:34;;;;;;;;;;-1:-1:-1;8946:34:0;;;;;;;;13036:588;;;;;;;;;;-1:-1:-1;13036:588:0;;;;;:::i;:::-;;:::i;22274:125::-;;;;;;;;;;-1:-1:-1;22274:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;22363:28:0;22339:4;22363:28;;;:19;:28;;;;;;;;;22274:125;8987:36;;;;;;;;;;-1:-1:-1;8987:36:0;;;;;;;;;;;20206:367;;;;;;;;;;-1:-1:-1;20206:367:0;;;;;:::i;:::-;;:::i;22407:134::-;;;;;;;;;;-1:-1:-1;22407:134:0;;;;;:::i;:::-;;:::i;22136:130::-;;;;;;;;;;-1:-1:-1;22136:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;22228:30:0;22204:4;22228:30;;;:21;:30;;;;;;;;;22136:130;22549:143;;;;;;;;;;;;;:::i;14787:198::-;;;;;;;;;;-1:-1:-1;14787:198:0;;;;;:::i;:::-;;:::i;13632:193::-;;;;;;;;;;;;;:::i;7433:139::-;;;;;;;;;;-1:-1:-1;7433:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8701:6:1;8734:15;;;8716:34;;8786:15;;;8781:2;8766:18;;8759:43;8838:15;;;8818:18;;;8811:43;;;;8890:15;;;8885:2;8870:18;;8863:43;8678:3;8663:19;7433:139:0;8468:444:1;16693:500:0;;;;;;;;;;-1:-1:-1;16693:500:0;;;;;:::i;:::-;;:::i;17350:120::-;;;;;;;;;;-1:-1:-1;17350:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17442:20:0;17418:4;17442:20;;;:11;:20;;;;;;;;;17350:120;14561:79;;;;;;;;;;-1:-1:-1;14613:7:0;14631:6;-1:-1:-1;;;;;14631:6:0;14561:79;;20581:373;;;;;;;;;;-1:-1:-1;20581:373:0;;;;;:::i;:::-;;:::i;15650:173::-;;;;;;;;;;;;;:::i;29045:429::-;;;;;;;;;;;;;:::i;14385:84::-;;;;;;;;;;;;;:::i;23203:111::-;;;;;;;;;;-1:-1:-1;23203:111:0;;;;;:::i;:::-;;:::i;23322:129::-;;;;;;;;;;-1:-1:-1;23322:129:0;;;;;:::i;:::-;;:::i;9103:28::-;;;;;;;;;;;;;;;;14993:165;;;;;;;;;;-1:-1:-1;14993:165:0;;;;;:::i;:::-;;:::i;23758:204::-;;;;;;;;;;-1:-1:-1;23758:204:0;;;;;:::i;:::-;;:::i;21367:210::-;;;;;;;;;;-1:-1:-1;21367:210:0;;;;;:::i;:::-;;:::i;7730:144::-;;;;;;;;;;-1:-1:-1;7730:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7581:140;;;;;;;;;;-1:-1:-1;7581:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;23970:164;;;;;;;;;;-1:-1:-1;23970:164:0;;;;;:::i;:::-;;:::i;7883:108::-;;;;;;;;;;-1:-1:-1;7883:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;9630:6:1;9663:15;;;9645:34;;9715:15;;;9710:2;9695:18;;9688:43;9767:15;;9747:18;;;9740:43;;;;9608:2;9593:18;7883:108:0;9424:365:1;21585:194:0;;;;;;;;;;-1:-1:-1;21585:194:0;;;;;:::i;:::-;;:::i;14646:133::-;;;;;;;;;;-1:-1:-1;14646:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14748:19:0;;;14730:7;14748:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14646:133;10597:1850;;;;;;;;;;-1:-1:-1;10597:1850:0;;;;;:::i;:::-;;:::i;8713:44::-;;;;;;;;;;;;;;;;21787:193;;;;;;;;;;-1:-1:-1;21787:193:0;;;;;:::i;:::-;;:::i;16145:540::-;;;;;;;;;;-1:-1:-1;16145:540:0;;;;;:::i;:::-;;:::i;23623:127::-;;;;;;;;;;-1:-1:-1;23623:127:0;;;;;:::i;:::-;;:::i;29482:182::-;;;;;;;;;;;;;:::i;19263:145::-;;;;;;;;;;-1:-1:-1;19263:145:0;;;;;:::i;:::-;;:::i;8444:192::-;;;;;;;;;;-1:-1:-1;8444:192:0;;;;;;-1:-1:-1;;;;;8444:192:0;;;;;;;;;;;-1:-1:-1;;;;;11451:15:1;;;11433:34;;11503:15;;;;11498:2;11483:18;;11476:43;11345:18;8444:192:0;11182:343:1;8667:39:0;;;;;;;;;;-1:-1:-1;8667:39:0;;;;;;;;;;;19596:125;;;;;;;;;;-1:-1:-1;19596:125:0;;;;;:::i;:::-;;:::i;19416:172::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;;;;;;;;;19524:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;19524:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;19562:8;;19572:7;;19524:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19416:172:::0;;:::o;14475:80::-;14523:13;14547:5;14540:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14475:80;:::o;20048:150::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;20132:3:::1;20125;:10;;20117:31;;;::::0;-1:-1:-1;;;20117:31:0;;13356:2:1;20117:31:0::1;::::0;::::1;13338:21:1::0;13395:1;13375:18;;;13368:29;13433:10;13413:18;;;13406:38;13461:18;;20117:31:0::1;13154:331:1::0;20117:31:0::1;20159:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;20159:9:0;;;::::1;-1:-1:-1::0;;;;;20159:9:0::1;::::0;:26:::1;::::0;364:18:1;;20159:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20048:150:::0;:::o;15166:159::-;15241:4;15258:37;15267:10;15279:7;15288:6;15258:8;:37::i;:::-;-1:-1:-1;15313:4:0;15166:159;;;;;:::o;22700:149::-;22831:9;;22745:7;;22827:13;;22831:9;;22827:2;:13;:::i;:::-;22817:5;22799:14;;22774:22;:20;:22::i;:::-;:39;;;;:::i;:::-;22773:49;;;;:::i;:::-;22772:69;;;;:::i;:::-;22765:76;;22700:149;:::o;17478:1519::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;17572:7:::1;17568:1422;;;-1:-1:-1::0;;;;;17605:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17604:21;17596:62;;;::::0;-1:-1:-1;;;17596:62:0;;15931:2:1;17596:62:0::1;::::0;::::1;15913:21:1::0;15970:2;15950:18;;;15943:30;16009;15989:18;;;15982:58;16057:18;;17596:62:0::1;15729:352:1::0;17596:62:0::1;-1:-1:-1::0;;;;;17676:16:0;::::1;17695:1;17676:16:::0;;;:7:::1;:16;::::0;;;;;:20;17673:116:::1;;-1:-1:-1::0;;;;;17756:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17736:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17717:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17673:116:::1;-1:-1:-1::0;;;;;17803:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;17803:27:0::1;17826:4;17803:27;::::0;;17859:6:::1;::::0;;;::::1;17848:17;17845:79;;17885:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;17885:23:0;;;;;::::1;::::0;;-1:-1:-1;;17885:23:0::1;-1:-1:-1::0;;;;;17885:23:0;::::1;;::::0;;17845:79:::1;17478:1519:::0;;:::o;17568:1422::-:1;17946:7;17941:1049;;-1:-1:-1::0;;;;;17978:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17970:61;;;::::0;-1:-1:-1;;;17970:61:0;;16288:2:1;17970:61:0::1;::::0;::::1;16270:21:1::0;16327:2;16307:18;;;16300:30;16366;16346:18;;;16339:58;16414:18;;17970:61:0::1;16086:352:1::0;17970:61:0::1;18061:6;::::0;-1:-1:-1;;;;;18050:17:0;;::::1;18061:6:::0;::::1;18050:17;18046:933;;;18126:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18107:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18088:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18155:7:::1;:16:::0;;;;;:20;;;18194:11:::1;:20:::0;;;:28;;-1:-1:-1;;18194:28:0::1;::::0;;17478:1519;;:::o;18046:933::-:1;18247:9;:16:::0;18267:1:::1;18247:21;18244:735;;;18327:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18308:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18289:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18356:7:::1;:16:::0;;;;;:20;;;18395:11:::1;:20:::0;;;:28;;-1:-1:-1;;18395:28:0::1;::::0;;18442:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18442:15:0;;;;;-1:-1:-1;;18442:15:0::1;::::0;;;;;17478:1519;;:::o;18244:735::-:1;18503:9;18498:466;18522:9;:16:::0;18518:20;::::1;18498:466;;;18588:7;-1:-1:-1::0;;;;;18572:23:0::1;:9;18582:1;18572:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18572:12:0::1;:23;18568:377;;;18639:9;18649:16:::0;;:20:::1;::::0;18668:1:::1;::::0;18649:20:::1;:::i;:::-;18639:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18624:9:::1;:12:::0;;-1:-1:-1;;;;;18639:31:0;;::::1;::::0;18634:1;;18624:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;18624:46:0::1;-1:-1:-1::0;;;;;18624:46:0;;::::1;;::::0;;18697:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;18782:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;18763:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18744:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18819:11:::1;:20:::0;;;:28;;-1:-1:-1;;18819:28:0::1;::::0;;18874:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18874:15:0;;;;;-1:-1:-1;;18874:15:0::1;::::0;;;;;18498:466:::1;17478:1519:::0;;:::o;18568:377::-:1;18540:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18498:466;;;;17478:1519:::0;;:::o;14178:115::-;14233:7;14248;;14259:1;14248:12;14244:31;;;14264:8;;;14244:31;-1:-1:-1;14283:7:0;;;14178:115::o;20962:397::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;21070:12:::1;21107:9:::0;21085:19:::1;21095:9:::0;21085:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;21070:46;;8142:4;21135:5;:25;;;;21127:34;;;::::0;::::1;;21172:14;:32:::0;;::::1;21262:36:::0;;::::1;::::0;::::1;-1:-1:-1::0;;21215:36:0;;::::1;::::0;::::1;-1:-1:-1::0;;21215:36:0;;;21172:32;;::::1;21215:36:::0;;;;;;;::::1;21262;;::::0;;21336:15:::1;21197:7:::0;21336:5;:15:::1;:::i;:::-;21309:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;20962:397:0:o;15831:306::-;-1:-1:-1;;;;;15952:19:0;;15931:4;15952:19;;;:11;:19;;;;;;;;15972:10;15952:31;;;;;;;;-1:-1:-1;;15952:52:0;15948:126;;-1:-1:-1;;;;;16021:19:0;;;;;;:11;:19;;;;;;;;16041:10;16021:31;;;;;;;:41;;16056:6;;16021:19;:41;;16056:6;;16021:41;:::i;:::-;;;;-1:-1:-1;;15948:126:0;16093:36;16103:6;16111:9;16122:6;16093:9;:36::i;:::-;16086:43;15831:306;-1:-1:-1;;;;15831:306:0:o;29672:373::-;29797:7;:14;29778:8;:15;:33;29770:67;;;;-1:-1:-1;;;29770:67:0;;17804:2:1;29770:67:0;;;17786:21:1;17843:2;17823:18;;;17816:30;17882:23;17862:18;;;17855:51;17923:18;;29770:67:0;17602:345:1;29770:67:0;29853:7;29848:190;29870:8;:15;29866:1;:19;;;29848:190;;;29940:7;29948:1;29940:10;;;;;;;;;;:::i;:::-;;;;;;;29915:21;29925:10;29915:9;:21::i;:::-;:35;;29907:44;;;;;;29966:60;29976:10;29988:8;29997:1;29988:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;30016:9;;30012:13;;30016:9;;30012:2;:13;:::i;:::-;30001:7;30009:1;30001:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29966:9;:60::i;:::-;-1:-1:-1;29887:3:0;;;;:::i;:::-;;;;29848:190;;19845:195;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;19967:9:::1;::::0;:65:::1;::::0;;;;18364:14:1;;18357:22;19967:65:0::1;::::0;::::1;18339:41:1::0;18423:14;;18416:22;18396:18;;;18389:50;18482:14;;18475:22;18455:18;;;18448:50;18541:14;;18534:22;18514:18;;;18507:50;19967:9:0;;;::::1;-1:-1:-1::0;;;;;19967:9:0::1;::::0;:24:::1;::::0;18311:19:1;;19967:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19845:195:::0;;;;:::o;17201:141::-;17254:7;17311:21;17329:1;17311:9;:21::i;:::-;17293:15;8295:42;17293:9;:15::i;:::-;:39;;;;:::i;:::-;17282:7;;:51;;;;:::i;19005:250::-;19071:7;19110;;19099;:18;;19091:73;;;;-1:-1:-1;;;19091:73:0;;18903:2:1;19091:73:0;;;18885:21:1;18942:2;18922:18;;;18915:30;18981:34;18961:18;;;18954:62;19052:12;19032:18;;;19025:40;19082:19;;19091:73:0;18701:406:1;19091:73:0;19175:19;19198:10;:8;:10::i;:::-;19175:33;-1:-1:-1;19226:21:0;19175:33;19226:7;:21;:::i;:::-;19219:28;19005:250;-1:-1:-1;;;19005:250:0:o;23459:156::-;23539:7;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;23589:7:::1;::::0;23579:6:::1;::::0;23600:5:::1;::::0;23589:7;23569:17:::1;::::0;-1:-1:-1;;;;;23579:6:0::1;23569:9;:17::i;:::-;:27;;;;:::i;:::-;23568:37;;;;:::i;:::-;23559:48;;9591:1;23459:156:::0;;;:::o;19729:108::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;19798:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19798:31:0::1;::::0;::::1;160:74:1::0;19798:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;19798:31:0::1;14:226:1::0;22857:338:0;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;23071:16:::1;23051;23041:7;;:26;;;;:::i;:::-;23040:47;;;;:::i;:::-;23024:13;:63:::0;23112:7:::1;::::0;23139:13;;23112:23:::1;::::0;23122:13;;23112:23:::1;:::i;:::-;23111:41;;;;:::i;:::-;23098:10;:54:::0;23163:17:::1;:24:::0;-1:-1:-1;;;;22857:338:0:o;21988:140::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;-1:-1:-1;;;;;22080:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;22080:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21988:140::o;13036:588::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;-1:-1:-1;;;;;13115:22:0;::::1;13107:96;;;::::0;-1:-1:-1;;;13107:96:0;;19314:2:1;13107:96:0::1;::::0;::::1;19296:21:1::0;19353:2;19333:18;;;19326:30;19392:34;19372:18;;;19365:62;19463:31;19443:18;;;19436:59;19512:19;;13107:96:0::1;19112:425:1::0;13107:96:0::1;-1:-1:-1::0;;;;;13222:16:0;::::1;8295:42;13222:16;;13214:90;;;::::0;-1:-1:-1;;;13214:90:0;;19314:2:1;13214:90:0::1;::::0;::::1;19296:21:1::0;19353:2;19333:18;;;19326:30;19392:34;19372:18;;;19365:62;19463:31;19443:18;;;19436:59;19512:19;;13214:90:0::1;19112:425:1::0;13214:90:0::1;13335:6;::::0;;13315:34:::1;::::0;-1:-1:-1;;;;;13335:6:0;;::::1;::::0;13315:19:::1;:34::i;:::-;13360:35;13380:8;13390:4;13360:19;:35::i;:::-;13439:1;13429:6:::0;;13419:17:::1;::::0;-1:-1:-1;;;;;13429:6:0::1;13419:9;:17::i;:::-;:21;13416:99;;;13467:6;::::0;13457:46:::1;::::0;-1:-1:-1;;;;;13467:6:0::1;13475:8:::0;13485:17:::1;13467:6:::0;13485:9:::1;:17::i;13457:46::-;;13416:99;13535:6;:17:::0;;-1:-1:-1;;13535:17:0::1;-1:-1:-1::0;;;;;13535:17:0;::::1;::::0;;::::1;::::0;;13568:38:::1;::::0;13535:17;;;;13568:38:::1;::::0;13535:6;13568:38:::1;13036:588:::0;:::o;20206:367::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;20309:12:::1;20346:9:::0;20324:19:::1;20334:9:::0;20324:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;20309:46;;8038:4;20374:5;:20;;;;20366:29;;;::::0;::::1;;20406:9;:27:::0;;::::1;20486:31:::0;;::::1;::::0;::::1;-1:-1:-1::0;;20444:31:0;;::::1;::::0;::::1;-1:-1:-1::0;;20444:31:0;;;20406:27;;::::1;20444:31:::0;;;;;;;::::1;20486;;::::0;;20550:15:::1;20426:7:::0;20550:5;:15:::1;:::i;:::-;20528:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;20206:367:0:o;22407:134::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;-1:-1:-1;;;;;22495:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;22495:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22407:134::o;22549:143::-;22674:9;;22590:7;;22670:13;;22674:9;;22670:2;:13;:::i;:::-;22660:5;22644:12;;22619:22;:20;:22::i;14787:198::-;-1:-1:-1;;;;;14877:20:0;;14853:7;14877:20;;;:11;:20;;;;;;;;14873:49;;;-1:-1:-1;;;;;;14906:16:0;;;;;:7;:16;;;;;;;14787:198::o;14873:49::-;-1:-1:-1;;;;;14960:16:0;;;;;;:7;:16;;;;;;14940:37;;:19;:37::i;13632:193::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;13717:6:::1;::::0;;13697:34:::1;::::0;-1:-1:-1;;;;;13717:6:0;;::::1;::::0;13697:19:::1;:34::i;:::-;13759:1;13742:19:::0;;-1:-1:-1;;13742:19:0::1;::::0;;13777:40:::1;::::0;13759:1;;13777:40:::1;::::0;13759:1;;13777:40:::1;13632:193::o:0;16693:500::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;16774:16;16770:416:::1;;-1:-1:-1::0;;;;;16807:13:0;;::::1;16823:5;16807:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16807:21:0::1;::::0;;16843:9:::1;::::0;:32;;;;;::::1;::::0;::::1;19710:74:1::0;;;;19800:18;;;19793:50;;;;16843:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19683:18:1;;16843:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;16770:416;16912:17;::::0;:22;16908:136:::1;;17001:6;16981:17;;16963:15;:35;;;;:::i;:::-;:44;16955:73;;;::::0;-1:-1:-1;;;16955:73:0;;20056:2:1;16955:73:0::1;::::0;::::1;20038:21:1::0;20095:2;20075:18;;;20068:30;20134:18;20114;;;20107:46;20170:18;;16955:73:0::1;19854:340:1::0;16955:73:0::1;-1:-1:-1::0;;;;;17058:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;17058:20:0::1;17074:4;17058:20:::0;;::::1;::::0;;;17113:15:::1;17093:17;:35:::0;;;17143:9:::1;::::0;:31;;;;;;;::::1;19710:74:1::0;;;;19800:18;;;19793:50;17143:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19683:18:1;;17143:31:0::1;19542:307:1::0;20581:373:0;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;20685:12:::1;20722:9:::0;20700:19:::1;20710:9:::0;20700:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;20685:46;;8088:4;20750:5;:21;;;;20742:30;;;::::0;::::1;;20783:10;:28:::0;;::::1;20865:32:::0;;::::1;::::0;::::1;-1:-1:-1::0;;20822:32:0;;::::1;::::0;::::1;-1:-1:-1::0;;20822:32:0;;;20783:28;;::::1;20822:32:::0;;;;;;;::::1;20865;;::::0;;20931:15:::1;20804:7:::0;20931:5;:15:::1;:::i;:::-;20908:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;20581:373:0:o;15650:173::-;15714:4;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;15763:9:::1;::::0;15731:62:::1;::::0;15748:4:::1;::::0;-1:-1:-1;;;;;15763:9:0::1;-1:-1:-1::0;;15731:8:0::1;:62::i;:::-;-1:-1:-1::0;15811:4:0::1;15650:173:::0;:::o;29045:429::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;29107:14:::1;::::0;::::1;;29106:15;29098:52;;;::::0;-1:-1:-1;;;29098:52:0;;20401:2:1;29098:52:0::1;::::0;::::1;20383:21:1::0;20440:2;20420:18;;;20413:30;20479:26;20459:18;;;20452:54;20523:18;;29098:52:0::1;20199:348:1::0;29098:52:0::1;29169:16;::::0;::::1;::::0;::::1;;;29161:53;;;::::0;-1:-1:-1;;;29161:53:0;;20754:2:1;29161:53:0::1;::::0;::::1;20736:21:1::0;20793:2;20773:18;;;20766:30;20832:26;20812:18;;;20805:54;20876:18;;29161:53:0::1;20552:348:1::0;29161:53:0::1;29236:9;::::0;;;::::1;-1:-1:-1::0;;;;;29236:9:0::1;29225:99;;29276:9;:36:::0;;;::::1;29306:4;29276:36:::0;::::1;;::::0;;29225:99:::1;29338:9;::::0;29358:6:::1;::::0;29413:9:::1;::::0;29338:85:::1;::::0;;;;-1:-1:-1;;;;;29358:6:0;;::::1;29338:85;::::0;::::1;21128:74:1::0;21250:10;29373:12:0::1;21238:23:1::0;21218:18;;;21211:51;21310:18;29395:15:0::1;21298:31:1::0;21278:18;;;21271:59;29413:9:0::1;::::0;;::::1;21346:18:1::0;;;21339:45;29338:9:0;;;::::1;;::::0;:19:::1;::::0;21100::1;;29338:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;29334:101:::0;29445:14:::1;:21:::0;;-1:-1:-1;;29445:21:0::1;29462:4;29445:21;::::0;;29045:429::o;14385:84::-;14435:13;14459:7;14452:14;;;;;:::i;23203:111::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;23278:18:::1;:28:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;23203:111::o;23322:129::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;23413:3:::1;23404:5;:12;;23396:21;;;::::0;::::1;;23428:7;:15:::0;23322:129::o;14993:165::-;15071:4;15088:40;15098:10;15110:9;15121:6;15088:9;:40::i;:::-;-1:-1:-1;15146:4:0;;14993:165;-1:-1:-1;;;14993:165:0:o;23758:204::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;23843:21;;-1:-1:-1;;;;;23843:21:0::1;8295:42;23843:29;::::0;::::1;::::0;:68:::1;;-1:-1:-1::0;23876:21:0;;-1:-1:-1;;;;;23876:21:0::1;:35:::0;::::1;23843:68;23835:77;;;::::0;::::1;;23923:21:::0;:31;;-1:-1:-1;;23923:31:0::1;-1:-1:-1::0;;;;;23923:31:0;;;::::1;::::0;;;::::1;::::0;;23758:204::o;21367:210::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;21452:7:::1;:29:::0;;::::1;21492::::0;;::::1;::::0;::::1;-1:-1:-1::0;;21492:29:0;;;21452;;::::1;21492::::0;::::1;::::0;;21548:21:::1;21512:9:::0;21472;21548:21:::1;:::i;:::-;21532:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;21532:37:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;21367:210:0:o;23970:164::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;24046:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;24046:29:0;;::::1;;::::0;;24091:35:::1;::::0;::::1;::::0;::::1;::::0;24068:7;4277:14:1;4270:22;4252:41;;4240:2;4225:18;;4112:187;24091:35:0::1;;;;;;;;23970:164:::0;:::o;21585:194::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;21676:2:::1;21665:7;:13;;21657:81;;;::::0;-1:-1:-1;;;21657:81:0;;21597:2:1;21657:81:0::1;::::0;::::1;21579:21:1::0;21636:2;21616:18;;;21609:30;21675:34;21655:18;;;21648:62;21746:25;21726:18;;;21719:53;21789:19;;21657:81:0::1;21395:419:1::0;21657:81:0::1;21749:12;:22:::0;21585:194::o;10597:1850::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;10736:19:::1;::::0;::::1;;10735:20;10727:36;;;::::0;-1:-1:-1;;;10727:36:0;;22021:2:1;10727:36:0::1;::::0;::::1;22003:21:1::0;22060:1;22040:18;;;22033:29;22098:5;22078:18;;;22071:33;22121:18;;10727:36:0::1;21819:326:1::0;10727:36:0::1;10801:7;:14;10782:8;:15;:33;10774:49;;;::::0;-1:-1:-1;;;10774:49:0;;22352:2:1;10774:49:0::1;::::0;::::1;22334:21:1::0;22391:1;22371:18;;;22364:29;22429:5;22409:18;;;22402:33;22452:18;;10774:49:0::1;22150:326:1::0;10774:49:0::1;10834:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;10834:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;10882::::1;::::0;;;;10909:4:::1;10882:33;::::0;::::1;160:74:1::0;10882:9:0;::::1;;::::0;:18:::1;::::0;133::1;;10882:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;10878:49:::0;10941:9:::1;;;;;;;;;-1:-1:-1::0;;;;;10941:9:0::1;-1:-1:-1::0;;;;;10941:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;10941:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;10937:456;;11368:13;::::0;-1:-1:-1;;;11368:13:0;;24023:2:1;11368:13:0::1;::::0;::::1;24005:21:1::0;24062:1;24042:18;;;24035:29;24100:5;24080:18;;;24073:33;24123:18;;11368:13:0::1;23821:326:1::0;10937:456:0::1;11091:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11122:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11157:14:0::1;:35:::0;;;11207:9:::1;:24:::0;;-1:-1:-1;;11207:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;11273:13:::1;::::0;:2:::1;:13;:::i;:::-;11256:14;;:30;;;;:::i;:::-;11246:7;:40:::0;;;11319:3:::1;::::0;:13:::1;::::0;11246:40;11319:13:::1;:::i;:::-;11312:3;;:21;;;;:::i;:::-;11301:7;:33:::0;-1:-1:-1;;;;11423:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;11423:9:0::1;-1:-1:-1::0;;;;;11423:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11412:42:0::1;;11455:9;;;;;;;;;-1:-1:-1::0;;;;;11455:9:0::1;-1:-1:-1::0;;;;;11455:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11412:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11451:15:1;;;11412:75:0::1;::::0;::::1;11433:34:1::0;11481:4:0::1;11483:18:1::0;;;11476:43;11345:18;;11412:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11403:6;:84:::0;;-1:-1:-1;;11403:84:0::1;-1:-1:-1::0;;;;;11403:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11498:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;11498:22:0::1;-1:-1:-1::0;11498:22:0;;::::1;::::0;;;11548:7:::1;::::0;11563:5:::1;::::0;11548:11:::1;::::0;:7;:11:::1;:::i;:::-;11547:21;;;;:::i;:::-;11531:13;:37:::0;11593:7:::1;::::0;11608:5:::1;::::0;11593:11:::1;::::0;11603:1:::1;11593:11;:::i;:::-;11592:21;;;;:::i;:::-;11579:10;:34:::0;11624:19:::1;:26:::0;;-1:-1:-1;;11624:26:0::1;11646:4;11624:26:::0;;::::1;::::0;;;11684:7:::1;::::0;-1:-1:-1;11674:6:0;;-1:-1:-1;;;;;11674:6:0;;::::1;11666:15:::0;;::::1;::::0;;;;;;;:25;;;;11728:6;;11736:7:::1;::::0;11707:37;;391:25:1;;;11728:6:0::1;::::0;-1:-1:-1;;11707:37:0::1;::::0;364:18:1;11707:37:0::1;;;;;;;11766:6;::::0;11782:9:::1;::::0;11757:55:::1;::::0;-1:-1:-1;;;;;11766:6:0;;::::1;::::0;11782:9:::1;-1:-1:-1::0;;11757:8:0::1;:55::i;:::-;11855:9;::::0;11823:62:::1;::::0;11840:4:::1;::::0;-1:-1:-1;;;;;11855:9:0::1;-1:-1:-1::0;;11823:8:0::1;:62::i;:::-;11902:9;11898:167;11921:8;:15;11917:1;:19;11898:167;;;11991:9;::::0;11957:14:::1;::::0;11987:13:::1;::::0;11991:9:::1;;11987:2;:13;:::i;:::-;11974:7;11982:1;11974:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;11957:43;;12015:38;12025:6;::::0;::::1;;;;;;-1:-1:-1::0;;;;;12025:6:0::1;12033:8;12042:1;12033:11;;;;;;;;:::i;:::-;;;;;;;12046:6;12015:9;:38::i;:::-;;11942:123;11938:3;;;;;:::i;:::-;;;;11898:167;;;-1:-1:-1::0;12087:6:0::1;::::0;12077:51:::1;::::0;-1:-1:-1;;;;;12087:6:0::1;12103:4;12110:17;12087:6:::0;12110:9:::1;:17::i;12077:51::-;-1:-1:-1::0;12141:9:0::1;::::0;-1:-1:-1;;;;;12141:9:0::1;:25;12174:21;12219:4;12239:24;12219:4:::0;12239:9:::1;:24::i;:::-;12278:1;12364:6:::0;;12141:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;25239:15:1;;;12141:270:0::1;::::0;::::1;25221:34:1::0;25271:18;;;25264:34;;;;25314:18;;;25307:34;;;25357:18;;;25350:34;;;;12364:6:0;;;::::1;25400:19:1::0;;;25393:44;12385:15:0::1;25453:19:1::0;;;25446:35;25132:19;;12141:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12424:15;:13;:15::i;21787:193::-:0;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;21879:2:::1;21868:7;:13;;21860:77;;;::::0;-1:-1:-1;;;21860:77:0;;26005:2:1;21860:77:0::1;::::0;::::1;25987:21:1::0;26044:2;26024:18;;;26017:30;26083:34;26063:18;;;26056:62;26154:21;26134:18;;;26127:49;26193:19;;21860:77:0::1;25803:415:1::0;21860:77:0::1;21948:14;:24:::0;21787:193::o;16145:540::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;16214:20:::1;16247:9;16214:43;;16268:16;16298:10;-1:-1:-1::0;;;;;16298:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16287:40:0::1;;16336:4;16343:10;-1:-1:-1::0;;;;;16343:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16287:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11451:15:1;;;16287:74:0::1;::::0;::::1;11433:34:1::0;11503:15;;11483:18;;;11476:43;11345:18;;16287:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16268:93:::0;-1:-1:-1;;;;;;16376:22:0;::::1;16372:200;;16435:10;-1:-1:-1::0;;;;;16435:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16424:43:0::1;;16476:4;16483:10;-1:-1:-1::0;;;;;16483:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16424:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11451:15:1;;;16424:77:0::1;::::0;::::1;11433:34:1::0;11503:15;;11483:18;;;11476:43;11345:18;;16424:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16415:6;:86:::0;;-1:-1:-1;;16415:86:0::1;-1:-1:-1::0;;;;;16415:86:0;;;::::1;::::0;;;::::1;::::0;;16372:200:::1;;;16543:6;:17:::0;;-1:-1:-1;;16543:17:0::1;-1:-1:-1::0;;;;;16543:17:0;::::1;;::::0;;16372:200:::1;16582:9;:22:::0;;-1:-1:-1;;16582:22:0::1;-1:-1:-1::0;;;;;16582:22:0;::::1;::::0;;::::1;::::0;;;16615:62:::1;::::0;16632:4:::1;::::0;-1:-1:-1;;16615:8:0::1;:62::i;23623:127::-:0;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;23700:11:::1;:42:::0;;-1:-1:-1;;23700:42:0::1;-1:-1:-1::0;;;;;23700:42:0;;;::::1;::::0;;;::::1;::::0;;23623:127::o;29482:182::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;29549:16:::1;::::0;::::1;::::0;::::1;;;29548:17;29540:58;;;::::0;-1:-1:-1;;;29540:58:0;;26425:2:1;29540:58:0::1;::::0;::::1;26407:21:1::0;26464:2;26444:18;;;26437:30;26503;26483:18;;;26476:58;26551:18;;29540:58:0::1;26223:352:1::0;29540:58:0::1;29617:6;::::0;;29609:47:::1;::::0;-1:-1:-1;;;;;29617:6:0;;::::1;::::0;29634:21:::1;29609:47:::0;::::1;;;::::0;29634:21;;29609:47;29617:6;29609:47;29634:21;29617:6;29609:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29482:182::o:0;19263:145::-;9538:6;;-1:-1:-1;;;;;9538:6:0;9548:10;9538:20;9530:50;;;;-1:-1:-1;;;9530:50:0;;11732:2:1;9530:50:0;;;11714:21:1;11771:2;11751:18;;;11744:30;-1:-1:-1;;;11790:18:1;;;11783:47;11847:18;;9530:50:0;11530:341:1;9530:50:0;19353:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;19728:55:1;;;19353:47:0::1;::::0;::::1;19710:74:1::0;19827:14;;19820:22;19800:18;;;19793:50;19353:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;19683:18:1;;19353:47:0::1;19542:307:1::0;19596:125:0;19681:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;19681:32:0;;;160:74:1;19657:4:0;;19681:9;;;;;:23;;133:18:1;;19681:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15333:309::-;-1:-1:-1;;;;;15427:20:0;;15419:52;;;;-1:-1:-1;;;15419:52:0;;27032:2:1;15419:52:0;;;27014:21:1;27071:2;27051:18;;;27044:30;27110:21;27090:18;;;27083:49;27149:18;;15419:52:0;26830:343:1;15419:52:0;-1:-1:-1;;;;;15490:21:0;;15482:53;;;;-1:-1:-1;;;15482:53:0;;27032:2:1;15482:53:0;;;27014:21:1;27071:2;27051:18;;;27044:30;27110:21;27090:18;;;27083:49;27149:18;;15482:53:0;26830:343:1;15482:53:0;-1:-1:-1;;;;;15548:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15601:33;;391:25:1;;;15601:33:0;;364:18:1;15601:33:0;;;;;;;15333:309;;;:::o;33342:818::-;33422:7;;33458;;33491:6;;-1:-1:-1;;;;;33491:6:0;33384:7;33479:19;;;:11;:19;;;;;;33384:7;;33422;33458;33479:19;;33476:217;;;33527:6;;-1:-1:-1;;;;;33527:6:0;33519:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33519:25:0;:54;;-1:-1:-1;33556:6:0;;-1:-1:-1;;;;;33556:6:0;33548:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33519:54:0;33515:84;;;33592:7;;33582;;:17;;;;:::i;:::-;33575:24;;;;33342:818;:::o;33515:84::-;33633:6;;-1:-1:-1;;;;;33633:6:0;33625:15;;;;:7;:15;;;;;;33614:26;;;;:::i;:::-;33674:6;;-1:-1:-1;;;;;33674:6:0;33666:15;;;;:7;:15;;;;;;33614:26;;-1:-1:-1;33655:26:0;;;;:::i;:::-;;;33476:217;33706:9;:16;:20;33703:347;;33748:7;33743:296;33765:9;:16;33761:20;;;;33743:296;;;33835:7;33811;:21;33819:9;33829:1;33819:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33819:12:0;33811:21;;;;;;;;;;;;;:31;;:66;;;33870:7;33846;:21;33854:9;33864:1;33854:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33854:12:0;33846:21;;;;;;;;;;;;;:31;33811:66;33807:96;;;33896:7;;33886;;:17;;;;:::i;:::-;33879:24;;;;;33342:818;:::o;33807:96::-;33942:7;:21;33950:9;33960:1;33950:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33950:12:0;33942:21;;;;;;;;;;;;;33932:31;;:7;:31;:::i;:::-;33922:41;;34002:7;:21;34010:9;34020:1;34010:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34010:12:0;34002:21;;;;;;;;;;;;;33992:31;;:7;:31;:::i;:::-;33982:41;-1:-1:-1;33783:3:0;;;;:::i;:::-;;;;33743:296;;;;33703:347;34084:7;;34074;;:17;;;;:::i;:::-;34064:7;:27;34060:57;;;34110:7;;34100;;:17;;;;:::i;34060:57::-;34135:17;34145:7;34135;:17;:::i;24507:2426::-;24586:4;-1:-1:-1;;;;;24611:18:0;;24603:68;;;;-1:-1:-1;;;24603:68:0;;27380:2:1;24603:68:0;;;27362:21:1;27419:2;27399:18;;;27392:30;27458:34;27438:18;;;27431:62;27529:7;27509:18;;;27502:35;27554:19;;24603:68:0;27178:401:1;24603:68:0;-1:-1:-1;;;;;24690:16:0;;24682:64;;;;-1:-1:-1;;;24682:64:0;;27786:2:1;24682:64:0;;;27768:21:1;27825:2;27805:18;;;27798:30;27864:34;27844:18;;;27837:62;27935:5;27915:18;;;27908:33;27958:19;;24682:64:0;27584:399:1;24682:64:0;24774:1;24765:6;:10;24757:64;;;;-1:-1:-1;;;24757:64:0;;28190:2:1;24757:64:0;;;28172:21:1;28229:2;28209:18;;;28202:30;28268:34;28248:18;;;28241:62;28339:11;28319:18;;;28312:39;28368:19;;24757:64:0;27988:405:1;24757:64:0;-1:-1:-1;;;;;24928:13:0;;24832:8;24928:13;;;:7;:13;;;;;;24832:8;;;;24928:13;;24924:170;;;24964:4;24958:10;;24924:170;;;-1:-1:-1;;;;;24990:11:0;;;;;;:7;:11;;;;;;;;24986:108;;;25025:4;25018:11;;24986:108;;;-1:-1:-1;25078:4:0;24986:108;25107:20;25118:4;25124:2;25107:10;:20::i;:::-;25104:982;;;25148:14;;;;25144:89;;25183:34;;-1:-1:-1;;;25183:34:0;;28600:2:1;25183:34:0;;;28582:21:1;28639:2;28619:18;;;28612:30;28678:26;28658:18;;;28651:54;28722:18;;25183:34:0;28398:348:1;25144:89:0;25250:3;:11;;;;25257:4;25250:11;25247:342;;;-1:-1:-1;;;;;25286:27:0;;;;;;:21;:27;;;;;;;;25285:28;:58;;;;-1:-1:-1;;;;;;25318:25:0;;;;;;:21;:25;;;;;;;;25317:26;25285:58;25281:293;;;25387:5;25372:12;;:20;25368:187;;;25481:5;25455:22;:20;:22::i;:::-;25440:12;;:37;;;;:::i;:::-;25439:47;;;;:::i;:::-;25429:6;:57;;25421:110;;;;-1:-1:-1;;;25421:110:0;;28953:2:1;25421:110:0;;;28935:21:1;28992:2;28972:18;;;28965:30;29031:34;29011:18;;;29004:62;29102:10;29082:18;;;29075:38;29130:19;;25421:110:0;28751:404:1;25421:110:0;25620:9;;-1:-1:-1;;;;;25606:24:0;;;25620:9;;25606:24;;;;:33;;;25635:4;25634:5;25606:33;:59;;;;;25660:5;25643:14;;:22;25606:59;25603:303;;;-1:-1:-1;;;;;25691:25:0;;;;;;:21;:25;;;;;;;;25686:205;;25819:5;25793:22;:20;:22::i;:::-;25776:14;;:39;;;;:::i;:::-;25775:49;;;;:::i;:::-;25765:6;25749:13;25759:2;25749:9;:13::i;:::-;:22;;;;:::i;:::-;:75;;25741:130;;;;-1:-1:-1;;;25741:130:0;;29362:2:1;25741:130:0;;;29344:21:1;29401:2;29381:18;;;29374:30;29440:34;29420:18;;;29413:62;29511:12;29491:18;;;29484:40;29541:19;;25741:130:0;29160:406:1;25741:130:0;25923:18;;;;;;;:26;;;;;25945:4;25923:26;25920:155;;;26012:6;;25970:10;;26002:17;;-1:-1:-1;;;;;26012:6:0;26002:9;:17::i;:::-;25984:14;:6;25993:5;25984:14;:::i;:::-;25983:36;;;;:::i;:::-;25970:49;;26051:7;;26046:2;:12;26038:21;;;;;;25951:124;25920:155;-1:-1:-1;;;;;26131:25:0;;26098:12;26131:25;;;:19;:25;;;;;;26113:4;;26131:25;;;:52;;-1:-1:-1;;;;;;26160:23:0;;;;;;:19;:23;;;;;;;;26131:52;26128:98;;;-1:-1:-1;26209:5:0;26128:98;26242:4;26238:599;;;26268:6;;;;26267:7;:47;;;;-1:-1:-1;26295:19:0;;;;;;;26267:47;26263:557;;;26384:15;26364:17;;26353:8;;:28;;;;:::i;:::-;:46;26349:456;;;26424:28;26455:24;26473:4;26455:9;:24::i;:::-;26424:55;;26530:13;;26506:20;:37;26502:284;;26599:10;;26575:20;:34;26572:77;;-1:-1:-1;26636:10:0;;26572:77;26675:34;26688:20;26675:12;:34::i;:::-;26747:15;26736:8;:26;26502:284;26401:404;26349:456;26855:70;26873:4;26879:2;26883:6;26891:7;26900:3;26905:4;26911:13;26855:17;:70::i;:::-;26848:77;24507:2426;-1:-1:-1;;;;;;;;24507:2426:0:o;24142:357::-;24210:4;24242:6;;-1:-1:-1;;;;;24234:14:0;;;24242:6;;24234:14;;;;:43;;-1:-1:-1;24271:6:0;;-1:-1:-1;;;;;24265:12:0;;;24271:6;;24265:12;;24234:43;:79;;;;-1:-1:-1;24307:6:0;;-1:-1:-1;;;;;24307:6:0;24294:9;:19;;24234:79;:118;;;;-1:-1:-1;;;;;;24331:21:0;;;;;;:17;:21;;;;;;;;24330:22;24234:118;:159;;;;-1:-1:-1;;;;;;24370:23:0;;;;;;:17;:23;;;;;;;;24369:24;24234:159;:186;;;;-1:-1:-1;;;;;;24410:10:0;;8295:42;24410:10;;24234:186;:219;;;;-1:-1:-1;;;;;;24437:16:0;;;;24234:219;:257;;;;-1:-1:-1;;;;;;24470:21:0;;24486:4;24470:21;;24227:264;24142:357;-1:-1:-1;;;24142:357:0:o;26941:1580::-;9432:6;:13;;-1:-1:-1;;9432:13:0;9441:4;9432:13;;;27024:30:::1;::::0;;::::1;::::0;::::1;::::0;;27047:7:::1;27024:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;27065:56:::1;;27103:7;;;27065:56;27156:4;27136:26;::::0;;;:11:::1;:26;::::0;;;;;;;27171:9:::1;::::0;-1:-1:-1;;;;;27171:9:0::1;27136:46:::0;;;;;;;;-1:-1:-1;;27136:67:0::1;27133:165;;27240:4;27220:26;::::0;;;:11:::1;:26;::::0;;;;;;;27255:9:::1;::::0;-1:-1:-1;;;;;27255:9:0::1;27220:46:::0;;;;;;;-1:-1:-1;;27220:66:0;;27133:165:::1;27310:17;27391:1;27375:6;:12;;;27331:56;;27355:6;:16;;;27332:39;;:20;:39;;;;:::i;:::-;27331:56;;;;:::i;:::-;27330:62;;;;:::i;:::-;27310:82:::0;-1:-1:-1;27403:15:0::1;27421:32;27310:82:::0;27421:20;:32:::1;:::i;:::-;27498:16;::::0;;27512:1:::1;27498:16:::0;;;;;::::1;::::0;;27403:50;;-1:-1:-1;27474:21:0::1;::::0;27498:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27498:16:0::1;27474:40;;27543:4;27525;27530:1;27525:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27525:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27569:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27525:7;;27569:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27559:4;27564:1;27559:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27559:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27598:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;27673:7;;27598:9:::1;::::0;27711:4;;27738::::1;::::0;27758:15:::1;::::0;27598:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27818:21:0::1;::::0;-1:-1:-1;27797:18:0::1;::::0;-1:-1:-1;27904:7:0;;-1:-1:-1;27878:22:0::1;27891:9:::0;27818:21;27878:22:::1;:::i;:::-;27877:34;;;;:::i;:::-;27850:61:::0;-1:-1:-1;27928:13:0;;27924:345:::1;;27958:9;::::0;28127:21;;27958:239:::1;::::0;;;;28035:4:::1;27958:239;::::0;::::1;25221:34:1::0;25271:18;;;25264:34;;;27958:9:0::1;25314:18:1::0;;;25307:34;;;25357:18;;;25350:34;-1:-1:-1;;;;;28127:21:0;;::::1;25400:19:1::0;;;25393:44;28167:15:0::1;25453:19:1::0;;;25446:35;27958:9:0;::::1;::::0;:25:::1;::::0;27991:16;;25132:19:1;;27958:239:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28217:40:0::1;::::0;;30355:25:1;;;30411:2;30396:18;;30389:34;;;28217:40:0::1;::::0;-1:-1:-1;30328:18:1;28217:40:0::1;;;;;;;27924:345;28281:30;28295:16:::0;28281:30;::::1;:::i;:::-;;;28338:6;:16;;;28322:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;28417:16:::1;::::0;::::1;::::0;28392:10;;-1:-1:-1;28417:20:0::1;::::0;28413:101:::1;;28454:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;28454:21:0;;::::1;::::0;:48;::::1;;;::::0;28485:16;;28454:21:::1;:48:::0;:21;:48;28485:16;28454:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28413:101;27013:1508;;;;;;;9456:1;-1:-1:-1::0;9468:6:0;:14;;-1:-1:-1;;9468:14:0;;;26941:1580::o;30286:976::-;30450:16;;30428:4;;30450:16;;;;;30445:221;;30483:28;30502:4;30508:2;30483:18;:28::i;:::-;30531:16;;;;;;;30530:17;:41;;;;;30551:20;30562:4;30568:2;30551:10;:20::i;:::-;30526:129;;;30592:47;;-1:-1:-1;;;30592:47:0;;30636:2:1;30592:47:0;;;30618:21:1;30675:2;30655:18;;;30648:30;30714:34;30694:18;;;30687:62;30785:7;30765:18;;;30758:35;30810:19;;30592:47:0;30434:401:1;30526:129:0;30678:25;30706:64;30717:4;30723:2;30727:7;30736;30745:3;30750:4;30756:13;30706:10;:64::i;:::-;30800:14;;;;-1:-1:-1;;;;;30783:13:0;;;;;;:7;:13;;;;;:31;;30678:92;;-1:-1:-1;30800:14:0;;30783:31;;30800:14;;30783:31;:::i;:::-;;;;-1:-1:-1;;30840:22:0;;;;-1:-1:-1;;;;;30825:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;30840:22;;30825:37;:::i;:::-;;;;-1:-1:-1;;;;;;;30879:17:0;;;;;;:11;:17;;;;;;;;30875:89;;;-1:-1:-1;;;;;30929:13:0;;;;;;:7;:13;;;;;;:23;;30945:7;;30929:23;:::i;:::-;-1:-1:-1;;;;;30913:13:0;;;;;;:7;:13;;;;;:39;30875:89;-1:-1:-1;;;;;30978:15:0;;;;;;:11;:15;;;;;;;;30974:98;;;31038:22;;-1:-1:-1;;;;;31024:11:0;;31038:22;31024:11;;;:7;:11;;;;;;:36;;31038:22;31024:36;:::i;:::-;-1:-1:-1;;;;;31010:11:0;;;;;;:7;:11;;;;;:50;30974:98;31102:1;31088:6;:11;;;:15;:34;;;;31121:1;31107:6;:11;;;:15;31088:34;31084:89;;;31150:6;:11;;;31139:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31084:89:0;31205:2;-1:-1:-1;;;;;31190:42:0;31199:4;-1:-1:-1;;;;;31190:42:0;;31209:6;:22;;;31190:42;;;;391:25:1;;379:2;364:18;;245:177;31190:42:0;;;;;;;;-1:-1:-1;31250:4:0;;30286:976;-1:-1:-1;;;;;;;;30286:976:0:o;28529:508::-;28611:16;;;;;;;28610:17;28602:65;;;;-1:-1:-1;;;28602:65:0;;31042:2:1;28602:65:0;;;31024:21:1;31081:2;31061:18;;;31054:30;31120:34;31100:18;;;31093:62;31191:5;31171:18;;;31164:33;31214:19;;28602:65:0;30840:399:1;28602:65:0;28683:20;28694:4;28700:2;28683:10;:20::i;:::-;28682:21;:37;;;;-1:-1:-1;28713:6:0;;-1:-1:-1;;;;;28707:12:0;;;28713:6;;28707:12;28682:37;28678:352;;;-1:-1:-1;;;;;28736:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28736:30:0;28762:4;28736:30;;;28781:16;:23;;-1:-1:-1;;28781:23:0;28736:30;28781:23;;;;;28830:9;;;;28819:107;;28874:9;:36;;;;28904:4;28874:36;;;;;28819:107;28940:19;:26;;-1:-1:-1;;28940:26:0;;;;;28986:32;;-1:-1:-1;4252:41:1;;28986:32:0;;4240:2:1;4225:18;28986:32:0;;;;;;;28529:508;;:::o;31270:2064::-;31405:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31405:18:0;31436:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31436:25:0;31493:10;:8;:10::i;:::-;31472:18;;;:31;;;31533:28;;:7;:28;:::i;:::-;31516:14;;;:45;31578:20;31589:4;31595:2;31578:10;:20::i;:::-;31574:315;;;31646:9;;:38;;;;;-1:-1:-1;;;;;31525:15:1;;;31646:38:0;;;31507:34:1;31577:15;;;31557:18;;;31550:43;31609:18;;;31602:34;;;31615:12:0;;31646:9;;;;;:19;;31419:18:1;;31646:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31646:38:0;;;;;;;;-1:-1:-1;;31646:38:0;;;;;;;;;;;;:::i;:::-;;;31642:164;;31782:8;;;31642:164;31735:5;-1:-1:-1;31826:7:0;31822:56;;31854:8;;;31822:56;31600:289;31574:315;31904:7;31901:995;;;31928:22;;8189:5;32050:406;;;;32096:10;:18;;;;;;-1:-1:-1;32147:20:0;;;;;;-1:-1:-1;32050:406:0;;;32193:3;32189:267;;;32234:9;:17;;;;;;-1:-1:-1;32284:19:0;;;;;;-1:-1:-1;32189:267:0;;;32361:14;:22;;;;;;-1:-1:-1;32416:24:0;;;;;;-1:-1:-1;32189:267:0;32515:7;32487:24;32497:14;32487:7;:24;:::i;:::-;32486:36;;;;:::i;:::-;32472:11;;;:50;32578:7;32553:21;32563:11;32553:7;:21;:::i;:::-;32552:33;;;;:::i;:::-;32537:12;;;:48;;;32636:11;;;;:26;;32537:48;32636:26;:::i;:::-;32625:38;;:7;:38;:::i;:::-;32600:63;;32708:18;;;;32694:11;;;;:32;;32708:18;32694:32;:::i;:::-;32680:11;;;:46;-1:-1:-1;31901:995:0;;-1:-1:-1;;31901:995:0;;32773:1;32759:11;;;:15;;;32789:12;;;:16;;;32820:32;;;32869:11;;;:15;31901:995;32912:12;;;;:16;32908:289;;32986:6;:18;;;32971:6;:12;;;:33;;;;:::i;:::-;32961:4;32945:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;33042:4:0;33022:26;;;;:11;:26;;;;;;;;33019:104;;;33095:12;;;;;33085:4;33069:22;;;;:7;:22;;;;;:38;;33095:12;;33069:22;;:38;;33095:12;;33069:38;:::i;:::-;;;;-1:-1:-1;;33019:104:0;33165:4;-1:-1:-1;;;;;33142:43:0;33151:4;-1:-1:-1;;;;;33142:43:0;;33172:6;:12;;;33142:43;;;;391:25:1;;379:2;364:18;;245:177;33142:43:0;;;;;;;;32908:289;33282:6;:18;;;33267:6;:12;;;:33;;;;:::i;:::-;33252:6;:11;;;:49;;;;:::i;:::-;33234:6;:14;;;:68;;;;:::i;:::-;33209:22;;;:93;:22;31270:2064;-1:-1:-1;;;;;;;;31270:2064:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:184:1;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;2649:258::-;2721:1;2731:113;2745:6;2742:1;2739:13;2731:113;;;2821:11;;;2815:18;2802:11;;;2795:39;2767:2;2760:10;2731:113;;;2862:6;2859:1;2856:13;2853:48;;;2897:1;2888:6;2883:3;2879:16;2872:27;2853:48;;2649:258;;;:::o;2912:442::-;3061:2;3050:9;3043:21;3024:4;3093:6;3087:13;3136:6;3131:2;3120:9;3116:18;3109:34;3152:66;3211:6;3206:2;3195:9;3191:18;3186:2;3178:6;3174:15;3152:66;:::i;:::-;3270:2;3258:15;-1:-1:-1;;3254:88:1;3239:104;;;;3345:2;3235:113;;2912:442;-1:-1:-1;;2912:442:1:o;3607:180::-;3666:6;3719:2;3707:9;3698:7;3694:23;3690:32;3687:52;;;3735:1;3732;3725:12;3687:52;-1:-1:-1;3758:23:1;;3607:180;-1:-1:-1;3607:180:1:o;3792:315::-;3860:6;3868;3921:2;3909:9;3900:7;3896:23;3892:32;3889:52;;;3937:1;3934;3927:12;3889:52;3976:9;3963:23;3995:31;4020:5;3995:31;:::i;:::-;4045:5;4097:2;4082:18;;;;4069:32;;-1:-1:-1;;;3792:315:1:o;4304:382::-;4369:6;4377;4430:2;4418:9;4409:7;4405:23;4401:32;4398:52;;;4446:1;4443;4436:12;4398:52;4485:9;4472:23;4504:31;4529:5;4504:31;:::i;:::-;4554:5;-1:-1:-1;4611:2:1;4596:18;;4583:32;4624:30;4583:32;4624:30;:::i;4691:159::-;4758:20;;4818:6;4807:18;;4797:29;;4787:57;;4840:1;4837;4830:12;4855:328;4929:6;4937;4945;4998:2;4986:9;4977:7;4973:23;4969:32;4966:52;;;5014:1;5011;5004:12;4966:52;5037:28;5055:9;5037:28;:::i;:::-;5027:38;;5084:37;5117:2;5106:9;5102:18;5084:37;:::i;:::-;5074:47;;5140:37;5173:2;5162:9;5158:18;5140:37;:::i;:::-;5130:47;;4855:328;;;;;:::o;5188:456::-;5265:6;5273;5281;5334:2;5322:9;5313:7;5309:23;5305:32;5302:52;;;5350:1;5347;5340:12;5302:52;5389:9;5376:23;5408:31;5433:5;5408:31;:::i;:::-;5458:5;-1:-1:-1;5515:2:1;5500:18;;5487:32;5528:33;5487:32;5528:33;:::i;:::-;5188:456;;5580:7;;-1:-1:-1;;;5634:2:1;5619:18;;;;5606:32;;5188:456::o;5649:662::-;5703:5;5756:3;5749:4;5741:6;5737:17;5733:27;5723:55;;5774:1;5771;5764:12;5723:55;5810:6;5797:20;5836:4;5860:60;5876:43;5916:2;5876:43;:::i;5860:60::-;5954:15;;;6040:1;6036:10;;;;6024:23;;6020:32;;;5985:12;;;;6064:15;;;6061:35;;;6092:1;6089;6082:12;6061:35;6128:2;6120:6;6116:15;6140:142;6156:6;6151:3;6148:15;6140:142;;;6222:17;;6210:30;;6260:12;;;;6173;;6140:142;;6316:595;6434:6;6442;6495:2;6483:9;6474:7;6470:23;6466:32;6463:52;;;6511:1;6508;6501:12;6463:52;6551:9;6538:23;6580:18;6621:2;6613:6;6610:14;6607:34;;;6637:1;6634;6627:12;6607:34;6660:61;6713:7;6704:6;6693:9;6689:22;6660:61;:::i;:::-;6650:71;;6774:2;6763:9;6759:18;6746:32;6730:48;;6803:2;6793:8;6790:16;6787:36;;;6819:1;6816;6809:12;6787:36;;6842:63;6897:7;6886:8;6875:9;6871:24;6842:63;:::i;:::-;6832:73;;;6316:595;;;;;:::o;6916:647::-;6990:6;6998;7006;7014;7067:3;7055:9;7046:7;7042:23;7038:33;7035:53;;;7084:1;7081;7074:12;7035:53;7123:9;7110:23;7142:28;7164:5;7142:28;:::i;:::-;7189:5;-1:-1:-1;7246:2:1;7231:18;;7218:32;7259:30;7218:32;7259:30;:::i;:::-;7308:7;-1:-1:-1;7367:2:1;7352:18;;7339:32;7380:30;7339:32;7380:30;:::i;:::-;7429:7;-1:-1:-1;7488:2:1;7473:18;;7460:32;7501:30;7460:32;7501:30;:::i;:::-;6916:647;;;;-1:-1:-1;6916:647:1;;-1:-1:-1;;6916:647:1:o;7757:247::-;7816:6;7869:2;7857:9;7848:7;7844:23;7840:32;7837:52;;;7885:1;7882;7875:12;7837:52;7924:9;7911:23;7943:31;7968:5;7943:31;:::i;8009:454::-;8104:6;8112;8120;8128;8136;8189:3;8177:9;8168:7;8164:23;8160:33;8157:53;;;8206:1;8203;8196:12;8157:53;-1:-1:-1;;8229:23:1;;;8299:2;8284:18;;8271:32;;-1:-1:-1;8350:2:1;8335:18;;8322:32;;8401:2;8386:18;;8373:32;;-1:-1:-1;8452:3:1;8437:19;8424:33;;-1:-1:-1;8009:454:1;-1:-1:-1;8009:454:1:o;8917:241::-;8973:6;9026:2;9014:9;9005:7;9001:23;8997:32;8994:52;;;9042:1;9039;9032:12;8994:52;9081:9;9068:23;9100:28;9122:5;9100:28;:::i;9163:256::-;9229:6;9237;9290:2;9278:9;9269:7;9265:23;9261:32;9258:52;;;9306:1;9303;9296:12;9258:52;9329:28;9347:9;9329:28;:::i;:::-;9319:38;;9376:37;9409:2;9398:9;9394:18;9376:37;:::i;:::-;9366:47;;9163:256;;;;;:::o;9794:388::-;9862:6;9870;9923:2;9911:9;9902:7;9898:23;9894:32;9891:52;;;9939:1;9936;9929:12;9891:52;9978:9;9965:23;9997:31;10022:5;9997:31;:::i;:::-;10047:5;-1:-1:-1;10104:2:1;10089:18;;10076:32;10117:33;10076:32;10117:33;:::i;10187:730::-;10314:6;10322;10330;10383:2;10371:9;10362:7;10358:23;10354:32;10351:52;;;10399:1;10396;10389:12;10351:52;10439:9;10426:23;10468:18;10509:2;10501:6;10498:14;10495:34;;;10525:1;10522;10515:12;10495:34;10548:61;10601:7;10592:6;10581:9;10577:22;10548:61;:::i;:::-;10538:71;;10662:2;10651:9;10647:18;10634:32;10618:48;;10691:2;10681:8;10678:16;10675:36;;;10707:1;10704;10697:12;10675:36;;10730:63;10785:7;10774:8;10763:9;10759:24;10730:63;:::i;:::-;10720:73;;;10843:2;10832:9;10828:18;10815:32;10856:31;10881:5;10856:31;:::i;:::-;10906:5;10896:15;;;10187:730;;;;;:::o;11876:484::-;11929:3;11967:5;11961:12;11994:6;11989:3;11982:19;12020:4;12049:2;12044:3;12040:12;12033:19;;12086:2;12079:5;12075:14;12107:1;12117:218;12131:6;12128:1;12125:13;12117:218;;;12196:13;;-1:-1:-1;;;;;12192:62:1;12180:75;;12275:12;;;;12310:15;;;;12153:1;12146:9;12117:218;;;-1:-1:-1;12351:3:1;;11876:484;-1:-1:-1;;;;;11876:484:1:o;12365:342::-;12566:2;12555:9;12548:21;12529:4;12586:56;12638:2;12627:9;12623:18;12615:6;12586:56;:::i;:::-;12578:64;;12692:6;12685:14;12678:22;12673:2;12662:9;12658:18;12651:50;12365:342;;;;;:::o;12712:437::-;12791:1;12787:12;;;;12834;;;12855:61;;12909:4;12901:6;12897:17;12887:27;;12855:61;12962:2;12954:6;12951:14;12931:18;12928:38;12925:218;;;12999:77;12996:1;12989:88;13100:4;13097:1;13090:15;13128:4;13125:1;13118:15;12925:218;;12712:437;;;:::o;13490:184::-;13542:77;13539:1;13532:88;13639:4;13636:1;13629:15;13663:4;13660:1;13653:15;13679:482;13768:1;13811:5;13768:1;13825:330;13846:7;13836:8;13833:21;13825:330;;;13965:4;-1:-1:-1;;13893:77:1;13887:4;13884:87;13881:113;;;13974:18;;:::i;:::-;14024:7;14014:8;14010:22;14007:55;;;14044:16;;;;14007:55;14123:22;;;;14083:15;;;;13825:330;;;13829:3;13679:482;;;;;:::o;14166:866::-;14215:5;14245:8;14235:80;;-1:-1:-1;14286:1:1;14300:5;;14235:80;14334:4;14324:76;;-1:-1:-1;14371:1:1;14385:5;;14324:76;14416:4;14434:1;14429:59;;;;14502:1;14497:130;;;;14409:218;;14429:59;14459:1;14450:10;;14473:5;;;14497:130;14534:3;14524:8;14521:17;14518:43;;;14541:18;;:::i;:::-;-1:-1:-1;;14597:1:1;14583:16;;14612:5;;14409:218;;14711:2;14701:8;14698:16;14692:3;14686:4;14683:13;14679:36;14673:2;14663:8;14660:16;14655:2;14649:4;14646:12;14642:35;14639:77;14636:159;;;-1:-1:-1;14748:19:1;;;14780:5;;14636:159;14827:34;14852:8;14846:4;14827:34;:::i;:::-;14957:6;-1:-1:-1;;14885:79:1;14876:7;14873:92;14870:118;;;14968:18;;:::i;:::-;15006:20;;14166:866;-1:-1:-1;;;14166:866:1:o;15037:140::-;15095:5;15124:47;15165:4;15155:8;15151:19;15145:4;15124:47;:::i;15182:228::-;15222:7;15348:1;-1:-1:-1;;15276:74:1;15273:1;15270:81;15265:1;15258:9;15251:17;15247:105;15244:131;;;15355:18;;:::i;:::-;-1:-1:-1;15395:9:1;;15182:228::o;15415:184::-;15467:77;15464:1;15457:88;15564:4;15561:1;15554:15;15588:4;15585:1;15578:15;15604:120;15644:1;15670;15660:35;;15675:18;;:::i;:::-;-1:-1:-1;15709:9:1;;15604:120::o;16443:184::-;16495:77;16492:1;16485:88;16592:4;16589:1;16582:15;16616:4;16613:1;16606:15;16632:184;16684:77;16681:1;16674:88;16781:4;16778:1;16771:15;16805:4;16802:1;16795:15;16821:125;16861:4;16889:1;16886;16883:8;16880:34;;;16894:18;;:::i;:::-;-1:-1:-1;16931:9:1;;16821:125::o;16951:195::-;16990:3;-1:-1:-1;;17014:5:1;17011:77;17008:103;;;17091:18;;:::i;:::-;-1:-1:-1;17138:1:1;17127:13;;16951:195::o;17151:224::-;17190:3;17218:6;17251:2;17248:1;17244:10;17281:2;17278:1;17274:10;17312:3;17308:2;17304:12;17299:3;17296:21;17293:47;;;17320:18;;:::i;:::-;17356:13;;17151:224;-1:-1:-1;;;;17151:224:1:o;17380:217::-;17419:4;17448:6;17504:10;;;;17474;;17526:12;;;17523:38;;;17541:18;;:::i;:::-;17578:13;;17380:217;-1:-1:-1;;;17380:217:1:o;17952:175::-;17989:3;18033:4;18026:5;18022:16;18062:4;18053:7;18050:17;18047:43;;;18070:18;;:::i;:::-;18119:1;18106:15;;17952:175;-1:-1:-1;;17952:175:1:o;18568:128::-;18608:3;18639:1;18635:6;18632:1;18629:13;18626:39;;;18645:18;;:::i;:::-;-1:-1:-1;18681:9:1;;18568:128::o;22481:556::-;22535:5;22588:3;22581:4;22573:6;22569:17;22565:27;22555:55;;22606:1;22603;22596:12;22555:55;22635:6;22629:13;22661:18;22657:2;22654:26;22651:52;;;22683:18;;:::i;:::-;22727:114;22835:4;-1:-1:-1;;22759:4:1;22755:2;22751:13;22747:86;22743:97;22727:114;:::i;:::-;22866:2;22857:7;22850:19;22912:3;22905:4;22900:2;22892:6;22888:15;22884:26;22881:35;22878:55;;;22929:1;22926;22919:12;22878:55;22942:64;23003:2;22996:4;22987:7;22983:18;22976:4;22968:6;22964:17;22942:64;:::i;23042:774::-;23157:6;23165;23173;23181;23234:3;23222:9;23213:7;23209:23;23205:33;23202:53;;;23251:1;23248;23241:12;23202:53;23284:9;23278:16;23313:18;23354:2;23346:6;23343:14;23340:34;;;23370:1;23367;23360:12;23340:34;23393:61;23446:7;23437:6;23426:9;23422:22;23393:61;:::i;:::-;23383:71;;23500:2;23489:9;23485:18;23479:25;23463:41;;23529:2;23519:8;23516:16;23513:36;;;23545:1;23542;23535:12;23513:36;;23568:63;23623:7;23612:8;23601:9;23597:24;23568:63;:::i;:::-;23558:73;;;23671:2;23660:9;23656:18;23650:25;23640:35;;23718:2;23707:9;23703:18;23697:25;23762:4;23755:5;23751:16;23744:5;23741:27;23731:55;;23782:1;23779;23772:12;24152:112;24184:1;24210;24200:35;;24215:18;;:::i;:::-;-1:-1:-1;24249:9:1;;24152:112::o;24269:251::-;24339:6;24392:2;24380:9;24371:7;24367:23;24363:32;24360:52;;;24408:1;24405;24398:12;24360:52;24440:9;24434:16;24459:31;24484:5;24459:31;:::i;25492:306::-;25580:6;25588;25596;25649:2;25637:9;25628:7;25624:23;25620:32;25617:52;;;25665:1;25662;25655:12;25617:52;25694:9;25688:16;25678:26;;25744:2;25733:9;25729:18;25723:25;25713:35;;25788:2;25777:9;25773:18;25767:25;25757:35;;25492:306;;;;;:::o;26580:245::-;26647:6;26700:2;26688:9;26679:7;26675:23;26671:32;26668:52;;;26716:1;26713;26706:12;26668:52;26748:9;26742:16;26767:28;26789:5;26767:28;:::i;29571:605::-;29870:6;29859:9;29852:25;29913:6;29908:2;29897:9;29893:18;29886:34;29956:3;29951:2;29940:9;29936:18;29929:31;29833:4;29977:57;30029:3;30018:9;30014:19;30006:6;29977:57;:::i;:::-;-1:-1:-1;;;;;30070:55:1;;;;30065:2;30050:18;;30043:83;-1:-1:-1;30157:3:1;30142:19;30135:35;29969:65;29571:605;-1:-1:-1;;;29571:605:1:o

Swarm Source

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