ETH Price: $3,442.88 (-2.10%)
Gas: 2 Gwei

Token

Millionaire Lifestyle Token ($MLT)
 

Overview

Max Total Supply

500,000,000,000 $MLT

Holders

222

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
377,668,062.2341258 $MLT

Value
$0.00
0x3732128e2668dd29d6eee8cead1bef4f08e49087
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:
MillionaireLifestyleToken

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-01-07
*/

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

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

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

interface 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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    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;
}

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 _ab, bool _algo) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    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;
}

contract MillionaireLifestyleToken is Context, 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 _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 500_000_000_000;

    string constant private _name = "Millionaire Lifestyle Token";
    string constant private _symbol = "$MLT";
    uint8 private _decimals = 9;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    struct CurrentFees {
        uint16 reflect;
        uint16 totalSwap;
    }

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

    struct StaticValuesStruct {
        uint16 maxReflect;
        uint16 maxLiquidity;
        uint16 maxMarketing;
        uint16 maxDevelopment;
        uint16 masterTaxDivisor;
    }

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

    CurrentFees private currentTaxes = CurrentFees({
        reflect: 0,
        totalSwap: 0
        });

    Fees public _buyTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 500,
        development: 300,
        totalSwap: 1000
        });

    Fees public _sellTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 1900,
        development: 300,
        totalSwap: 2400
        });

    Fees public _transferTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 500,
        development: 300,
        totalSwap: 1000
        });

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 5,
        development: 3,
        total: 10
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflect: 800,
        maxLiquidity: 800,
        maxMarketing: 800,
        maxDevelopment: 800,
        masterTaxDivisor: 10000
        });

    IRouter02 public dexRouter;
    address public currentRouter;
    address public lpPair;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
        address liquidityReceiver;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xdf0ba8878c18be5A909dA149F48e00834e01017c),
        development: payable(0x650aa9b0e56801c209C52c5304686033f50b71B7),
        liquidityReceiver: 0xb0ea991FACF220F435eaBc66144d187ef2Eda60f
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private _maxTxAmount = (_tTotal * 1) / 100;
    uint256 private _maxWalletSize = (_tTotal * 2) / 100;
    uint256 public swapThreshold = (_tTotal * 5) / 10000;
    uint256 public swapAmount = (_tTotal * 10) / 10000;

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

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _rOwned[_msgSender()] = _rTotal;

        // Set the owner.
        _owner = msg.sender;

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

        dexRouter = IRouter02(currentRouter);
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(msg.sender, currentRouter, type(uint256).max);
        _approve(address(this), currentRouter, type(uint256).max);

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

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 owner() public view returns (address) {
        return _owner;
    }

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

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

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure 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(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        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 changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        currentRouter = router;
    }

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

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

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

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (!enabled) {
            require(_isExcluded[account], "Account is already included.");
            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];
                        _rOwned[account] = _tOwned[account] * _getRate();
                        _tOwned[account] = 0;
                        _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 setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    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 removeBlacklisted(address account) external onlyOwner {
        antiSnipe.removeBlacklisted(account);
    }

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

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock, bool _algo) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock, _algo);
    }
    
    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing
                && development <= staticVals.maxDevelopment);
        uint16 check = reflect + liquidity + marketing + development;
        require(check <= 2500);
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
        _buyTaxes.development = development;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing
                && development <= staticVals.maxDevelopment);
        uint16 check = reflect + liquidity + marketing + development;
        require(check <= 2500);
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
        _sellTaxes.development = development;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing
                && development <= staticVals.maxDevelopment);
        uint16 check = reflect + liquidity + marketing + development;
        require(check <= 2500);
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
        _transferTaxes.development = development;
        _transferTaxes.totalSwap = check - reflect;
    }

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

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

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

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

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

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

    function setWallets(address payable marketing, address payable development, address liquidityReceiver) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        if (_taxWallets.liquidityReceiver != address(0)) {
            _taxWallets.liquidityReceiver = liquidityReceiver;
        }
    }

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

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && 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");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != currentRouter && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

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

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

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.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 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                _taxWallets.liquidityReceiver,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0 && _ratios.total - _ratios.liquidity > 0) {
            uint256 amountETH = address(this).balance;
            _taxWallets.development.transfer(amountETH * _ratios.development / (_ratios.total - _ratios.liquidity));
            _taxWallets.marketing.transfer(address(this).balance);
        }
    }

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

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

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

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

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

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

        if (values.tSwap > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + (values.tSwap * _getRate());
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + values.tSwap;
            emit Transfer(from, address(this), values.tSwap); // Transparency is the key to success.
        }
        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) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

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

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

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.totalSwap = _sellTaxes.totalSwap;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.totalSwap = _buyTaxes.totalSwap;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.totalSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / staticVals.masterTaxDivisor;
            values.tSwap = (tAmount * currentTaxes.totalSwap) / staticVals.masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        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":"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","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":"development","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":"development","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 payable","name":"development","type":"address"},{"internalType":"address","name":"liquidityReceiver","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":"development","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":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"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":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","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":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_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"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","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"},{"internalType":"uint16","name":"development","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"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address","name":"liquidityReceiver","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflect","type":"uint16"},{"internalType":"uint16","name":"maxLiquidity","type":"uint16"},{"internalType":"uint16","name":"maxMarketing","type":"uint16"},{"internalType":"uint16","name":"maxDevelopment","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","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":"pure","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"}]

6080604052600060045564746a528800600a908155600b805460ff191660099081179091556200002f91620008d2565b600a546200003e9190620008ea565b600c819055620000519060001962000922565b6200005f9060001962000939565b600d556040805180820182526000808252602091820152600e805463ffffffff19169055815160a08082018452606480835260c88385018190526101f484870181905261012c60608087018290526103e86080978801819052600f80546001600160501b03199081166903e8012c01f400c800649081179092558b51808a018d52888152808c0188905261076c818e0152808501869052610960908b0152601080548216690960012c076c00c800641790558b51808a018d52888152808c0197909752868c0195909552858301939093529387019390935260118054831690911790558651808601885260028152600581880152600381890152600a90830152601280546001600160401b031916660a00030005000217905586519384018752610320808552848701819052848801819052848301526127109390940192909252601380549093166927100320032003200320179092558351908101845273df0ba8878c18be5a909da149f48e00834e01017c80825273650aa9b0e56801c209c52c5304686033f50b71b793820184905273b0ea991facf220f435eabc66144d187ef2eda60f91909401819052601780546001600160a01b0319908116909517905560188054851690931790925560198054909316909117909155601a805461ff0019169055600c5462000255906001620008ea565b62000261919062000953565b601b556064600c546002620002779190620008ea565b62000283919062000953565b601c55612710600c5460056200029a9190620008ea565b620002a6919062000953565b601d55612710600c54600a620002bd9190620008ea565b620002c9919062000953565b601e55601f805461ffff19169055600d543360008181526001602052604081209290925581546001600160a01b03191617905546603814156200033257601580546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620003af565b46606114156200036857601580546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620003af565b4660011480620003785750466004145b15620003aa57601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620003af565b600080fd5b601554601480546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200040c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043291906200096a565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000494573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ba91906200096a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000507573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052d91906200096a565b601680546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260409020805460ff191660011790556015546200057991339116600019620006bc565b601554620005959030906001600160a01b0316600019620006bc565b600160066000620005ae6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600990620006366000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620006663390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620006ae91815260200190565b60405180910390a362000995565b6001600160a01b0383166200070e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200075c5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000705565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000814578160001904821115620007f857620007f8620007bd565b808516156200080657918102915b93841c9390800290620007d8565b509250929050565b6000826200082d57506001620008cc565b816200083c57506000620008cc565b8160018114620008555760028114620008605762000880565b6001915050620008cc565b60ff841115620008745762000874620007bd565b50506001821b620008cc565b5060208310610133831016604e8410600b8410161715620008a5575081810a620008cc565b620008b18383620007d3565b8060001904821115620008c857620008c8620007bd565b0290505b92915050565b6000620008e360ff8416836200081c565b9392505050565b6000816000190483118215151615620009075762000907620007bd565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200093457620009346200090c565b500690565b6000828210156200094e576200094e620007bd565b500390565b6000826200096557620009656200090c565b500490565b6000602082840312156200097d57600080fd5b81516001600160a01b0381168114620008e357600080fd5b6150d780620009a56000396000f3fe6080604052600436106103bc5760003560e01c806370a08231116101f2578063bc77169d1161010d578063e8a0e3f9116100a0578063f94aa1b41161006f578063f94aa1b414610c9e578063fb78680d14610cf5578063fdb78c0e14610d15578063fe575a8714610d3457600080fd5b8063e8a0e3f914610c29578063eafb5a3c14610c49578063ee5d9c2d14610c69578063eec2744e14610c7e57600080fd5b8063c6a276c2116100dc578063c6a276c214610b38578063cab5ebea14610b58578063cf84770614610b78578063dd62ed3e14610be357600080fd5b8063bc77169d14610a5e578063becdf13f14610a7e578063c2fa418f14610a9e578063c6831cd814610aeb57600080fd5b80638a8c523c11610185578063a9059cbb11610154578063a9059cbb146109de578063aa22b172146109fe578063aa54547314610a1e578063b6f8f8dc14610a3e57600080fd5b80638a8c523c146109635780638da5cb5b1461093057806395d89b4114610978578063a457c2d7146109be57600080fd5b806380c581d1116101c157806380c581d1146108d757806388f82020146108f7578063893d20e8146109305780638a63bd9b1461094e57600080fd5b806370a0823114610835578063715018a61461085557806375cb1bd11461086a5780637b45d4311461088a57600080fd5b80632d838119116102e25780634ada218b1161027557806355dbc3691161024457806355dbc369146107cb578063590ffdce146107e05780635c24b074146108005780636ebd00781461082057600080fd5b80634ada218b146107395780634fb2e45d146107535780634fbee1931461077357806350a8e016146107ac57600080fd5b8063384f36b6116102b1578063384f36b6146106b957806339509351146106d95780633f3cf56c146106f9578063452ed4f11461071957600080fd5b80632d838119146106415780632e8fa82114610661578063313ce5671461067757806333251a0b1461069957600080fd5b8063122fea3b1161035a57806323b872dd1161032957806323b872dd146105cc57806326003957146105ec5780632610eaca1461060c5780632b112e491461062c57600080fd5b8063122fea3b146104f557806313e461921461051557806318160ddd146105355780631b6afa2d1461054a57600080fd5b806306fdde031161039657806306fdde03146104415780630758d92414610490578063095ea7b3146104b05780630fa604e4146104e057600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610411601d5481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614858565b610d54565b005b34801561044d57600080fd5b5060408051808201909152601b81527f4d696c6c696f6e61697265204c6966657374796c6520546f6b656e000000000060208201525b6040516103f291906148aa565b34801561049c57600080fd5b506014546103de906001600160a01b031681565b3480156104bc57600080fd5b506104d06104cb3660046148ff565b610e2d565b60405190151581526020016103f2565b3480156104ec57600080fd5b50610411610e44565b34801561050157600080fd5b506015546103de906001600160a01b031681565b34801561052157600080fd5b5061043f61053036600461492b565b610e6a565b34801561054157600080fd5b50600c54610411565b34801561055657600080fd5b506013546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b3480156105d857600080fd5b506104d06105e7366004614959565b61128f565b3480156105f857600080fd5b5061043f61060736600461499a565b611307565b34801561061857600080fd5b5061043f610627366004614a17565b611412565b34801561063857600080fd5b50610411611517565b34801561064d57600080fd5b5061041161065c366004614a7b565b611545565b34801561066d57600080fd5b50610411601e5481565b34801561068357600080fd5b50600b5460405160ff90911681526020016103f2565b3480156106a557600080fd5b5061043f6106b4366004614a94565b6115dc565b3480156106c557600080fd5b5061043f6106d4366004614a94565b6116ad565b3480156106e557600080fd5b506104d06106f43660046148ff565b61173f565b34801561070557600080fd5b5061043f61071436600461499a565b61177b565b34801561072557600080fd5b506016546103de906001600160a01b031681565b34801561074557600080fd5b50601f546104d09060ff1681565b34801561075f57600080fd5b5061043f61076e366004614a94565b611886565b34801561077f57600080fd5b506104d061078e366004614a94565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107b857600080fd5b50601f546104d090610100900460ff1681565b3480156107d757600080fd5b50610411611a85565b3480156107ec57600080fd5b5061043f6107fb36600461492b565b611afe565b34801561080c57600080fd5b5061043f61081b366004614a94565b611b77565b34801561082c57600080fd5b50610411611cb6565b34801561084157600080fd5b50610411610850366004614a94565b611cd7565b34801561086157600080fd5b5061043f611d36565b34801561087657600080fd5b5061043f610885366004614ab1565b611de6565b34801561089657600080fd5b50600f546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b3480156108e357600080fd5b5061043f6108f236600461492b565b611ea7565b34801561090357600080fd5b506104d0610912366004614a94565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561093c57600080fd5b506000546001600160a01b03166103de565b34801561095a57600080fd5b506104d0612063565b34801561096f57600080fd5b5061043f6120d2565b34801561098457600080fd5b5060408051808201909152600481527f244d4c54000000000000000000000000000000000000000000000000000000006020820152610483565b3480156109ca57600080fd5b506104d06109d93660046148ff565b6122c2565b3480156109ea57600080fd5b506104d06109f93660046148ff565b6122f9565b348015610a0a57600080fd5b5061043f610a19366004614b13565b612310565b348015610a2a57600080fd5b5061043f610a39366004614b56565b6123f1565b348015610a4a57600080fd5b5061043f610a59366004614baa565b6125bd565b348015610a6a57600080fd5b5061043f610a79366004614b56565b61269d565b348015610a8a57600080fd5b5061043f610a99366004614b56565b612869565b348015610aaa57600080fd5b506011546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610af757600080fd5b506010546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b4457600080fd5b5061043f610b53366004614a94565b612a35565b348015610b6457600080fd5b5061043f610b73366004614bea565b612ad5565b348015610b8457600080fd5b50601254610bb59061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610bef57600080fd5b50610411610bfe366004614c07565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c3557600080fd5b5061043f610c44366004614c35565b612b77565b348015610c5557600080fd5b5061043f610c64366004614a94565b612cd4565b348015610c7557600080fd5b5061043f613083565b348015610c8a57600080fd5b5061043f610c9936600461492b565b613166565b348015610caa57600080fd5b50601754601854601954610ccb926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610d0157600080fd5b5061043f610d10366004614cbd565b61320e565b348015610d2157600080fd5b50601a546104d090610100900460ff1681565b348015610d4057600080fd5b506104d0610d4f366004614a94565b61329b565b6000546001600160a01b03163314610da75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610df79085908590600401614d33565b600060405180830381600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050505050565b6000610e3a338484613329565b5060015b92915050565b600b54600090610e589060ff16600a614e6a565b601c54610e659190614e79565b905090565b6000546001600160a01b03163314610eb85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b8015610ff5576001600160a01b03821660009081526007602052604090205460ff1615610f275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d9e565b6001600160a01b03821660009081526001602052604090205415610f81576001600160a01b038216600090815260016020526040902054610f6790611545565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b8061128b576001600160a01b03821660009081526007602052604090205460ff166110625760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d9e565b6008546001141561111257611075613436565b6001600160a01b0383166000908152600260205260409020546110989190614eb4565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff1916905560088054806110df576110df614ed3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561128957826001600160a01b03166008828154811061113c5761113c614f02565b6000918252602090912001546001600160a01b03161415611277576008805461116790600190614f31565b8154811061117757611177614f02565b600091825260209091200154600880546001600160a01b0390921691839081106111a3576111a3614f02565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506111d9613436565b6001600160a01b0384166000908152600260205260409020546111fc9190614eb4565b6001600160a01b038416600090815260016020908152604080832093909355600281528282208290556007905220805460ff19169055600880548061124357611243614ed3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611289565b8061128181614f48565b915050611115565b505b5050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146112f4576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906112ee908490614f31565b90915550505b6112ff8484846135e1565b949350505050565b6000546001600160a01b031633146113555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6103e8600c546113659190614e79565b8183600c546113749190614eb4565b61137e9190614e79565b10156113f25760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d9e565b8082600c546114019190614eb4565b61140b9190614e79565b601c555050565b80518251146114635760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d9e565b60005b82518160ff16101561128957818160ff168151811061148757611487614f02565b602002602001015161149833611cd7565b10156114a357600080fd5b61150433848360ff16815181106114bc576114bc614f02565b6020908102919091010151600b546114d89060ff16600a614e6a565b858560ff16815181106114ed576114ed614f02565b60200260200101516114ff9190614eb4565b6135e1565b508061150f81614f63565b915050611466565b60006115236000611cd7565b61152e61dead611cd7565b6115389190614f83565b600c54610e659190614f31565b6000600d548211156115bf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d9e565b60006115c9613436565b90506115d58184614e79565b9392505050565b6000546001600160a01b0316331461162a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b15801561169257600080fd5b505af11580156116a6573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f54610100900460ff161561171057600080fd5b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e3a918590611776908690614f83565b613329565b6000546001600160a01b031633146117c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6103e8600c546117d99190614e79565b8183600c546117e89190614eb4565b6117f29190614e79565b10156118665760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d9e565b8082600c546118759190614eb4565b61187f9190614e79565b601b555050565b6000546001600160a01b031633146118d45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6001600160a01b0381166119505760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d9e565b6001600160a01b03811661dead14156119d15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d9e565b600080546119ea916001600160a01b0390911690611afe565b6119f5816001611afe565b60008054611a0b906001600160a01b0316611cd7565b1115611a2d57600054611a2b906001600160a01b0316826114ff82611cd7565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601f60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e659190614f9b565b6000546001600160a01b03163314611b4c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bc55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f54610100900460ff1615611c1d5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d9e565b6001600160a01b038116301415611c765760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d9e565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611cca9060ff16600a614e6a565b601b54610e659190614e79565b6001600160a01b03811660009081526007602052604081205460ff1615611d1457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e3e90611545565b6000546001600160a01b03163314611d845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60008054611d9d916001600160a01b0390911690611afe565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611e345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601780546001600160a01b0380861673ffffffffffffffffffffffffffffffffffffffff1992831617909255601880548584169216919091179055601954161561128957601980546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff19909116179055505050565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b80611f81576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e1157600080fd5b60045415611fe8576203f48060045442611f9b9190614f31565b11611fe85760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d9e565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610df7565b600080546001600160a01b031633146120b25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6014546120cc9030906001600160a01b0316600019613329565b50600190565b6000546001600160a01b031633146121205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f5460ff16156121735760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d9e565b601f54610100900460ff166121ca5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d9e565b601f546201000090046001600160a01b031661221057601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f54601654600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156122a157600080fd5b505af19250505080156122b2575060015b50601f805460ff19166001179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e3a918590611776908690614f31565b60006123063384846135e1565b5060019392505050565b6000546001600160a01b0316331461235e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6012805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff19909416928816929092179290921716179055806123bb8385614fb4565b6123c59190614fb4565b6012805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b0316331461243f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60135461ffff90811690851611801590612469575060135461ffff62010000909104811690841611155b8015612487575060135461ffff640100000000909104811690831611155b80156124a7575060135461ffff6601000000000000909104811690821611155b6124b057600080fd5b600081836124be8688614fb4565b6124c89190614fb4565b6124d29190614fb4565b90506109c48161ffff1611156124e757600080fd5b6011805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556125768582614fda565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461260b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b15801561268057600080fd5b505af1158015612694573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146126eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60135461ffff90811690851611801590612715575060135461ffff62010000909104811690841611155b8015612733575060135461ffff640100000000909104811690831611155b8015612753575060135461ffff6601000000000000909104811690821611155b61275c57600080fd5b6000818361276a8688614fb4565b6127749190614fb4565b61277e9190614fb4565b90506109c48161ffff16111561279357600080fd5b600f805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556128228582614fda565b600f805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146128b75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60135461ffff908116908516118015906128e1575060135461ffff62010000909104811690841611155b80156128ff575060135461ffff640100000000909104811690831611155b801561291f575060135461ffff6601000000000000909104811690821611155b61292857600080fd5b600081836129368688614fb4565b6129409190614fb4565b61294a9190614fb4565b90506109c48161ffff16111561295f57600080fd5b6010805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556129ee8582614fda565b6010805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612a835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611678565b6000546001600160a01b03163314612b235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612b6c90831515815260200190565b60405180910390a150565b81518351148015612b89575080518251145b612bd55760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d9e565b60005b83518160ff161015612cce57818160ff1681518110612bf957612bf9614f02565b6020026020010151838260ff1681518110612c1657612c16614f02565b6020026020010151600c54612c2b9190614eb4565b612c359190614e79565b612c3e33611cd7565b1015612c4957600080fd5b612cbb33858360ff1681518110612c6257612c62614f02565b6020026020010151848460ff1681518110612c7f57612c7f614f02565b6020026020010151868560ff1681518110612c9c57612c9c614f02565b6020026020010151600c54612cb19190614eb4565b6114ff9190614e79565b5080612cc681614f63565b915050612bd8565b50505050565b6000546001600160a01b03163314612d225760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8b9190614ffd565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfc9190614ffd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e839190614ffd565b90506001600160a01b03811661302157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614ffd565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f669190614ffd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614ffd565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905561304a565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611289903090600019613329565b6000546001600160a01b031633146130d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f54610100900460ff16156131295760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d9e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613163573d6000803e3d6000fd5b50565b6000546001600160a01b031633146131b45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610df7565b6000546001600160a01b0316331461325c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b8284600c5461326b9190614eb4565b6132759190614e79565b601d55600c548190613288908490614eb4565b6132929190614e79565b601e5550505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613305573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e919061501a565b6001600160a01b03831661337f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d9e565b6001600160a01b0382166133d55760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d9e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d54600c546008546000929190156135a95760005b60085460ff821610156135a757826001600060088460ff168154811061347457613474614f02565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806134e25750816002600060088460ff16815481106134bb576134bb614f02565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156134ff57600c54600d546134f79190614e79565b935050505090565b6001600060088360ff168154811061351957613519614f02565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135489084614f31565b92506002600060088360ff168154811061356457613564614f02565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135939083614f31565b91508061359f81614f63565b91505061344c565b505b600c54600d546135b99190614e79565b8210156135d757600c54600d546135d09190614e79565b9250505090565b6135d08183614e79565b60006001600160a01b03841661365f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d9e565b6001600160a01b0383166136db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d9e565b600082116137515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d9e565b61375b8484613a04565b1561393557601f5460ff166137b25760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d9e565b6001600160a01b03841660009081526003602052604090205460ff16806137f157506001600160a01b03831660009081526003602052604090205460ff165b1561386e57601b5482111561386e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d9e565b6015546001600160a01b038481169116148015906138a557506001600160a01b03831660009081526003602052604090205460ff16155b1561393557601c54826138b785611cd7565b6138c19190614f83565b11156139355760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d9e565b6001600160a01b03841660009081526006602052604090205460019060ff168061397757506001600160a01b03841660009081526006602052604090205460ff165b15613980575060005b6001600160a01b03841660009081526003602052604090205460ff16156139ef57601a5460ff161580156139bb5750601a54610100900460ff165b156139ef5760006139cb30611cd7565b9050601d5481106139ed57601e5481106139e45750601e545b6139ed81613ad8565b505b6139fb85858584613f4c565b95945050505050565b600080546001600160a01b03848116911614801590613a3157506000546001600160a01b03838116911614155b8015613a4857506000546001600160a01b03163214155b8015613a6d57506001600160a01b03821660009081526009602052604090205460ff16155b8015613a9257506001600160a01b03831660009081526009602052604090205460ff16155b8015613aa957506001600160a01b03821661dead14155b8015613abd57506001600160a01b03821615155b80156115d557506001600160a01b0383163014159392505050565b601a805460ff1916600117905560125461ffff660100000000000090910416613b0057613f3f565b3060009081526005602090815260408083206014546001600160a01b0316845290915290205460001914613b59573060009081526005602090815260408083206014546001600160a01b03168452909152902060001990555b60125460009060029061ffff66010000000000008204811691613b7d911685614eb4565b613b879190614e79565b613b919190614e79565b90506000613b9f8284614f31565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613bd957613bd9614f02565b6001600160a01b03928316602091820292909201810191909152601454604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6f9190614ffd565b81600181518110613c8257613c82614f02565b6001600160a01b0392831660209182029290920101526014546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613ce1908590600090869030904290600401615037565b600060405180830381600087803b158015613cfb57600080fd5b505af1158015613d0f573d6000803e3d6000fd5b5050601254600092506002915061ffff66010000000000008204811691613d37911647614eb4565b613d419190614e79565b613d4b9190614e79565b90508315613e46576014546019546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ddc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e019190615073565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600047118015613e785750601254600090613e729061ffff808216916601000000000000900416614fda565b61ffff16115b15613f3a5760185460125447916001600160a01b0316906108fc90613eae9061ffff808216916601000000000000900416614fda565b60125461ffff91821691613ecb9164010000000090041685614eb4565b613ed59190614e79565b6040518115909202916000818181858888f19350505050158015613efd573d6000803e3d6000fd5b506017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613f37573d6000803e3d6000fd5b50505b505050505b50601a805460ff19169055565b601f54600090610100900460ff16613ff857613f6885856142b0565b601f54610100900460ff16158015613f855750613f858585613a04565b15613ff85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d9e565b60006140068686868661440e565b60808101516001600160a01b03881660009081526001602052604090205491925061403091614f31565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546140679190614f83565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156140d9576001600160a01b0386166000908152600260205260409020546140bf908590614f31565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff16156141395780516001600160a01b03861660009081526002602052604090205461411f9190614f83565b6001600160a01b0386166000908152600260205260409020555b60408101511561421b5761414b613436565b816040015161415a9190614eb4565b306000908152600160205260409020546141749190614f83565b3060009081526001602090815260408083209390935560079052205460ff16156141c957604080820151306000908152600260205291909120546141b89190614f83565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161421291815260200190565b60405180910390a35b60008160a001511180614232575060008160200151115b15614253578060a00151600d600082825461424d9190614f31565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161429c91815260200190565b60405180910390a350600195945050505050565b601f54610100900460ff161561432e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d9e565b6143388282613a04565b15801561435257506016546001600160a01b038281169116145b1561128b576001600160a01b038083166000908152600960205260409020805460ff19166001179055601f805461ff0019166101001790819055620100009004166143c757601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6144476040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6144806040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061448a613436565b90506144968186614eb4565b60808301526144a58787613a04565b1561455857601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614541575060408051601f3d908101601f1916820190925261453e9181019061501a565b60015b61454a57600080fd5b90508061455657600080fd5b505b83156146e7576001600160a01b03861660009081526003602052604090205460ff16156145b757601054600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614644565b6001600160a01b03871660009081526003602052604090205460ff161561461057600f54600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614644565b601154600e805461ffff80841663ffffffff1990921691909117680100000000000000009093041662010000029190911790555b601354600e5461ffff68010000000000000000909204821691614668911687614eb4565b6146729190614e79565b6020830152601354600e5461ffff680100000000000000009092048216916146a1916201000090041687614eb4565b6146ab9190614e79565b6040830181905260208301516146c19190614f83565b6146cb9086614f31565b825260208201516146dd908290614eb4565b60a0830152614700565b6000602083018190526040830181905285835260a08301525b8082604001516147109190614eb4565b8260a0015161471f9190614f83565b826080015161472e9190614f31565b60608301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156147955761479561473d565b604052919050565b600067ffffffffffffffff8211156147b7576147b761473d565b5060051b60200190565b6001600160a01b038116811461316357600080fd5b600082601f8301126147e757600080fd5b813560206147fc6147f78361479d565b61476c565b82815260059290921b8401810191818101908684111561481b57600080fd5b8286015b8481101561483f578035614832816147c1565b835291830191830161481f565b509695505050505050565b801515811461316357600080fd5b6000806040838503121561486b57600080fd5b823567ffffffffffffffff81111561488257600080fd5b61488e858286016147d6565b925050602083013561489f8161484a565b809150509250929050565b600060208083528351808285015260005b818110156148d7578581018301518582016040015282016148bb565b818111156148e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561491257600080fd5b823561491d816147c1565b946020939093013593505050565b6000806040838503121561493e57600080fd5b8235614949816147c1565b9150602083013561489f8161484a565b60008060006060848603121561496e57600080fd5b8335614979816147c1565b92506020840135614989816147c1565b929592945050506040919091013590565b600080604083850312156149ad57600080fd5b50508035926020909101359150565b600082601f8301126149cd57600080fd5b813560206149dd6147f78361479d565b82815260059290921b840181019181810190868411156149fc57600080fd5b8286015b8481101561483f5780358352918301918301614a00565b60008060408385031215614a2a57600080fd5b823567ffffffffffffffff80821115614a4257600080fd5b614a4e868387016147d6565b93506020850135915080821115614a6457600080fd5b50614a71858286016149bc565b9150509250929050565b600060208284031215614a8d57600080fd5b5035919050565b600060208284031215614aa657600080fd5b81356115d5816147c1565b600080600060608486031215614ac657600080fd5b8335614ad1816147c1565b92506020840135614ae1816147c1565b91506040840135614af1816147c1565b809150509250925092565b803561ffff81168114614b0e57600080fd5b919050565b600080600060608486031215614b2857600080fd5b614b3184614afc565b9250614b3f60208501614afc565b9150614b4d60408501614afc565b90509250925092565b60008060008060808587031215614b6c57600080fd5b614b7585614afc565b9350614b8360208601614afc565b9250614b9160408601614afc565b9150614b9f60608601614afc565b905092959194509250565b600080600060608486031215614bbf57600080fd5b8335614bca8161484a565b92506020840135614bda8161484a565b91506040840135614af18161484a565b600060208284031215614bfc57600080fd5b81356115d58161484a565b60008060408385031215614c1a57600080fd5b8235614c25816147c1565b9150602083013561489f816147c1565b600080600060608486031215614c4a57600080fd5b833567ffffffffffffffff80821115614c6257600080fd5b614c6e878388016147d6565b94506020860135915080821115614c8457600080fd5b614c90878388016149bc565b93506040860135915080821115614ca657600080fd5b50614cb3868287016149bc565b9150509250925092565b60008060008060808587031215614cd357600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614d285781516001600160a01b031687529582019590820190600101614d03565b509495945050505050565b604081526000614d466040830185614cef565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614dc1578160001904821115614da757614da7614d57565b80851615614db457918102915b93841c9390800290614d8b565b509250929050565b600082614dd857506001610e3e565b81614de557506000610e3e565b8160018114614dfb5760028114614e0557614e21565b6001915050610e3e565b60ff841115614e1657614e16614d57565b50506001821b610e3e565b5060208310610133831016604e8410600b8410161715614e44575081810a610e3e565b614e4e8383614d86565b8060001904821115614e6257614e62614d57565b029392505050565b60006115d560ff841683614dc9565b600082614eaf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614ece57614ece614d57565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015614f4357614f43614d57565b500390565b6000600019821415614f5c57614f5c614d57565b5060010190565b600060ff821660ff811415614f7a57614f7a614d57565b60010192915050565b60008219821115614f9657614f96614d57565b500190565b600060208284031215614fad57600080fd5b5051919050565b600061ffff808316818516808303821115614fd157614fd1614d57565b01949350505050565b600061ffff83811690831681811015614ff557614ff5614d57565b039392505050565b60006020828403121561500f57600080fd5b81516115d5816147c1565b60006020828403121561502c57600080fd5b81516115d58161484a565b85815284602082015260a06040820152600061505660a0830186614cef565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561508857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208aab4f87e8e1ec38bbbc1798155241ef78f0b776211aefd706ef093d68be43f364736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806370a08231116101f2578063bc77169d1161010d578063e8a0e3f9116100a0578063f94aa1b41161006f578063f94aa1b414610c9e578063fb78680d14610cf5578063fdb78c0e14610d15578063fe575a8714610d3457600080fd5b8063e8a0e3f914610c29578063eafb5a3c14610c49578063ee5d9c2d14610c69578063eec2744e14610c7e57600080fd5b8063c6a276c2116100dc578063c6a276c214610b38578063cab5ebea14610b58578063cf84770614610b78578063dd62ed3e14610be357600080fd5b8063bc77169d14610a5e578063becdf13f14610a7e578063c2fa418f14610a9e578063c6831cd814610aeb57600080fd5b80638a8c523c11610185578063a9059cbb11610154578063a9059cbb146109de578063aa22b172146109fe578063aa54547314610a1e578063b6f8f8dc14610a3e57600080fd5b80638a8c523c146109635780638da5cb5b1461093057806395d89b4114610978578063a457c2d7146109be57600080fd5b806380c581d1116101c157806380c581d1146108d757806388f82020146108f7578063893d20e8146109305780638a63bd9b1461094e57600080fd5b806370a0823114610835578063715018a61461085557806375cb1bd11461086a5780637b45d4311461088a57600080fd5b80632d838119116102e25780634ada218b1161027557806355dbc3691161024457806355dbc369146107cb578063590ffdce146107e05780635c24b074146108005780636ebd00781461082057600080fd5b80634ada218b146107395780634fb2e45d146107535780634fbee1931461077357806350a8e016146107ac57600080fd5b8063384f36b6116102b1578063384f36b6146106b957806339509351146106d95780633f3cf56c146106f9578063452ed4f11461071957600080fd5b80632d838119146106415780632e8fa82114610661578063313ce5671461067757806333251a0b1461069957600080fd5b8063122fea3b1161035a57806323b872dd1161032957806323b872dd146105cc57806326003957146105ec5780632610eaca1461060c5780632b112e491461062c57600080fd5b8063122fea3b146104f557806313e461921461051557806318160ddd146105355780631b6afa2d1461054a57600080fd5b806306fdde031161039657806306fdde03146104415780630758d92414610490578063095ea7b3146104b05780630fa604e4146104e057600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610411601d5481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614858565b610d54565b005b34801561044d57600080fd5b5060408051808201909152601b81527f4d696c6c696f6e61697265204c6966657374796c6520546f6b656e000000000060208201525b6040516103f291906148aa565b34801561049c57600080fd5b506014546103de906001600160a01b031681565b3480156104bc57600080fd5b506104d06104cb3660046148ff565b610e2d565b60405190151581526020016103f2565b3480156104ec57600080fd5b50610411610e44565b34801561050157600080fd5b506015546103de906001600160a01b031681565b34801561052157600080fd5b5061043f61053036600461492b565b610e6a565b34801561054157600080fd5b50600c54610411565b34801561055657600080fd5b506013546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b3480156105d857600080fd5b506104d06105e7366004614959565b61128f565b3480156105f857600080fd5b5061043f61060736600461499a565b611307565b34801561061857600080fd5b5061043f610627366004614a17565b611412565b34801561063857600080fd5b50610411611517565b34801561064d57600080fd5b5061041161065c366004614a7b565b611545565b34801561066d57600080fd5b50610411601e5481565b34801561068357600080fd5b50600b5460405160ff90911681526020016103f2565b3480156106a557600080fd5b5061043f6106b4366004614a94565b6115dc565b3480156106c557600080fd5b5061043f6106d4366004614a94565b6116ad565b3480156106e557600080fd5b506104d06106f43660046148ff565b61173f565b34801561070557600080fd5b5061043f61071436600461499a565b61177b565b34801561072557600080fd5b506016546103de906001600160a01b031681565b34801561074557600080fd5b50601f546104d09060ff1681565b34801561075f57600080fd5b5061043f61076e366004614a94565b611886565b34801561077f57600080fd5b506104d061078e366004614a94565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107b857600080fd5b50601f546104d090610100900460ff1681565b3480156107d757600080fd5b50610411611a85565b3480156107ec57600080fd5b5061043f6107fb36600461492b565b611afe565b34801561080c57600080fd5b5061043f61081b366004614a94565b611b77565b34801561082c57600080fd5b50610411611cb6565b34801561084157600080fd5b50610411610850366004614a94565b611cd7565b34801561086157600080fd5b5061043f611d36565b34801561087657600080fd5b5061043f610885366004614ab1565b611de6565b34801561089657600080fd5b50600f546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b3480156108e357600080fd5b5061043f6108f236600461492b565b611ea7565b34801561090357600080fd5b506104d0610912366004614a94565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561093c57600080fd5b506000546001600160a01b03166103de565b34801561095a57600080fd5b506104d0612063565b34801561096f57600080fd5b5061043f6120d2565b34801561098457600080fd5b5060408051808201909152600481527f244d4c54000000000000000000000000000000000000000000000000000000006020820152610483565b3480156109ca57600080fd5b506104d06109d93660046148ff565b6122c2565b3480156109ea57600080fd5b506104d06109f93660046148ff565b6122f9565b348015610a0a57600080fd5b5061043f610a19366004614b13565b612310565b348015610a2a57600080fd5b5061043f610a39366004614b56565b6123f1565b348015610a4a57600080fd5b5061043f610a59366004614baa565b6125bd565b348015610a6a57600080fd5b5061043f610a79366004614b56565b61269d565b348015610a8a57600080fd5b5061043f610a99366004614b56565b612869565b348015610aaa57600080fd5b506011546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610af757600080fd5b506010546105979061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b4457600080fd5b5061043f610b53366004614a94565b612a35565b348015610b6457600080fd5b5061043f610b73366004614bea565b612ad5565b348015610b8457600080fd5b50601254610bb59061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610bef57600080fd5b50610411610bfe366004614c07565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c3557600080fd5b5061043f610c44366004614c35565b612b77565b348015610c5557600080fd5b5061043f610c64366004614a94565b612cd4565b348015610c7557600080fd5b5061043f613083565b348015610c8a57600080fd5b5061043f610c9936600461492b565b613166565b348015610caa57600080fd5b50601754601854601954610ccb926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610d0157600080fd5b5061043f610d10366004614cbd565b61320e565b348015610d2157600080fd5b50601a546104d090610100900460ff1681565b348015610d4057600080fd5b506104d0610d4f366004614a94565b61329b565b6000546001600160a01b03163314610da75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610df79085908590600401614d33565b600060405180830381600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050505050565b6000610e3a338484613329565b5060015b92915050565b600b54600090610e589060ff16600a614e6a565b601c54610e659190614e79565b905090565b6000546001600160a01b03163314610eb85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b8015610ff5576001600160a01b03821660009081526007602052604090205460ff1615610f275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d9e565b6001600160a01b03821660009081526001602052604090205415610f81576001600160a01b038216600090815260016020526040902054610f6790611545565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b8061128b576001600160a01b03821660009081526007602052604090205460ff166110625760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d9e565b6008546001141561111257611075613436565b6001600160a01b0383166000908152600260205260409020546110989190614eb4565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff1916905560088054806110df576110df614ed3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561128957826001600160a01b03166008828154811061113c5761113c614f02565b6000918252602090912001546001600160a01b03161415611277576008805461116790600190614f31565b8154811061117757611177614f02565b600091825260209091200154600880546001600160a01b0390921691839081106111a3576111a3614f02565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506111d9613436565b6001600160a01b0384166000908152600260205260409020546111fc9190614eb4565b6001600160a01b038416600090815260016020908152604080832093909355600281528282208290556007905220805460ff19169055600880548061124357611243614ed3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611289565b8061128181614f48565b915050611115565b505b5050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146112f4576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906112ee908490614f31565b90915550505b6112ff8484846135e1565b949350505050565b6000546001600160a01b031633146113555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6103e8600c546113659190614e79565b8183600c546113749190614eb4565b61137e9190614e79565b10156113f25760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d9e565b8082600c546114019190614eb4565b61140b9190614e79565b601c555050565b80518251146114635760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d9e565b60005b82518160ff16101561128957818160ff168151811061148757611487614f02565b602002602001015161149833611cd7565b10156114a357600080fd5b61150433848360ff16815181106114bc576114bc614f02565b6020908102919091010151600b546114d89060ff16600a614e6a565b858560ff16815181106114ed576114ed614f02565b60200260200101516114ff9190614eb4565b6135e1565b508061150f81614f63565b915050611466565b60006115236000611cd7565b61152e61dead611cd7565b6115389190614f83565b600c54610e659190614f31565b6000600d548211156115bf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d9e565b60006115c9613436565b90506115d58184614e79565b9392505050565b6000546001600160a01b0316331461162a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b15801561169257600080fd5b505af11580156116a6573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116fb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f54610100900460ff161561171057600080fd5b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e3a918590611776908690614f83565b613329565b6000546001600160a01b031633146117c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6103e8600c546117d99190614e79565b8183600c546117e89190614eb4565b6117f29190614e79565b10156118665760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d9e565b8082600c546118759190614eb4565b61187f9190614e79565b601b555050565b6000546001600160a01b031633146118d45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6001600160a01b0381166119505760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d9e565b6001600160a01b03811661dead14156119d15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d9e565b600080546119ea916001600160a01b0390911690611afe565b6119f5816001611afe565b60008054611a0b906001600160a01b0316611cd7565b1115611a2d57600054611a2b906001600160a01b0316826114ff82611cd7565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601f60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e659190614f9b565b6000546001600160a01b03163314611b4c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bc55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f54610100900460ff1615611c1d5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d9e565b6001600160a01b038116301415611c765760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d9e565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611cca9060ff16600a614e6a565b601b54610e659190614e79565b6001600160a01b03811660009081526007602052604081205460ff1615611d1457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e3e90611545565b6000546001600160a01b03163314611d845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60008054611d9d916001600160a01b0390911690611afe565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611e345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601780546001600160a01b0380861673ffffffffffffffffffffffffffffffffffffffff1992831617909255601880548584169216919091179055601954161561128957601980546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff19909116179055505050565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b80611f81576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e1157600080fd5b60045415611fe8576203f48060045442611f9b9190614f31565b11611fe85760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d9e565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610df7565b600080546001600160a01b031633146120b25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6014546120cc9030906001600160a01b0316600019613329565b50600190565b6000546001600160a01b031633146121205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f5460ff16156121735760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d9e565b601f54610100900460ff166121ca5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d9e565b601f546201000090046001600160a01b031661221057601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f54601654600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156122a157600080fd5b505af19250505080156122b2575060015b50601f805460ff19166001179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610e3a918590611776908690614f31565b60006123063384846135e1565b5060019392505050565b6000546001600160a01b0316331461235e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b6012805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff19909416928816929092179290921716179055806123bb8385614fb4565b6123c59190614fb4565b6012805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b0316331461243f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60135461ffff90811690851611801590612469575060135461ffff62010000909104811690841611155b8015612487575060135461ffff640100000000909104811690831611155b80156124a7575060135461ffff6601000000000000909104811690821611155b6124b057600080fd5b600081836124be8688614fb4565b6124c89190614fb4565b6124d29190614fb4565b90506109c48161ffff1611156124e757600080fd5b6011805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556125768582614fda565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461260b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b15801561268057600080fd5b505af1158015612694573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146126eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60135461ffff90811690851611801590612715575060135461ffff62010000909104811690841611155b8015612733575060135461ffff640100000000909104811690831611155b8015612753575060135461ffff6601000000000000909104811690821611155b61275c57600080fd5b6000818361276a8688614fb4565b6127749190614fb4565b61277e9190614fb4565b90506109c48161ffff16111561279357600080fd5b600f805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556128228582614fda565b600f805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146128b75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60135461ffff908116908516118015906128e1575060135461ffff62010000909104811690841611155b80156128ff575060135461ffff640100000000909104811690831611155b801561291f575060135461ffff6601000000000000909104811690821611155b61292857600080fd5b600081836129368688614fb4565b6129409190614fb4565b61294a9190614fb4565b90506109c48161ffff16111561295f57600080fd5b6010805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921662010000888316027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000161791909117640100000000868316021767ffff00000000000019166601000000000000918516919091021790556129ee8582614fda565b6010805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612a835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611678565b6000546001600160a01b03163314612b235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612b6c90831515815260200190565b60405180910390a150565b81518351148015612b89575080518251145b612bd55760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d9e565b60005b83518160ff161015612cce57818160ff1681518110612bf957612bf9614f02565b6020026020010151838260ff1681518110612c1657612c16614f02565b6020026020010151600c54612c2b9190614eb4565b612c359190614e79565b612c3e33611cd7565b1015612c4957600080fd5b612cbb33858360ff1681518110612c6257612c62614f02565b6020026020010151848460ff1681518110612c7f57612c7f614f02565b6020026020010151868560ff1681518110612c9c57612c9c614f02565b6020026020010151600c54612cb19190614eb4565b6114ff9190614e79565b5080612cc681614f63565b915050612bd8565b50505050565b6000546001600160a01b03163314612d225760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8b9190614ffd565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfc9190614ffd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e839190614ffd565b90506001600160a01b03811661302157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614ffd565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f669190614ffd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614ffd565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905561304a565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611289903090600019613329565b6000546001600160a01b031633146130d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f54610100900460ff16156131295760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d9e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613163573d6000803e3d6000fd5b50565b6000546001600160a01b031633146131b45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610df7565b6000546001600160a01b0316331461325c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d9e565b8284600c5461326b9190614eb4565b6132759190614e79565b601d55600c548190613288908490614eb4565b6132929190614e79565b601e5550505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613305573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e919061501a565b6001600160a01b03831661337f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d9e565b6001600160a01b0382166133d55760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d9e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d54600c546008546000929190156135a95760005b60085460ff821610156135a757826001600060088460ff168154811061347457613474614f02565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806134e25750816002600060088460ff16815481106134bb576134bb614f02565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156134ff57600c54600d546134f79190614e79565b935050505090565b6001600060088360ff168154811061351957613519614f02565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135489084614f31565b92506002600060088360ff168154811061356457613564614f02565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135939083614f31565b91508061359f81614f63565b91505061344c565b505b600c54600d546135b99190614e79565b8210156135d757600c54600d546135d09190614e79565b9250505090565b6135d08183614e79565b60006001600160a01b03841661365f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d9e565b6001600160a01b0383166136db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d9e565b600082116137515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d9e565b61375b8484613a04565b1561393557601f5460ff166137b25760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d9e565b6001600160a01b03841660009081526003602052604090205460ff16806137f157506001600160a01b03831660009081526003602052604090205460ff165b1561386e57601b5482111561386e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d9e565b6015546001600160a01b038481169116148015906138a557506001600160a01b03831660009081526003602052604090205460ff16155b1561393557601c54826138b785611cd7565b6138c19190614f83565b11156139355760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d9e565b6001600160a01b03841660009081526006602052604090205460019060ff168061397757506001600160a01b03841660009081526006602052604090205460ff165b15613980575060005b6001600160a01b03841660009081526003602052604090205460ff16156139ef57601a5460ff161580156139bb5750601a54610100900460ff165b156139ef5760006139cb30611cd7565b9050601d5481106139ed57601e5481106139e45750601e545b6139ed81613ad8565b505b6139fb85858584613f4c565b95945050505050565b600080546001600160a01b03848116911614801590613a3157506000546001600160a01b03838116911614155b8015613a4857506000546001600160a01b03163214155b8015613a6d57506001600160a01b03821660009081526009602052604090205460ff16155b8015613a9257506001600160a01b03831660009081526009602052604090205460ff16155b8015613aa957506001600160a01b03821661dead14155b8015613abd57506001600160a01b03821615155b80156115d557506001600160a01b0383163014159392505050565b601a805460ff1916600117905560125461ffff660100000000000090910416613b0057613f3f565b3060009081526005602090815260408083206014546001600160a01b0316845290915290205460001914613b59573060009081526005602090815260408083206014546001600160a01b03168452909152902060001990555b60125460009060029061ffff66010000000000008204811691613b7d911685614eb4565b613b879190614e79565b613b919190614e79565b90506000613b9f8284614f31565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613bd957613bd9614f02565b6001600160a01b03928316602091820292909201810191909152601454604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6f9190614ffd565b81600181518110613c8257613c82614f02565b6001600160a01b0392831660209182029290920101526014546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613ce1908590600090869030904290600401615037565b600060405180830381600087803b158015613cfb57600080fd5b505af1158015613d0f573d6000803e3d6000fd5b5050601254600092506002915061ffff66010000000000008204811691613d37911647614eb4565b613d419190614e79565b613d4b9190614e79565b90508315613e46576014546019546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ddc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e019190615073565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600047118015613e785750601254600090613e729061ffff808216916601000000000000900416614fda565b61ffff16115b15613f3a5760185460125447916001600160a01b0316906108fc90613eae9061ffff808216916601000000000000900416614fda565b60125461ffff91821691613ecb9164010000000090041685614eb4565b613ed59190614e79565b6040518115909202916000818181858888f19350505050158015613efd573d6000803e3d6000fd5b506017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613f37573d6000803e3d6000fd5b50505b505050505b50601a805460ff19169055565b601f54600090610100900460ff16613ff857613f6885856142b0565b601f54610100900460ff16158015613f855750613f858585613a04565b15613ff85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d9e565b60006140068686868661440e565b60808101516001600160a01b03881660009081526001602052604090205491925061403091614f31565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546140679190614f83565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156140d9576001600160a01b0386166000908152600260205260409020546140bf908590614f31565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff16156141395780516001600160a01b03861660009081526002602052604090205461411f9190614f83565b6001600160a01b0386166000908152600260205260409020555b60408101511561421b5761414b613436565b816040015161415a9190614eb4565b306000908152600160205260409020546141749190614f83565b3060009081526001602090815260408083209390935560079052205460ff16156141c957604080820151306000908152600260205291909120546141b89190614f83565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161421291815260200190565b60405180910390a35b60008160a001511180614232575060008160200151115b15614253578060a00151600d600082825461424d9190614f31565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161429c91815260200190565b60405180910390a350600195945050505050565b601f54610100900460ff161561432e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d9e565b6143388282613a04565b15801561435257506016546001600160a01b038281169116145b1561128b576001600160a01b038083166000908152600960205260409020805460ff19166001179055601f805461ff0019166101001790819055620100009004166143c757601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6144476040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6144806040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061448a613436565b90506144968186614eb4565b60808301526144a58787613a04565b1561455857601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614541575060408051601f3d908101601f1916820190925261453e9181019061501a565b60015b61454a57600080fd5b90508061455657600080fd5b505b83156146e7576001600160a01b03861660009081526003602052604090205460ff16156145b757601054600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614644565b6001600160a01b03871660009081526003602052604090205460ff161561461057600f54600e805461ffff80841663ffffffff199092169190911768010000000000000000909304166201000002919091179055614644565b601154600e805461ffff80841663ffffffff1990921691909117680100000000000000009093041662010000029190911790555b601354600e5461ffff68010000000000000000909204821691614668911687614eb4565b6146729190614e79565b6020830152601354600e5461ffff680100000000000000009092048216916146a1916201000090041687614eb4565b6146ab9190614e79565b6040830181905260208301516146c19190614f83565b6146cb9086614f31565b825260208201516146dd908290614eb4565b60a0830152614700565b6000602083018190526040830181905285835260a08301525b8082604001516147109190614eb4565b8260a0015161471f9190614f83565b826080015161472e9190614f31565b60608301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156147955761479561473d565b604052919050565b600067ffffffffffffffff8211156147b7576147b761473d565b5060051b60200190565b6001600160a01b038116811461316357600080fd5b600082601f8301126147e757600080fd5b813560206147fc6147f78361479d565b61476c565b82815260059290921b8401810191818101908684111561481b57600080fd5b8286015b8481101561483f578035614832816147c1565b835291830191830161481f565b509695505050505050565b801515811461316357600080fd5b6000806040838503121561486b57600080fd5b823567ffffffffffffffff81111561488257600080fd5b61488e858286016147d6565b925050602083013561489f8161484a565b809150509250929050565b600060208083528351808285015260005b818110156148d7578581018301518582016040015282016148bb565b818111156148e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561491257600080fd5b823561491d816147c1565b946020939093013593505050565b6000806040838503121561493e57600080fd5b8235614949816147c1565b9150602083013561489f8161484a565b60008060006060848603121561496e57600080fd5b8335614979816147c1565b92506020840135614989816147c1565b929592945050506040919091013590565b600080604083850312156149ad57600080fd5b50508035926020909101359150565b600082601f8301126149cd57600080fd5b813560206149dd6147f78361479d565b82815260059290921b840181019181810190868411156149fc57600080fd5b8286015b8481101561483f5780358352918301918301614a00565b60008060408385031215614a2a57600080fd5b823567ffffffffffffffff80821115614a4257600080fd5b614a4e868387016147d6565b93506020850135915080821115614a6457600080fd5b50614a71858286016149bc565b9150509250929050565b600060208284031215614a8d57600080fd5b5035919050565b600060208284031215614aa657600080fd5b81356115d5816147c1565b600080600060608486031215614ac657600080fd5b8335614ad1816147c1565b92506020840135614ae1816147c1565b91506040840135614af1816147c1565b809150509250925092565b803561ffff81168114614b0e57600080fd5b919050565b600080600060608486031215614b2857600080fd5b614b3184614afc565b9250614b3f60208501614afc565b9150614b4d60408501614afc565b90509250925092565b60008060008060808587031215614b6c57600080fd5b614b7585614afc565b9350614b8360208601614afc565b9250614b9160408601614afc565b9150614b9f60608601614afc565b905092959194509250565b600080600060608486031215614bbf57600080fd5b8335614bca8161484a565b92506020840135614bda8161484a565b91506040840135614af18161484a565b600060208284031215614bfc57600080fd5b81356115d58161484a565b60008060408385031215614c1a57600080fd5b8235614c25816147c1565b9150602083013561489f816147c1565b600080600060608486031215614c4a57600080fd5b833567ffffffffffffffff80821115614c6257600080fd5b614c6e878388016147d6565b94506020860135915080821115614c8457600080fd5b614c90878388016149bc565b93506040860135915080821115614ca657600080fd5b50614cb3868287016149bc565b9150509250925092565b60008060008060808587031215614cd357600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614d285781516001600160a01b031687529582019590820190600101614d03565b509495945050505050565b604081526000614d466040830185614cef565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614dc1578160001904821115614da757614da7614d57565b80851615614db457918102915b93841c9390800290614d8b565b509250929050565b600082614dd857506001610e3e565b81614de557506000610e3e565b8160018114614dfb5760028114614e0557614e21565b6001915050610e3e565b60ff841115614e1657614e16614d57565b50506001821b610e3e565b5060208310610133831016604e8410600b8410161715614e44575081810a610e3e565b614e4e8383614d86565b8060001904821115614e6257614e62614d57565b029392505050565b60006115d560ff841683614dc9565b600082614eaf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614ece57614ece614d57565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015614f4357614f43614d57565b500390565b6000600019821415614f5c57614f5c614d57565b5060010190565b600060ff821660ff811415614f7a57614f7a614d57565b60010192915050565b60008219821115614f9657614f96614d57565b500190565b600060208284031215614fad57600080fd5b5051919050565b600061ffff808316818516808303821115614fd157614fd1614d57565b01949350505050565b600061ffff83811690831681811015614ff557614ff5614d57565b039392505050565b60006020828403121561500f57600080fd5b81516115d5816147c1565b60006020828403121561502c57600080fd5b81516115d58161484a565b85815284602082015260a06040820152600061505660a0830186614cef565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561508857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208aab4f87e8e1ec38bbbc1798155241ef78f0b776211aefd706ef093d68be43f364736f6c634300080b0033

Deployed Bytecode Sourcemap

6167:27317:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8867:73;;;;;;;;;;;;8898:42;8867:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8867:73:0;;;;;;;;9567:52;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;9567:52:0;245:177:1;19324:172:0;;;;;;;;;;-1:-1:-1;19324:172:0;;;;;:::i;:::-;;:::i;:::-;;13488:80;;;;;;;;;;-1:-1:-1;13560:5:0;;;;;;;;;;;;;;;;;13488:80;;;;;;;:::i;8769:26::-;;;;;;;;;;-1:-1:-1;8769:26:0;;;;-1:-1:-1;;;;;8769:26:0;;;14182:161;;;;;;;;;;-1:-1:-1;14182:161:0;;;;;:::i;:::-;;:::i;:::-;;;4043:14:1;;4036:22;4018:41;;4006:2;3991:18;14182:161:0;3878:187:1;23196:112:0;;;;;;;;;;;;;:::i;8802:28::-;;;;;;;;;;-1:-1:-1;8802:28:0;;;;-1:-1:-1;;;;;8802:28:0;;;17383:1266;;;;;;;;;;-1:-1:-1;17383:1266:0;;;;;:::i;:::-;;:::i;13223:83::-;;;;;;;;;;-1:-1:-1;13296:7:0;;13223:83;;8544:216;;;;;;;;;;-1:-1:-1;8544:216:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4716:6:1;4749:15;;;4731:34;;4801:15;;;4796:2;4781:18;;4774:43;4853:15;;;4833:18;;;4826:43;;;;4905:15;;4900:2;4885:18;;4878:43;4958:15;;;4952:3;4937:19;;4930:44;4693:3;4678:19;8544:216:0;4457:523:1;14849:306:0;;;;;;;;;;-1:-1:-1;14849:306:0;;;;;:::i;:::-;;:::i;22807:267::-;;;;;;;;;;-1:-1:-1;22807:267:0;;;;;:::i;:::-;;:::i;28799:373::-;;;;;;;;;;-1:-1:-1;28799:373:0;;;;;:::i;:::-;;:::i;16831:141::-;;;;;;;;;;;;;:::i;18657:250::-;;;;;;;;;;-1:-1:-1;18657:250:0;;;;;:::i;:::-;;:::i;9626:50::-;;;;;;;;;;;;;;;;13312:80;;;;;;;;;;-1:-1:-1;13380:9:0;;13312:80;;13380:9;;;;7293:36:1;;7281:2;7266:18;13312:80:0;7151:184:1;19875:108:0;;;;;;;;;;-1:-1:-1;19875:108:0;;;;;:::i;:::-;;:::i;16677:146::-;;;;;;;;;;-1:-1:-1;16677:146:0;;;;;:::i;:::-;;:::i;15163:215::-;;;;;;;;;;-1:-1:-1;15163:215:0;;;;;:::i;:::-;;:::i;22530:269::-;;;;;;;;;;-1:-1:-1;22530:269:0;;;;;:::i;:::-;;:::i;8837:21::-;;;;;;;;;;-1:-1:-1;8837:21:0;;;;-1:-1:-1;;;;;8837:21:0;;;9685:34;;;;;;;;;;-1:-1:-1;9685:34:0;;;;;;;;12077:590;;;;;;;;;;-1:-1:-1;12077:590:0;;;;;:::i;:::-;;:::i;16980:125::-;;;;;;;;;;-1:-1:-1;16980:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17069:28:0;17045:4;17069:28;;;:19;:28;;;;;;;;;16980:125;9726:36;;;;;;;;;;-1:-1:-1;9726:36:0;;;;;;;;;;;19763:104;;;;;;;;;;;;;:::i;17113:134::-;;;;;;;;;;-1:-1:-1;17113:134:0;;;;;:::i;:::-;;:::i;18915:248::-;;;;;;;;;;-1:-1:-1;18915:248:0;;;;;:::i;:::-;;:::i;23082:106::-;;;;;;;;;;;;;:::i;13801:198::-;;;;;;;;;;-1:-1:-1;13801:198:0;;;;;:::i;:::-;;:::i;12675:195::-;;;;;;;;;;;;;:::i;23613:375::-;;;;;;;;;;-1:-1:-1;23613:375:0;;;;;:::i;:::-;;:::i;7866:167::-;;;;;;;;;;-1:-1:-1;7866:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16169:500;;;;;;;;;;-1:-1:-1;16169:500:0;;;;;:::i;:::-;;:::i;17255:120::-;;;;;;;;;;-1:-1:-1;17255:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17347:20:0;17323:4;17347:20;;;:11;:20;;;;;;;;;17255:120;13574:80;;;;;;;;;;-1:-1:-1;13626:7:0;12055:6;-1:-1:-1;;;;;12055:6:0;13574:80;23196:112;14668:173;;;;;;;;;;;;;:::i;28171:429::-;;;;;;;;;;;;;:::i;13398:84::-;;;;;;;;;;-1:-1:-1;13472:7:0;;;;;;;;;;;;;;;;;13398:84;;15386:225;;;;;;;;;;-1:-1:-1;15386:225:0;;;;;:::i;:::-;;:::i;14007:167::-;;;;;;;;;;-1:-1:-1;14007:167:0;;;;;:::i;:::-;;:::i;22234:288::-;;;;;;;;;;-1:-1:-1;22234:288:0;;;;;:::i;:::-;;:::i;21529:697::-;;;;;;;;;;-1:-1:-1;21529:697:0;;;;;:::i;:::-;;:::i;19991:170::-;;;;;;;;;;-1:-1:-1;19991:170:0;;;;;:::i;:::-;;:::i;20173:667::-;;;;;;;;;;-1:-1:-1;20173:667:0;;;;;:::i;:::-;;:::i;20848:673::-;;;;;;;;;;-1:-1:-1;20848:673:0;;;;;:::i;:::-;;:::i;8220:172::-;;;;;;;;;;-1:-1:-1;8220:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8042:169;;;;;;;;;;-1:-1:-1;8042:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19504:118;;;;;;;;;;-1:-1:-1;19504:118:0;;;;;:::i;:::-;;:::i;23996:165::-;;;;;;;;;;-1:-1:-1;23996:165:0;;;;;:::i;:::-;;:::i;8401:134::-;;;;;;;;;;-1:-1:-1;8401:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10040:6:1;10073:15;;;10055:34;;10125:15;;;10120:2;10105:18;;10098:43;10177:15;;;10157:18;;;10150:43;;;;10229:15;;;10224:2;10209:18;;10202:43;10017:3;10002:19;8401:134:0;9807:444:1;13660:133:0;;;;;;;;;;-1:-1:-1;13660:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13762:19:0;;;13744:7;13762:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13660:133;29180:482;;;;;;;;;;-1:-1:-1;29180:482:0;;;;;:::i;:::-;;:::i;15619:542::-;;;;;;;;;;-1:-1:-1;15619:542:0;;;;;:::i;:::-;;:::i;28608:183::-;;;;;;;;;;;;;:::i;19171:145::-;;;;;;;;;;-1:-1:-1;19171:145:0;;;;;:::i;:::-;;:::i;9093:275::-;;;;;;;;;;-1:-1:-1;9093:275:0;;;;;;;;-1:-1:-1;;;;;9093:275:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11788:15:1;;;11770:34;;11840:15;;;11835:2;11820:18;;11813:43;11892:15;;11872:18;;;11865:43;;;;11697:2;11682:18;9093:275:0;11475:439:1;23316:289:0;;;;;;;;;;-1:-1:-1;23316:289:0;;;;;:::i;:::-;;:::i;9399:39::-;;;;;;;;;;-1:-1:-1;9399:39:0;;;;;;;;;;;19630:125;;;;;;;;;;-1:-1:-1;19630:125:0;;;;;:::i;:::-;;:::i;19324:172::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;;;;;;;;;19432:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;19432:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;19470:8;;19480:7;;19432:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19324:172:::0;;:::o;14182:161::-;14257:4;14274:39;189:10;14297:7;14306:6;14274:8;:39::i;:::-;-1:-1:-1;14331:4:0;14182:161;;;;;:::o;23196:112::-;23290:9;;23241:7;;23286:13;;23290:9;;23286:2;:13;:::i;:::-;23268:14;;:32;;;;:::i;:::-;23261:39;;23196:112;:::o;17383:1266::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;17477:7:::1;17473:1169;;;-1:-1:-1::0;;;;;17510:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17509:21;17501:62;;;::::0;-1:-1:-1;;;17501:62:0;;15664:2:1;17501:62:0::1;::::0;::::1;15646:21:1::0;15703:2;15683:18;;;15676:30;15742;15722:18;;;15715:58;15790:18;;17501:62:0::1;15462:352:1::0;17501:62:0::1;-1:-1:-1::0;;;;;17581:16:0;::::1;17600:1;17581:16:::0;;;:7:::1;:16;::::0;;;;;:20;17578:116:::1;;-1:-1:-1::0;;;;;17661:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17641:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17622:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17578:116:::1;-1:-1:-1::0;;;;;;17708:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;17708:27:0::1;17731:4;17708:27:::0;;::::1;::::0;;;17750:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;17750:23:0::1;::::0;;::::1;::::0;;17383:1266::o;17473:1169::-:1;17796:7;17791:851;;-1:-1:-1::0;;;;;17828:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17820:61;;;::::0;-1:-1:-1;;;17820:61:0;;16021:2:1;17820:61:0::1;::::0;::::1;16003:21:1::0;16060:2;16040:18;;;16033:30;16099;16079:18;;;16072:58;16147:18;;17820:61:0::1;15819:352:1::0;17820:61:0::1;17899:9;:16:::0;17919:1:::1;17899:21;17896:735;;;17979:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;17960:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;17941:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18008:7:::1;:16:::0;;;;;:20;;;18047:11:::1;:20:::0;;;:28;;-1:-1:-1;;18047:28:0::1;::::0;;18094:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18094:15:0;;;;;-1:-1:-1;;18094:15:0::1;::::0;;;;;17383:1266;;:::o;17896:735::-:1;18155:9;18150:466;18174:9;:16:::0;18170:20;::::1;18150:466;;;18240:7;-1:-1:-1::0;;;;;18224:23:0::1;:9;18234:1;18224:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18224:12:0::1;:23;18220:377;;;18291:9;18301:16:::0;;:20:::1;::::0;18320:1:::1;::::0;18301:20:::1;:::i;:::-;18291:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18276:9:::1;:12:::0;;-1:-1:-1;;;;;18291:31:0;;::::1;::::0;18286:1;;18276:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;18276:46:0::1;;;;;-1:-1:-1::0;;;;;18276:46:0::1;;;;;;18387:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18368:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18349:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18424:7:::1;:16:::0;;;;;:20;;;18471:11:::1;:20:::0;;;:28;;-1:-1:-1;;18471:28:0::1;::::0;;18526:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18526:15:0;;;;;-1:-1:-1;;18526:15:0::1;::::0;;;;;18568:5:::1;;18220:377;18192:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18150:466;;;;17896:735;17383:1266:::0;;:::o;14849:306::-;-1:-1:-1;;;;;14970:19:0;;14949:4;14970:19;;;:11;:19;;;;;;;;14990:10;14970:31;;;;;;;;-1:-1:-1;;14970:52:0;14966:126;;-1:-1:-1;;;;;15039:19:0;;;;;;:11;:19;;;;;;;;15059:10;15039:31;;;;;;;:41;;15074:6;;15039:19;:41;;15074:6;;15039:41;:::i;:::-;;;;-1:-1:-1;;14966:126:0;15111:36;15121:6;15129:9;15140:6;15111:9;:36::i;:::-;15104:43;14849:306;-1:-1:-1;;;;14849:306:0:o;22807:267::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;22949:4:::1;22939:7;;:14;;;;:::i;:::-;22927:7;22916;22906;;:17;;;;:::i;:::-;22905:29;;;;:::i;:::-;:49;;22897:112;;;::::0;-1:-1:-1;;;22897:112:0;;17319:2:1;22897:112:0::1;::::0;::::1;17301:21:1::0;17358:2;17338:18;;;17331:30;17397:34;17377:18;;;17370:62;17468:20;17448:18;;;17441:48;17506:19;;22897:112:0::1;17117:414:1::0;22897:112:0::1;23059:7;23048;23038;;:17;;;;:::i;:::-;23037:29;;;;:::i;:::-;23020:14;:46:::0;-1:-1:-1;;22807:267:0:o;28799:373::-;28924:7;:14;28905:8;:15;:33;28897:67;;;;-1:-1:-1;;;28897:67:0;;17738:2:1;28897:67:0;;;17720:21:1;17777:2;17757:18;;;17750:30;17816:23;17796:18;;;17789:51;17857:18;;28897:67:0;17536:345:1;28897:67:0;28980:7;28975:190;28997:8;:15;28993:1;:19;;;28975:190;;;29067:7;29075:1;29067:10;;;;;;;;;;:::i;:::-;;;;;;;29042:21;29052:10;29042:9;:21::i;:::-;:35;;29034:44;;;;;;29093:60;29103:10;29115:8;29124:1;29115:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;29143:9;;29139:13;;29143:9;;29139:2;:13;:::i;:::-;29128:7;29136:1;29128:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29093:9;:60::i;:::-;-1:-1:-1;29014:3:0;;;;:::i;:::-;;;;28975:190;;16831:141;16884:7;16941:21;16959:1;16941:9;:21::i;:::-;16923:15;8898:42;16923:9;:15::i;:::-;:39;;;;:::i;:::-;16912:7;;:51;;;;:::i;18657:250::-;18723:7;18762;;18751;:18;;18743:73;;;;-1:-1:-1;;;18743:73:0;;18401:2:1;18743:73:0;;;18383:21:1;18440:2;18420:18;;;18413:30;18479:34;18459:18;;;18452:62;18550:12;18530:18;;;18523:40;18580:19;;18743:73:0;18199:406:1;18743:73:0;18827:19;18850:10;:8;:10::i;:::-;18827:33;-1:-1:-1;18878:21:0;18827:33;18878:7;:21;:::i;:::-;18871:28;18657:250;-1:-1:-1;;;18657:250:0:o;19875:108::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;19944:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19944:31:0::1;::::0;::::1;160:74:1::0;19944:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;19944:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19875:108:::0;:::o;16677:146::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;16765:16:::1;::::0;::::1;::::0;::::1;;;16764:17;16756:26;;;::::0;::::1;;16793:13;:22:::0;;-1:-1:-1;;16793:22:0::1;-1:-1:-1::0;;;;;16793:22:0;;;::::1;::::0;;;::::1;::::0;;16677:146::o;15163:215::-;189:10;15251:4;15300:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15300:34:0;;;;;;;;;;15251:4;;15268:80;;15291:7;;15300:47;;15337:10;;15300:47;:::i;:::-;15268:8;:80::i;22530:269::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;22671:4:::1;22661:7;;:14;;;;:::i;:::-;22649:7;22638;22628;;:17;;;;:::i;:::-;22627:29;;;;:::i;:::-;:49;;22619:117;;;::::0;-1:-1:-1;;;22619:117:0;;18812:2:1;22619:117:0::1;::::0;::::1;18794:21:1::0;18851:2;18831:18;;;18824:30;18890:34;18870:18;;;18863:62;18961:25;18941:18;;;18934:53;19004:19;;22619:117:0::1;18610:419:1::0;22619:117:0::1;22784:7;22773;22763;;:17;;;;:::i;:::-;22762:29;;;;:::i;:::-;22747:12;:44:::0;-1:-1:-1;;22530:269:0:o;12077:590::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;-1:-1:-1;;;;;12158:22:0;::::1;12150:96;;;::::0;-1:-1:-1;;;12150:96:0;;19236:2:1;12150:96:0::1;::::0;::::1;19218:21:1::0;19275:2;19255:18;;;19248:30;19314:34;19294:18;;;19287:62;19385:31;19365:18;;;19358:59;19434:19;;12150:96:0::1;19034:425:1::0;12150:96:0::1;-1:-1:-1::0;;;;;12265:16:0;::::1;8898:42;12265:16;;12257:90;;;::::0;-1:-1:-1;;;12257:90:0;;19236:2:1;12257:90:0::1;::::0;::::1;19218:21:1::0;19275:2;19255:18;;;19248:30;19314:34;19294:18;;;19287:62;19385:31;19365:18;;;19358:59;19434:19;;12257:90:0::1;19034:425:1::0;12257:90:0::1;12378:6;::::0;;12358:34:::1;::::0;-1:-1:-1;;;;;12378:6:0;;::::1;::::0;12358:19:::1;:34::i;:::-;12403:35;12423:8;12433:4;12403:19;:35::i;:::-;12482:1;12472:6:::0;;12462:17:::1;::::0;-1:-1:-1;;;;;12472:6:0::1;12462:9;:17::i;:::-;:21;12459:99;;;12510:6;::::0;12500:46:::1;::::0;-1:-1:-1;;;;;12510:6:0::1;12518:8:::0;12528:17:::1;12510:6:::0;12528:9:::1;:17::i;12500:46::-;;12459:99;12578:6;:17:::0;;-1:-1:-1;;12578:17:0::1;-1:-1:-1::0;;;;;12578:17:0;::::1;::::0;;::::1;::::0;;12611:38:::1;::::0;12578:17;;;;12611:38:::1;::::0;12578:6;12611:38:::1;12077:590:::0;:::o;19763:104::-;19808:7;19835:9;;;;;;;;;-1:-1:-1;;;;;19835:9:0;-1:-1:-1;;;;;19835:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17113:134::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;-1:-1:-1;;;;;17201:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;17201:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17113:134::o;18915:248::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;18999:16:::1;::::0;::::1;::::0;::::1;;;18998:17;18990:54;;;::::0;-1:-1:-1;;;18990:54:0;;19855:2:1;18990:54:0::1;::::0;::::1;19837:21:1::0;19894:2;19874:18;;;19867:30;19933:26;19913:18;;;19906:54;19977:18;;18990:54:0::1;19653:348:1::0;18990:54:0::1;-1:-1:-1::0;;;;;19063:28:0;::::1;19086:4;19063:28;;19055:55;;;::::0;-1:-1:-1;;;19055:55:0;;20208:2:1;19055:55:0::1;::::0;::::1;20190:21:1::0;20247:2;20227:18;;;20220:30;20286:16;20266:18;;;20259:44;20320:18;;19055:55:0::1;20006:338:1::0;19055:55:0::1;19121:9;:34:::0;;-1:-1:-1;;;;;19121:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;18915:248::o;23082:106::-;23170:9;;23123:7;;23166:13;;23170:9;;23166:2;:13;:::i;:::-;23150:12;;:30;;;;:::i;13801:198::-;-1:-1:-1;;;;;13891:20:0;;13867:7;13891:20;;;:11;:20;;;;;;;;13887:49;;;-1:-1:-1;;;;;;13920:16:0;;;;;:7;:16;;;;;;;13801:198::o;13887:49::-;-1:-1:-1;;;;;13974:16:0;;;;;;:7;:16;;;;;;13954:37;;:19;:37::i;12675:195::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;12762:6:::1;::::0;;12742:34:::1;::::0;-1:-1:-1;;;;;12762:6:0;;::::1;::::0;12742:19:::1;:34::i;:::-;12804:1;12787:19:::0;;-1:-1:-1;;12787:19:0::1;::::0;;12822:40:::1;::::0;12804:1;;12822:40:::1;::::0;12804:1;;12822:40:::1;12675:195::o:0;23613:375::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;23746:11:::1;:42:::0;;-1:-1:-1;;;;;23746:42:0;;::::1;-1:-1:-1::0;;23746:42:0;;::::1;;::::0;;;23799:23;:46;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;23860:29;;::::1;:43:::0;23856:125:::1;;23920:29:::0;:49;;-1:-1:-1;;;;;23920:49:0;::::1;-1:-1:-1::0;;23920:49:0;;::::1;;::::0;;23613:375;;;:::o;16169:500::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;16250:16;16246:416:::1;;-1:-1:-1::0;;;;;16283:13:0;;::::1;16299:5;16283:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16283:21:0::1;::::0;;16319:9:::1;::::0;:32;;;;;::::1;::::0;::::1;20517:74:1::0;;;;20607:18;;;20600:50;;;;16319:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20490:18:1;;16319:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;16246:416;16388:17;::::0;:22;16384:136:::1;;16477:6;16457:17;;16439:15;:35;;;;:::i;:::-;:44;16431:73;;;::::0;-1:-1:-1;;;16431:73:0;;20863:2:1;16431:73:0::1;::::0;::::1;20845:21:1::0;20902:2;20882:18;;;20875:30;20941:18;20921;;;20914:46;20977:18;;16431:73:0::1;20661:340:1::0;16431:73:0::1;-1:-1:-1::0;;;;;16534:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16534:20:0::1;16550:4;16534:20:::0;;::::1;::::0;;;16589:15:::1;16569:17;:35:::0;;;16619:9:::1;::::0;:31;;;;;;;::::1;20517:74:1::0;;;;20607:18;;;20600:50;16619:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20490:18:1;;16619:31:0::1;20349:307:1::0;14668:173:0;14732:4;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;14781:9:::1;::::0;14749:62:::1;::::0;14766:4:::1;::::0;-1:-1:-1;;;;;14781:9:0::1;-1:-1:-1::0;;14749:8:0::1;:62::i;:::-;-1:-1:-1::0;14829:4:0::1;14668:173:::0;:::o;28171:429::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;28233:14:::1;::::0;::::1;;28232:15;28224:52;;;::::0;-1:-1:-1;;;28224:52:0;;21208:2:1;28224:52:0::1;::::0;::::1;21190:21:1::0;21247:2;21227:18;;;21220:30;21286:26;21266:18;;;21259:54;21330:18;;28224:52:0::1;21006:348:1::0;28224:52:0::1;28295:16;::::0;::::1;::::0;::::1;;;28287:53;;;::::0;-1:-1:-1;;;28287:53:0;;21561:2:1;28287:53:0::1;::::0;::::1;21543:21:1::0;21600:2;21580:18;;;21573:30;21639:26;21619:18;;;21612:54;21683:18;;28287:53:0::1;21359:348:1::0;28287:53:0::1;28362:9;::::0;;;::::1;-1:-1:-1::0;;;;;28362:9:0::1;28351:99;;28402:9;:36:::0;;;::::1;28432:4;28402:36:::0;::::1;;::::0;;28351:99:::1;28464:9;::::0;28484:6:::1;::::0;28539:9:::1;::::0;28464:85:::1;::::0;;;;-1:-1:-1;;;;;28484:6:0;;::::1;28464:85;::::0;::::1;21935:74:1::0;22057:10;28499:12:0::1;22045:23:1::0;22025:18;;;22018:51;22117:18;28521:15:0::1;22105:31:1::0;22085:18;;;22078:59;28539:9:0::1;::::0;;::::1;22153:18:1::0;;;22146:45;28464:9:0;;;::::1;;::::0;:19:::1;::::0;21907::1;;28464:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28460:101:::0;28571:14:::1;:21:::0;;-1:-1:-1;;28571:21:0::1;28588:4;28571:21;::::0;;28171:429::o;15386:225::-;189:10;15479:4;15528:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15528:34:0;;;;;;;;;;15479:4;;15496:85;;15519:7;;15528:52;;15565:15;;15528:52;:::i;14007:167::-;14085:4;14102:42;189:10;14126:9;14137:6;14102:9;:42::i;:::-;-1:-1:-1;14162:4:0;;14007:167;-1:-1:-1;;;14007:167:0:o;22234:288::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;22339:7:::1;:29:::0;;::::1;22419:33:::0;;::::1;::::0;::::1;::::0;22379:29;;::::1;::::0;::::1;-1:-1:-1::0;;22379:29:0;;;22339;;::::1;22379::::0;;;;;;;::::1;22419:33;;::::0;;22441:11;22479:21:::1;22399:9:::0;22359;22479:21:::1;:::i;:::-;:35;;;;:::i;:::-;22463:7;:51:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;22463:51:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;22234:288:0:o;21529:697::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;21676:10:::1;:21:::0;::::1;::::0;;::::1;21665:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;21731:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21718:36:::0;;::::1;;;21665:89;:146;;;;-1:-1:-1::0;21788:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21775:36:::0;;::::1;;;21665:146;:207;;;;-1:-1:-1::0;21847:10:0::1;:25:::0;::::1;::::0;;;::::1;::::0;::::1;21832:40:::0;;::::1;;;21665:207;21657:216;;;::::0;::::1;;21884:12;21933:11:::0;21921:9;21899:19:::1;21909:9:::0;21899:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;21884:60;;21972:4;21963:5;:13;;;;21955:22;;;::::0;::::1;;21988:14;:36:::0;;::::1;22035:32:::0;;::::1;22078:36:::0;;;;21988;;;::::1;;22078::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;22125:40:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;22203:15:::1;22035:32:::0;22203:5;:15:::1;:::i;:::-;22176:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21529:697:0:o;19991:170::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;20098:9:::1;::::0;:55:::1;::::0;;;;22862:14:1;;22855:22;20098:55:0::1;::::0;::::1;22837:41:1::0;22921:14;;22914:22;22894:18;;;22887:50;22980:14;;22973:22;22953:18;;;22946:50;20098:9:0;;;::::1;-1:-1:-1::0;;;;;20098:9:0::1;::::0;:24:::1;::::0;22810:18:1;;20098:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19991:170:::0;;;:::o;20173:667::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;20315:10:::1;:21:::0;::::1;::::0;;::::1;20304:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;20370:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;20357:36:::0;;::::1;;;20304:89;:146;;;;-1:-1:-1::0;20427:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;20414:36:::0;;::::1;;;20304:146;:207;;;;-1:-1:-1::0;20486:10:0::1;:25:::0;::::1;::::0;;;::::1;::::0;::::1;20471:40:::0;;::::1;;;20304:207;20296:216;;;::::0;::::1;;20523:12;20572:11:::0;20560:9;20538:19:::1;20548:9:::0;20538:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;20523:60;;20611:4;20602:5;:13;;;;20594:22;;;::::0;::::1;;20627:9;:31:::0;;::::1;20669:27:::0;;::::1;20707:31:::0;;;;20627;;;::::1;;20707::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;20749:35:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;20817:15:::1;20669:27:::0;20817:5;:15:::1;:::i;:::-;20795:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;20173:667:0:o;20848:673::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;20991:10:::1;:21:::0;::::1;::::0;;::::1;20980:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;21046:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21033:36:::0;;::::1;;;20980:89;:146;;;;-1:-1:-1::0;21103:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21090:36:::0;;::::1;;;20980:146;:207;;;;-1:-1:-1::0;21162:10:0::1;:25:::0;::::1;::::0;;;::::1;::::0;::::1;21147:40:::0;;::::1;;;20980:207;20972:216;;;::::0;::::1;;21199:12;21248:11:::0;21236:9;21214:19:::1;21224:9:::0;21214:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;21199:60;;21287:4;21278:5;:13;;;;21270:22;;;::::0;::::1;;21303:10;:32:::0;;::::1;21346:28:::0;;::::1;21385:32:::0;;;;21303;;;::::1;;21385::::0;;;;;;;;;;::::1;;;-1:-1:-1::0;;21428:36:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;21498:15:::1;21346:28:::0;21498:5;:15:::1;:::i;:::-;21475:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;20848:673:0:o;19504:118::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;19578:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19578:36:0::1;::::0;::::1;160:74:1::0;19578:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;19578:36:0::1;14:226:1::0;23996:165:0;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;24071:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;24071:30:0;;::::1;;::::0;;24117:36:::1;::::0;::::1;::::0;::::1;::::0;24093:8;4043:14:1;4036:22;4018:41;;4006:2;3991:18;;3878:187;24117:36:0::1;;;;;;;;23996:165:::0;:::o;29180:482::-;29335:8;:15;29316:8;:15;:34;:72;;;;;29373:8;:15;29354:8;:15;:34;29316:72;29308:106;;;;-1:-1:-1;;;29308:106:0;;17738:2:1;29308:106:0;;;17720:21:1;17777:2;17757:18;;;17750:30;17816:23;17796:18;;;17789:51;17857:18;;29308:106:0;17536:345:1;29308:106:0;29430:7;29425:230;29447:8;:15;29443:1;:19;;;29425:230;;;29543:8;29552:1;29543:11;;;;;;;;;;:::i;:::-;;;;;;;29528:8;29537:1;29528:11;;;;;;;;;;:::i;:::-;;;;;;;29518:7;;:21;;;;:::i;:::-;29517:37;;;;:::i;:::-;29492:21;29502:10;29492:9;:21::i;:::-;:62;;29484:71;;;;;;29570:73;29580:10;29592:8;29601:1;29592:11;;;;;;;;;;:::i;:::-;;;;;;;29631:8;29640:1;29631:11;;;;;;;;;;:::i;:::-;;;;;;;29616:8;29625:1;29616:11;;;;;;;;;;:::i;:::-;;;;;;;29606:7;;:21;;;;:::i;:::-;29605:37;;;;:::i;29570:73::-;-1:-1:-1;29464:3:0;;;;:::i;:::-;;;;29425:230;;;;29180:482;;;:::o;15619:542::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;15690:20:::1;15723:9;15690:43;;15744:16;15774:10;-1:-1:-1::0;;;;;15774:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15763:40:0::1;;15812:4;15819:10;-1:-1:-1::0;;;;;15819:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15763:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;23516:15:1;;;15763:74:0::1;::::0;::::1;23498:34:1::0;23568:15;;23548:18;;;23541:43;23410:18;;15763:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15744:93:::0;-1:-1:-1;;;;;;15852:22:0;::::1;15848:200;;15911:10;-1:-1:-1::0;;;;;15911:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15900:43:0::1;;15952:4;15959:10;-1:-1:-1::0;;;;;15959:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15900:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;23516:15:1;;;15900:77:0::1;::::0;::::1;23498:34:1::0;23568:15;;23548:18;;;23541:43;23410:18;;15900:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15891:6;:86:::0;;-1:-1:-1;;15891:86:0::1;-1:-1:-1::0;;;;;15891:86:0;;;::::1;::::0;;;::::1;::::0;;15848:200:::1;;;16019:6;:17:::0;;-1:-1:-1;;16019:17:0::1;-1:-1:-1::0;;;;;16019:17:0;::::1;;::::0;;15848:200:::1;16058:9;:22:::0;;-1:-1:-1;;16058:22:0::1;-1:-1:-1::0;;;;;16058:22:0;::::1;::::0;;::::1;::::0;;;16091:62:::1;::::0;16108:4:::1;::::0;-1:-1:-1;;16091:8:0::1;:62::i;28608:183::-:0;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;28675:16:::1;::::0;::::1;::::0;::::1;;;28674:17;28666:58;;;::::0;-1:-1:-1;;;28666:58:0;;23797:2:1;28666:58:0::1;::::0;::::1;23779:21:1::0;23836:2;23816:18;;;23809:30;23875;23855:18;;;23848:58;23923:18;;28666:58:0::1;23595:352:1::0;28666:58:0::1;12028:7:::0;12055:6;;28735:48:::1;::::0;-1:-1:-1;;;;;12055:6:0;;;;28761:21:::1;28735:48:::0;::::1;;;::::0;28761:21;;28735:48;12028:7;28735:48;28761:21;12055:6;28735:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28608:183::o:0;19171:145::-;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;19261:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;20535:55:1;;;19261:47:0::1;::::0;::::1;20517:74:1::0;20634:14;;20627:22;20607:18;;;20600:50;19261:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;20490:18:1;;19261:47:0::1;20349:307:1::0;23316:289:0;10217:6;;-1:-1:-1;;;;;10217:6:0;189:10;10217:22;10209:52;;;;-1:-1:-1;;;10209:52:0;;12511:2:1;10209:52:0;;;12493:21:1;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:47;12626:18;;10209:52:0;12309:341:1;10209:52:0;23516:16:::1;23496;23486:7;;:26;;;;:::i;:::-;23485:47;;;;:::i;:::-;23469:13;:63:::0;23557:7:::1;::::0;23584:13;;23557:23:::1;::::0;23567:13;;23557:23:::1;:::i;:::-;23556:41;;;;:::i;:::-;23543:10;:54:::0;-1:-1:-1;;;;23316:289:0:o;19630:125::-;19715:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;19715:32:0;;;160:74:1;19691:4:0;;19715:9;;;;;:23;;133:18:1;;19715:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14351:309::-;-1:-1:-1;;;;;14445:20:0;;14437:52;;;;-1:-1:-1;;;14437:52:0;;24404:2:1;14437:52:0;;;24386:21:1;24443:2;24423:18;;;24416:30;24482:21;24462:18;;;24455:49;24521:18;;14437:52:0;24202:343:1;14437:52:0;-1:-1:-1;;;;;14508:21:0;;14500:53;;;;-1:-1:-1;;;14500:53:0;;24404:2:1;14500:53:0;;;24386:21:1;24443:2;24423:18;;;24416:30;24482:21;24462:18;;;24455:49;24521:18;;14500:53:0;24202:343:1;14500:53:0;-1:-1:-1;;;;;14566:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14619:33;;391:25:1;;;14619:33:0;;364:18:1;14619:33:0;;;;;;;14351:309;;;:::o;32890:591::-;32970:7;;33006;;33027:9;:16;32932:7;;32970;33006;33027:20;33024:347;;33069:7;33064:296;33086:9;:16;33082:20;;;;33064:296;;;33156:7;33132;:21;33140:9;33150:1;33140:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33140:12:0;33132:21;;;;;;;;;;;;;:31;;:66;;;33191:7;33167;:21;33175:9;33185:1;33175:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33175:12:0;33167:21;;;;;;;;;;;;;:31;33132:66;33128:96;;;33217:7;;33207;;:17;;;;:::i;:::-;33200:24;;;;;32890:591;:::o;33128:96::-;33263:7;:21;33271:9;33281:1;33271:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33271:12:0;33263:21;;;;;;;;;;;;;33253:31;;:7;:31;:::i;:::-;33243:41;;33323:7;:21;33331:9;33341:1;33331:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33331:12:0;33323:21;;;;;;;;;;;;;33313:31;;:7;:31;:::i;:::-;33303:41;-1:-1:-1;33104:3:0;;;;:::i;:::-;;;;33064:296;;;;33024:347;33405:7;;33395;;:17;;;;:::i;:::-;33385:7;:27;33381:57;;;33431:7;;33421;;:17;;;;:::i;:::-;33414:24;;;;32890:591;:::o;33381:57::-;33456:17;33466:7;33456;:17;:::i;24537:1470::-;24616:4;-1:-1:-1;;;;;24641:18:0;;24633:68;;;;-1:-1:-1;;;24633:68:0;;24752:2:1;24633:68:0;;;24734:21:1;24791:2;24771:18;;;24764:30;24830:34;24810:18;;;24803:62;24901:7;24881:18;;;24874:35;24926:19;;24633:68:0;24550:401:1;24633:68:0;-1:-1:-1;;;;;24720:16:0;;24712:64;;;;-1:-1:-1;;;24712:64:0;;25158:2:1;24712:64:0;;;25140:21:1;25197:2;25177:18;;;25170:30;25236:34;25216:18;;;25209:62;25307:5;25287:18;;;25280:33;25330:19;;24712:64:0;24956:399:1;24712:64:0;24804:1;24795:6;:10;24787:64;;;;-1:-1:-1;;;24787:64:0;;25562:2:1;24787:64:0;;;25544:21:1;25601:2;25581:18;;;25574:30;25640:34;25620:18;;;25613:62;25711:11;25691:18;;;25684:39;25740:19;;24787:64:0;25360:405:1;24787:64:0;24865:20;24876:4;24882:2;24865:10;:20::i;:::-;24862:480;;;24906:14;;;;24902:89;;24941:34;;-1:-1:-1;;;24941:34:0;;25972:2:1;24941:34:0;;;25954:21:1;26011:2;25991:18;;;25984:30;26050:26;26030:18;;;26023:54;26094:18;;24941:34:0;25770:348:1;24902:89:0;-1:-1:-1;;;;;25008:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;25025:11:0;;;;;;:7;:11;;;;;;;;25008:28;25005:142;;;25074:12;;25064:6;:22;;25056:75;;;;-1:-1:-1;;;25056:75:0;;26325:2:1;25056:75:0;;;26307:21:1;26364:2;26344:18;;;26337:30;26403:34;26383:18;;;26376:62;26474:10;26454:18;;;26447:38;26502:19;;25056:75:0;26123:404:1;25056:75:0;25170:13;;-1:-1:-1;;;;;25164:19:0;;;25170:13;;25164:19;;;;:35;;-1:-1:-1;;;;;;25188:11:0;;;;;;:7;:11;;;;;;;;25187:12;25164:35;25161:170;;;25254:14;;25244:6;25228:13;25238:2;25228:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;25220:95;;;;-1:-1:-1;;;25220:95:0;;26734:2:1;25220:95:0;;;26716:21:1;26773:2;26753:18;;;26746:30;26812:34;26792:18;;;26785:62;26883:12;26863:18;;;26856:40;26913:19;;25220:95:0;26532:406:1;25220:95:0;-1:-1:-1;;;;;25387:25:0;;25354:12;25387:25;;;:19;:25;;;;;;25369:4;;25387:25;;;:52;;-1:-1:-1;;;;;;25416:23:0;;;;;;:19;:23;;;;;;;;25387:52;25384:98;;;-1:-1:-1;25465:5:0;25384:98;-1:-1:-1;;;;;25498:11:0;;;;;;:7;:11;;;;;;;;25494:443;;;25531:6;;;;25530:7;:47;;;;-1:-1:-1;25558:19:0;;;;;;;25530:47;25526:394;;;25612:28;25643:24;25661:4;25643:9;:24::i;:::-;25612:55;;25714:13;;25690:20;:37;25686:219;;25779:10;;25755:20;:34;25752:77;;-1:-1:-1;25816:10:0;;25752:77;25851:34;25864:20;25851:12;:34::i;:::-;25593:327;25526:394;25955:44;25973:4;25979:2;25983:6;25991:7;25955:17;:44::i;:::-;25948:51;24537:1470;-1:-1:-1;;;;;24537:1470:0:o;24169:360::-;24237:4;12055:6;;-1:-1:-1;;;;;24261:15:0;;;12055:6;;24261:15;;;;:45;;-1:-1:-1;12028:7:0;12055:6;-1:-1:-1;;;;;24293:13:0;;;12055:6;;24293:13;;24261:45;:82;;;;-1:-1:-1;12028:7:0;12055:6;-1:-1:-1;;;;;12055:6:0;24323:9;:20;;24261:82;:121;;;;-1:-1:-1;;;;;;24361:21:0;;;;;;:17;:21;;;;;;;;24360:22;24261:121;:162;;;;-1:-1:-1;;;;;;24400:23:0;;;;;;:17;:23;;;;;;;;24399:24;24261:162;:189;;;;-1:-1:-1;;;;;;24440:10:0;;8898:42;24440:10;;24261:189;:222;;;;-1:-1:-1;;;;;;24467:16:0;;;;24261:222;:260;;;;-1:-1:-1;;;;;;24500:21:0;;24516:4;24500:21;;24254:267;24169:360;-1:-1:-1;;;24169:360:0:o;26015:1632::-;10111:6;:13;;-1:-1:-1;;10111:13:0;10120:4;10111:13;;;26102:7:::1;:13:::0;::::1;::::0;;;::::1;;26098:44;;26135:7;;26098:44;26177:4;26157:26;::::0;;;:11:::1;:26;::::0;;;;;;;26192:9:::1;::::0;-1:-1:-1;;;;;26192:9:0::1;26157:46:::0;;;;;;;;-1:-1:-1;;26157:67:0::1;26154:165;;26261:4;26241:26;::::0;;;:11:::1;:26;::::0;;;;;;;26276:9:::1;::::0;-1:-1:-1;;;;;26276:9:0::1;26241:46:::0;;;;;;;-1:-1:-1;;26241:66:0;;26154:165:::1;26397:7;:13:::0;26331:17:::1;::::0;26414:1:::1;::::0;26397:13:::1;::::0;;::::1;::::0;::::1;::::0;26353:40:::1;::::0;26376:17:::1;26353:20:::0;:40:::1;:::i;:::-;26352:58;;;;:::i;:::-;26351:64;;;;:::i;:::-;26331:84:::0;-1:-1:-1;26428:20:0::1;26451:32;26331:84:::0;26451:20;:32:::1;:::i;:::-;26528:16;::::0;;26542:1:::1;26528:16:::0;;;;;::::1;::::0;;26428:55;;-1:-1:-1;26504:21:0::1;::::0;26528:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26528:16:0::1;26504:40;;26573:4;26555;26560:1;26555:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26555:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26599:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26555:7;;26599:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26589:4;26594:1;26589:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26589:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26628:9:::1;::::0;:191:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;26703:12;;26628:9:::1;::::0;26746:4;;26773::::1;::::0;26793:15:::1;::::0;26628:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26906:7:0::1;:13:::0;26832:24:::1;::::0;-1:-1:-1;26923:1:0::1;::::0;-1:-1:-1;26906:13:0::1;::::0;;::::1;::::0;::::1;::::0;26861:41:::1;::::0;26885:17:::1;26861:21;:41;:::i;:::-;26860:59;;;;:::i;:::-;26859:65;;;;:::i;:::-;26832:92:::0;-1:-1:-1;26941:13:0;;26937:367:::1;;26971:9;::::0;27140:29;;26971:247:::1;::::0;;;;27048:4:::1;26971:247;::::0;::::1;27917:34:1::0;27967:18;;;27960:34;;;26971:9:0::1;28010:18:1::0;;;28003:34;;;28053:18;;;28046:34;-1:-1:-1;;;;;27140:29:0;;::::1;28096:19:1::0;;;28089:44;27188:15:0::1;28149:19:1::0;;;28142:35;26971:9:0;::::1;::::0;:25:::1;::::0;27004:16;;27828:19:1;;26971:247:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27238:54:0::1;::::0;;28701:25:1;;;28757:2;28742:18;;28735:34;;;28785:18;;;28778:34;;;27238:54:0::1;::::0;-1:-1:-1;28689:2:1;28674:18;27238:54:0::1;;;;;;;26937:367;27342:1;27318:21;:25;:66;;;;-1:-1:-1::0;27363:7:0::1;:17:::0;27383:1:::1;::::0;27347:33:::1;::::0;27363:17:::1;::::0;;::::1;::::0;27347:13;;::::1;;:33;:::i;:::-;:37;;;27318:66;27314:326;;;27457:23:::0;;27541:7:::1;:17:::0;27421:21:::1;::::0;-1:-1:-1;;;;;27457:23:0::1;::::0;:103:::1;::::0;27525:33:::1;::::0;27541:17:::1;::::0;;::::1;::::0;27525:13;;::::1;;:33;:::i;:::-;27502:7;:19:::0;27490:69:::1;::::0;;::::1;::::0;:31:::1;::::0;27502:19;;::::1;;27490:9:::0;:31:::1;:::i;:::-;:69;;;;:::i;:::-;27457:103;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27575:11:0::1;:21:::0;:53:::1;::::0;-1:-1:-1;;;;;27575:21:0;;::::1;::::0;27606::::1;27575:53:::0;::::1;;;::::0;:21:::1;:53:::0;:21;:53;27606:21;27575;:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27386:254;27314:326;26087:1560;;;;10135:1;-1:-1:-1::0;10147:6:0;:14;;-1:-1:-1;;10147:14:0;;;26015:1632::o;29871:1300::-;29994:16;;29972:4;;29994:16;;;;;29989:221;;30027:28;30046:4;30052:2;30027:18;:28::i;:::-;30075:16;;;;;;;30074:17;:41;;;;;30095:20;30106:4;30112:2;30095:10;:20::i;:::-;30070:129;;;30136:47;;-1:-1:-1;;;30136:47:0;;29025:2:1;30136:47:0;;;29007:21:1;29064:2;29044:18;;;29037:30;29103:34;29083:18;;;29076:62;29174:7;29154:18;;;29147:35;29199:19;;30136:47:0;28823:401:1;30070:129:0;30222:25;30250:38;30261:4;30267:2;30271:7;30280;30250:10;:38::i;:::-;30333:14;;;;-1:-1:-1;;;;;30317:13:0;;;;;;:7;:13;;;;;;30222:66;;-1:-1:-1;30317:30:0;;;:::i;:::-;-1:-1:-1;;;;;30301:13:0;;;;;;;:7;:13;;;;;;:46;;;;30386:22;;;;30372:11;;;;;;;;;;:36;;30386:22;30372:36;:::i;:::-;-1:-1:-1;;;;;30358:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;30425:17;;;;;:11;:17;;;;;;;30421:89;;;-1:-1:-1;;;;;30475:13:0;;;;;;:7;:13;;;;;;:23;;30491:7;;30475:23;:::i;:::-;-1:-1:-1;;;;;30459:13:0;;;;;;:7;:13;;;;;:39;30421:89;-1:-1:-1;;;;;30524:15:0;;;;;;:11;:15;;;;;;;;30520:98;;;30584:22;;-1:-1:-1;;;;;30570:11:0;;30584:22;30570:11;;;:7;:11;;;;;;:36;;30584:22;30570:36;:::i;:::-;-1:-1:-1;;;;;30556:11:0;;;;;;:7;:11;;;;;:50;30520:98;30634:12;;;;:16;30630:353;;30733:10;:8;:10::i;:::-;30718:6;:12;;;:25;;;;:::i;:::-;30708:4;30692:22;;;;:7;:22;;;;;;:52;;;;:::i;:::-;30683:4;30667:22;;;;:7;:22;;;;;;;;:77;;;;30762:11;:26;;;;;;30759:110;;;30857:12;;;;;30848:4;30832:22;;;;:7;:22;;;;;;;:37;;30857:12;30832:37;:::i;:::-;30823:4;30807:22;;;;:7;:22;;;;;:62;30759:110;30912:4;-1:-1:-1;;;;;30889:43:0;30898:4;-1:-1:-1;;;;;30889:43:0;;30919:6;:12;;;30889:43;;;;391:25:1;;379:2;364:18;;245:177;30889:43:0;;;;;;;;30630:353;31011:1;30997:6;:11;;;:15;:34;;;;31030:1;31016:6;:11;;;:15;30997:34;30993:89;;;31059:6;:11;;;31048:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;30993:89:0;31114:2;-1:-1:-1;;;;;31099:42:0;31108:4;-1:-1:-1;;;;;31099:42:0;;31118:6;:22;;;31099:42;;;;391:25:1;;379:2;364:18;;245:177;31099:42:0;;;;;;;;-1:-1:-1;31159:4:0;;29871:1300;-1:-1:-1;;;;;29871:1300:0:o;27655:508::-;27737:16;;;;;;;27736:17;27728:65;;;;-1:-1:-1;;;27728:65:0;;29431:2:1;27728:65:0;;;29413:21:1;29470:2;29450:18;;;29443:30;29509:34;29489:18;;;29482:62;29580:5;29560:18;;;29553:33;29603:19;;27728:65:0;29229:399:1;27728:65:0;27809:20;27820:4;27826:2;27809:10;:20::i;:::-;27808:21;:37;;;;-1:-1:-1;27839:6:0;;-1:-1:-1;;;;;27833:12:0;;;27839:6;;27833:12;27808:37;27804:352;;;-1:-1:-1;;;;;27862:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;27862:30:0;27888:4;27862:30;;;27907:16;:23;;-1:-1:-1;;27907:23:0;27862:30;27907:23;;;;;27956:9;;;;27945:107;;28000:9;:36;;;;28030:4;28000:36;;;;;27945:107;28066:19;:26;;-1:-1:-1;;28066:26:0;;;;;28112:32;;-1:-1:-1;4018:41:1;;28112:32:0;;4006:2:1;3991:18;28112:32:0;;;;;;;27655:508;;:::o;31179:1703::-;31273:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31273:18:0;31304:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31304:25:0;31340:19;31362:10;:8;:10::i;:::-;31340:32;-1:-1:-1;31402:21:0;31340:32;31402:7;:21;:::i;:::-;31385:14;;;:38;31440:20;31451:4;31457:2;31440:10;:20::i;:::-;31436:315;;;31508:9;;:38;;;;;-1:-1:-1;;;;;29914:15:1;;;31508:38:0;;;29896:34:1;29966:15;;;29946:18;;;29939:43;29998:18;;;29991:34;;;31477:12:0;;31508:9;;;;;:19;;29808:18:1;;31508:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31508:38:0;;;;;;;;-1:-1:-1;;31508:38:0;;;;;;;;;;;;:::i;:::-;;;31504:164;;31644:8;;;31504:164;31597:5;-1:-1:-1;31688:7:0;31684:56;;31716:8;;;31684:56;31462:289;31436:315;31766:7;31763:991;;;-1:-1:-1;;;;;31794:11:0;;;;;;:7;:11;;;;;;;;31790:474;;;31849:10;:18;31826:12;:41;;31849:18;;;;-1:-1:-1;;31886:45:0;;;;;;;31911:20;;;;;31886:45;;;;;;;;31790:474;;;-1:-1:-1;;;;;31957:13:0;;;;;;:7;:13;;;;;;;;31953:311;;;32014:9;:17;31991:12;:40;;32014:17;;;;-1:-1:-1;;32050:44:0;;;;;;;32075:19;;;;;32050:44;;;;;;;;31953:311;;;32158:14;:22;32135:12;:45;;32158:22;;;;-1:-1:-1;;32199:49:0;;;;;;;32224:24;;;;;32199:49;;;;;;;;31953:311;32329:10;:27;32305:12;:20;32329:27;;;;;;;;32295:30;;32305:20;32295:7;:30;:::i;:::-;32294:62;;;;:::i;:::-;32280:11;;;:76;32423:10;:27;32397:12;:22;32423:27;;;;;;;;32387:32;;32397:22;;;;32387:7;:32;:::i;:::-;32386:64;;;;:::i;:::-;32371:12;;;:79;;;32501:11;;;;:26;;32371:79;32501:26;:::i;:::-;32490:38;;:7;:38;:::i;:::-;32465:63;;32559:11;;;;:25;;32573:11;;32559:25;:::i;:::-;32545:11;;;:39;31763:991;;;32631:1;32617:11;;;:15;;;32647:12;;;:16;;;32678:32;;;32727:11;;;:15;31763:991;32837:11;32822:6;:12;;;:26;;;;:::i;:::-;32807:6;:11;;;:42;;;;:::i;:::-;32789:6;:14;;;:61;;;;:::i;:::-;32764:22;;;:86;-1:-1:-1;32764:22:0;31179:1703;-1:-1:-1;;;;;31179:1703:0: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:656::-;2761:4;2790:2;2819;2808:9;2801:21;2851:6;2845:13;2894:6;2889:2;2878:9;2874:18;2867:34;2919:1;2929:140;2943:6;2940:1;2937:13;2929:140;;;3038:14;;;3034:23;;3028:30;3004:17;;;3023:2;3000:26;2993:66;2958:10;;2929:140;;;3087:6;3084:1;3081:13;3078:91;;;3157:1;3152:2;3143:6;3132:9;3128:22;3124:31;3117:42;3078:91;-1:-1:-1;3221:2:1;3209:15;-1:-1:-1;;3205:88:1;3190:104;;;;3296:2;3186:113;;2649:656;-1:-1:-1;;;2649:656:1:o;3558:315::-;3626:6;3634;3687:2;3675:9;3666:7;3662:23;3658:32;3655:52;;;3703:1;3700;3693:12;3655:52;3742:9;3729:23;3761:31;3786:5;3761:31;:::i;:::-;3811:5;3863:2;3848:18;;;;3835:32;;-1:-1:-1;;;3558:315:1:o;4070:382::-;4135:6;4143;4196:2;4184:9;4175:7;4171:23;4167:32;4164:52;;;4212:1;4209;4202:12;4164:52;4251:9;4238:23;4270:31;4295:5;4270:31;:::i;:::-;4320:5;-1:-1:-1;4377:2:1;4362:18;;4349:32;4390:30;4349:32;4390:30;:::i;4985:456::-;5062:6;5070;5078;5131:2;5119:9;5110:7;5106:23;5102:32;5099:52;;;5147:1;5144;5137:12;5099:52;5186:9;5173:23;5205:31;5230:5;5205:31;:::i;:::-;5255:5;-1:-1:-1;5312:2:1;5297:18;;5284:32;5325:33;5284:32;5325:33;:::i;:::-;4985:456;;5377:7;;-1:-1:-1;;;5431:2:1;5416:18;;;;5403:32;;4985:456::o;5446:248::-;5514:6;5522;5575:2;5563:9;5554:7;5550:23;5546:32;5543:52;;;5591:1;5588;5581:12;5543:52;-1:-1:-1;;5614:23:1;;;5684:2;5669:18;;;5656:32;;-1:-1:-1;5446:248:1:o;5699:662::-;5753:5;5806:3;5799:4;5791:6;5787:17;5783:27;5773:55;;5824:1;5821;5814:12;5773:55;5860:6;5847:20;5886:4;5910:60;5926:43;5966:2;5926:43;:::i;5910:60::-;6004:15;;;6090:1;6086:10;;;;6074:23;;6070:32;;;6035:12;;;;6114:15;;;6111:35;;;6142:1;6139;6132:12;6111:35;6178:2;6170:6;6166:15;6190:142;6206:6;6201:3;6198:15;6190:142;;;6272:17;;6260:30;;6310:12;;;;6223;;6190:142;;6366:595;6484:6;6492;6545:2;6533:9;6524:7;6520:23;6516:32;6513:52;;;6561:1;6558;6551:12;6513:52;6601:9;6588:23;6630:18;6671:2;6663:6;6660:14;6657:34;;;6687:1;6684;6677:12;6657:34;6710:61;6763:7;6754:6;6743:9;6739:22;6710:61;:::i;:::-;6700:71;;6824:2;6813:9;6809:18;6796:32;6780:48;;6853:2;6843:8;6840:16;6837:36;;;6869:1;6866;6859:12;6837:36;;6892:63;6947:7;6936:8;6925:9;6921:24;6892:63;:::i;:::-;6882:73;;;6366:595;;;;;:::o;6966:180::-;7025:6;7078:2;7066:9;7057:7;7053:23;7049:32;7046:52;;;7094:1;7091;7084:12;7046:52;-1:-1:-1;7117:23:1;;6966:180;-1:-1:-1;6966:180:1:o;7340:247::-;7399:6;7452:2;7440:9;7431:7;7427:23;7423:32;7420:52;;;7468:1;7465;7458:12;7420:52;7507:9;7494:23;7526:31;7551:5;7526:31;:::i;7592:545::-;7685:6;7693;7701;7754:2;7742:9;7733:7;7729:23;7725:32;7722:52;;;7770:1;7767;7760:12;7722:52;7809:9;7796:23;7828:31;7853:5;7828:31;:::i;:::-;7878:5;-1:-1:-1;7935:2:1;7920:18;;7907:32;7948:33;7907:32;7948:33;:::i;:::-;8000:7;-1:-1:-1;8059:2:1;8044:18;;8031:32;8072:33;8031:32;8072:33;:::i;:::-;8124:7;8114:17;;;7592:545;;;;;:::o;8142:159::-;8209:20;;8269:6;8258:18;;8248:29;;8238:57;;8291:1;8288;8281:12;8238:57;8142:159;;;:::o;8306:328::-;8380:6;8388;8396;8449:2;8437:9;8428:7;8424:23;8420:32;8417:52;;;8465:1;8462;8455:12;8417:52;8488:28;8506:9;8488:28;:::i;:::-;8478:38;;8535:37;8568:2;8557:9;8553:18;8535:37;:::i;:::-;8525:47;;8591:37;8624:2;8613:9;8609:18;8591:37;:::i;:::-;8581:47;;8306:328;;;;;:::o;8639:401::-;8721:6;8729;8737;8745;8798:3;8786:9;8777:7;8773:23;8769:33;8766:53;;;8815:1;8812;8805:12;8766:53;8838:28;8856:9;8838:28;:::i;:::-;8828:38;;8885:37;8918:2;8907:9;8903:18;8885:37;:::i;:::-;8875:47;;8941:37;8974:2;8963:9;8959:18;8941:37;:::i;:::-;8931:47;;8997:37;9030:2;9019:9;9015:18;8997:37;:::i;:::-;8987:47;;8639:401;;;;;;;:::o;9045:511::-;9113:6;9121;9129;9182:2;9170:9;9161:7;9157:23;9153:32;9150:52;;;9198:1;9195;9188:12;9150:52;9237:9;9224:23;9256:28;9278:5;9256:28;:::i;:::-;9303:5;-1:-1:-1;9360:2:1;9345:18;;9332:32;9373:30;9332:32;9373:30;:::i;:::-;9422:7;-1:-1:-1;9481:2:1;9466:18;;9453:32;9494:30;9453:32;9494:30;:::i;9561:241::-;9617:6;9670:2;9658:9;9649:7;9645:23;9641:32;9638:52;;;9686:1;9683;9676:12;9638:52;9725:9;9712:23;9744:28;9766:5;9744:28;:::i;10256:388::-;10324:6;10332;10385:2;10373:9;10364:7;10360:23;10356:32;10353:52;;;10401:1;10398;10391:12;10353:52;10440:9;10427:23;10459:31;10484:5;10459:31;:::i;:::-;10509:5;-1:-1:-1;10566:2:1;10551:18;;10538:32;10579:33;10538:32;10579:33;:::i;10649:821::-;10801:6;10809;10817;10870:2;10858:9;10849:7;10845:23;10841:32;10838:52;;;10886:1;10883;10876:12;10838:52;10926:9;10913:23;10955:18;10996:2;10988:6;10985:14;10982:34;;;11012:1;11009;11002:12;10982:34;11035:61;11088:7;11079:6;11068:9;11064:22;11035:61;:::i;:::-;11025:71;;11149:2;11138:9;11134:18;11121:32;11105:48;;11178:2;11168:8;11165:16;11162:36;;;11194:1;11191;11184:12;11162:36;11217:63;11272:7;11261:8;11250:9;11246:24;11217:63;:::i;:::-;11207:73;;11333:2;11322:9;11318:18;11305:32;11289:48;;11362:2;11352:8;11349:16;11346:36;;;11378:1;11375;11368:12;11346:36;;11401:63;11456:7;11445:8;11434:9;11430:24;11401:63;:::i;:::-;11391:73;;;10649:821;;;;;:::o;11919:385::-;12005:6;12013;12021;12029;12082:3;12070:9;12061:7;12057:23;12053:33;12050:53;;;12099:1;12096;12089:12;12050:53;-1:-1:-1;;12122:23:1;;;12192:2;12177:18;;12164:32;;-1:-1:-1;12243:2:1;12228:18;;12215:32;;12294:2;12279:18;12266:32;;-1:-1:-1;11919:385:1;-1:-1:-1;11919:385:1:o;12655:484::-;12708:3;12746:5;12740:12;12773:6;12768:3;12761:19;12799:4;12828:2;12823:3;12819:12;12812:19;;12865:2;12858:5;12854:14;12886:1;12896:218;12910:6;12907:1;12904:13;12896:218;;;12975:13;;-1:-1:-1;;;;;12971:62:1;12959:75;;13054:12;;;;13089:15;;;;12932:1;12925:9;12896:218;;;-1:-1:-1;13130:3:1;;12655:484;-1:-1:-1;;;;;12655:484:1:o;13144:342::-;13345:2;13334:9;13327:21;13308:4;13365:56;13417:2;13406:9;13402:18;13394:6;13365:56;:::i;:::-;13357:64;;13471:6;13464:14;13457:22;13452:2;13441:9;13437:18;13430:50;13144:342;;;;;:::o;13491:184::-;13543:77;13540:1;13533:88;13640:4;13637:1;13630:15;13664:4;13661:1;13654:15;13680:482;13769:1;13812:5;13769:1;13826:330;13847:7;13837:8;13834:21;13826:330;;;13966:4;-1:-1:-1;;13894:77:1;13888:4;13885:87;13882:113;;;13975:18;;:::i;:::-;14025:7;14015:8;14011:22;14008:55;;;14045:16;;;;14008:55;14124:22;;;;14084:15;;;;13826:330;;;13830:3;13680:482;;;;;:::o;14167:866::-;14216:5;14246:8;14236:80;;-1:-1:-1;14287:1:1;14301:5;;14236:80;14335:4;14325:76;;-1:-1:-1;14372:1:1;14386:5;;14325:76;14417:4;14435:1;14430:59;;;;14503:1;14498:130;;;;14410:218;;14430:59;14460:1;14451:10;;14474:5;;;14498:130;14535:3;14525:8;14522:17;14519:43;;;14542:18;;:::i;:::-;-1:-1:-1;;14598:1:1;14584:16;;14613:5;;14410:218;;14712:2;14702:8;14699:16;14693:3;14687:4;14684:13;14680:36;14674:2;14664:8;14661:16;14656:2;14650:4;14647:12;14643:35;14640:77;14637:159;;;-1:-1:-1;14749:19:1;;;14781:5;;14637:159;14828:34;14853:8;14847:4;14828:34;:::i;:::-;14958:6;-1:-1:-1;;14886:79:1;14877:7;14874:92;14871:118;;;14969:18;;:::i;:::-;15007:20;;14167:866;-1:-1:-1;;;14167:866:1:o;15038:140::-;15096:5;15125:47;15166:4;15156:8;15152:19;15146:4;15125:47;:::i;15183:274::-;15223:1;15249;15239:189;;15284:77;15281:1;15274:88;15385:4;15382:1;15375:15;15413:4;15410:1;15403:15;15239:189;-1:-1:-1;15442:9:1;;15183:274::o;16176:228::-;16216:7;16342:1;-1:-1:-1;;16270:74:1;16267:1;16264:81;16259:1;16252:9;16245:17;16241:105;16238:131;;;16349:18;;:::i;:::-;-1:-1:-1;16389:9:1;;16176:228::o;16409:184::-;16461:77;16458:1;16451:88;16558:4;16555:1;16548:15;16582:4;16579:1;16572:15;16598:184;16650:77;16647:1;16640:88;16747:4;16744:1;16737:15;16771:4;16768:1;16761:15;16787:125;16827:4;16855:1;16852;16849:8;16846:34;;;16860:18;;:::i;:::-;-1:-1:-1;16897:9:1;;16787:125::o;16917:195::-;16956:3;-1:-1:-1;;16980:5:1;16977:77;16974:103;;;17057:18;;:::i;:::-;-1:-1:-1;17104:1:1;17093:13;;16917:195::o;17886:175::-;17923:3;17967:4;17960:5;17956:16;17996:4;17987:7;17984:17;17981:43;;;18004:18;;:::i;:::-;18053:1;18040:15;;17886:175;-1:-1:-1;;17886:175:1:o;18066:128::-;18106:3;18137:1;18133:6;18130:1;18127:13;18124:39;;;18143:18;;:::i;:::-;-1:-1:-1;18179:9:1;;18066:128::o;19464:184::-;19534:6;19587:2;19575:9;19566:7;19562:23;19558:32;19555:52;;;19603:1;19600;19593:12;19555:52;-1:-1:-1;19626:16:1;;19464:184;-1:-1:-1;19464:184:1:o;22202:224::-;22241:3;22269:6;22302:2;22299:1;22295:10;22332:2;22329:1;22325:10;22363:3;22359:2;22355:12;22350:3;22347:21;22344:47;;;22371:18;;:::i;:::-;22407:13;;22202:224;-1:-1:-1;;;;22202:224:1:o;22431:217::-;22470:4;22499:6;22555:10;;;;22525;;22577:12;;;22574:38;;;22592:18;;:::i;:::-;22629:13;;22431:217;-1:-1:-1;;;22431:217:1:o;23007:251::-;23077:6;23130:2;23118:9;23109:7;23105:23;23101:32;23098:52;;;23146:1;23143;23136:12;23098:52;23178:9;23172:16;23197:31;23222:5;23197:31;:::i;23952:245::-;24019:6;24072:2;24060:9;24051:7;24047:23;24043:32;24040:52;;;24088:1;24085;24078:12;24040:52;24120:9;24114:16;24139:28;24161:5;24139:28;:::i;26943:605::-;27242:6;27231:9;27224:25;27285:6;27280:2;27269:9;27265:18;27258:34;27328:3;27323:2;27312:9;27308:18;27301:31;27205:4;27349:57;27401:3;27390:9;27386:19;27378:6;27349:57;:::i;:::-;-1:-1:-1;;;;;27442:55:1;;;;27437:2;27422:18;;27415:83;-1:-1:-1;27529:3:1;27514:19;27507:35;27341:65;26943:605;-1:-1:-1;;;26943:605:1:o;28188:306::-;28276:6;28284;28292;28345:2;28333:9;28324:7;28320:23;28316:32;28313:52;;;28361:1;28358;28351:12;28313:52;28390:9;28384:16;28374:26;;28440:2;28429:9;28425:18;28419:25;28409:35;;28484:2;28473:9;28469:18;28463:25;28453:35;;28188:306;;;;;:::o

Swarm Source

ipfs://8aab4f87e8e1ec38bbbc1798155241ef78f0b776211aefd706ef093d68be43f3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.